HTTP POST-我被卡住了
我必须将一些参数发布到网络外部的URL,另一端的开发人员要求我不要使用HTTP参数:相反,我必须将键值发布在HTTP标头中。
事实是,我并不真正理解它们的含义:我尝试使用带有XmlHttp对象的类似于Ajax的帖子,并且还尝试使用类似以下内容的标头来编写
Request.Headers.Add(key,value);
但是我不能(框架除外);我尝试了另一种方法,例如使用Response对象
Response.AppendHeader("key", "value");
然后重定向到页面...但这也行不通。
我认为很明显,我被困在那里,有什么帮助吗?
编辑我忘了告诉你,我的环境是Win Server 2003上的.Net 2.0,c#。
我得到的例外是
System.PlatformNotSupportedException was unhandled by user code Message="Operation is not supported on this platform." Source="System.Web"
看来这是由于我对MS的Request.Add的初步尝试引起的,一年前,MS发布了一些不允许这样做的安全修复程序。
解决方案
回答
我们应该发布更多信息。
例如,这是C#吗?看起来像,但我可能错了。
另外,我们说我们得到一个异常,异常类型和消息是什么?
无论如何,我们都无法重定向到POST页面,我们需要从浏览器而不是从服务器重定向提交它,因此,如果要自动执行此操作,我想我们将需要生成一个html页面,表单标签,其中包含一些隐藏的输入字段,然后使用javascript提交。
回答
我认为他们的意思是他们不希望我们使用URL参数(GET)。如果我们使用http标头,则实际上不再通过POST查询。
回答
什么语言/框架?
使用Python和httplib2,我们应该可以执行以下操作:
http = httplib2.Http() http.request(url, 'POST', headers={'key': 'value'}, body=urllib.urlencode(''))
回答
我相信Request对象将只接受一组预定义的标头。
有一个枚举也列出了所有受支持的HTTP标头。
但是我现在不记得了...我会在几秒钟后再查找...
回答
看一下HttpWebRequest。我们应该能够使用HttpWebRequest.Method =" POST"构造对相关URL的请求。
回答
就像@lassevk所说的那样,重定向将不起作用。
我们应该使用WebRequest类从页面或者应用程序执行HTTP POST。这里有一个例子。
回答
我们是否尝试过WebClient类?一个例子可能看起来像:
WebClient client = new WebClient(); NameValueCollection data = new NameValueCollection(); data["var1"] = "var1"; client.UploadValues("http://somewhere.com/api", "POST", data);
回答
我使用XmlHttpRequest选项的2个示例页面测试了方案。
使用XmlHttpRequest在发布到的aspx页面中可以使用自定义标头。
创建以下2页。确保aspx页面位于solution中,以便我们可以在调试器中运行,设置断点并检查Request.Header集合。
<html>
<头>
< script language="javascript"> function SendRequest() { var r = new XMLHttpRequest(); r.open('get', 'http://localhost/TestSite/CheckHeader.aspx'); r.setRequestHeader('X-Test', 'one'); r.setRequestHeader('X-Test', 'two'); r.send(null); } < script / >
</ head>
<身体>
<表格>
<input type =" button" value ="点击我" OnClick =" SendRequest();" />
</ form>
</ body>
</ html>
CheckHeader.aspx
使用系统;
使用System.Web;
使用System.Web.UI;
公共局部类CheckHeader:System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) { string value = string.Empty; foreach (string key in Request.Headers) value = Request.Headers[key].ToString(); }
}
男人..这个HTML编辑器很烂..或者我不知道如何使用...
回答
我昨天遇到的异常是由于我愚蠢的尝试写在已构建页面的页眉上而引起的。
当我按照此处指示的一种方法开始创建请求时,可以编写标题。
现在,我在使用WebRequest对象,如@sectrean所示的示例。
非常感谢大家。 StackOverflow岩石:-)