2008-09-02 165 views
5

我必须将一些参数发布到网络外部的URL,而另一方的开发人员要求我不要使用HTTP参数:相反,我必须将我的键值发布到HTTP标头HTTP POST - 我被卡住了

事实是,我真的不明白他们的意思:我试图用一个类似Ajax的帖子,与为XmlHttp对象,我也试图与一些标题写这样

Request.Headers.Add(key,value); 

但我不能(框架例外);我试过其他方式使用Response对象一样

Response.AppendHeader("key", "value"); 

,然后重定向到页面...但是这不工作,也是如此。

很明显,我认为我卡在那里,有帮助吗?


编辑我忘了告诉你,我的环境是NET 2.0,C#,赢服务器2003年 我得到的例外是

System.PlatformNotSupportedException was unhandled by user code 
    Message="Operation is not supported on this platform." 
    Source="System.Web" 

这看起来像是由引起了我暂定为Request.Add,MS一年前发布了一些不允许的安全修复程序。

回答

1

像@lassevk说的,重定向不起作用。

您应该使用WebRequest类从您的页面或应用程序执行HTTP POST。有一个例子here

0

您应该发布更多信息。

例如,这是C#吗?它看起来像,但我可能是错的。

另外,你说你得到一个异常,什么是异常类型和消息?

无论如何,你不能重定向到POST页面,你需要从浏览器提交它,而不是从服务器重定向,所以如果你想自动化这个,我想你会需要生成一个带有表单标签的html页面,带有一些隐藏的输入字段,然后用javascript提交。

0

我认为他们的意思是他们不希望你使用URL参数(GET)。如果你使用http头文件,它不会再通过POST进行查询。

0

什么语言/框架?

使用Python和httplib2的,你应该能够做这样的事情:

http = httplib2.Http() 
http.request(url, 'POST', headers={'key': 'value'}, body=urllib.urlencode('')) 
0

我相信Request对象将只接受一组特定的预定义的头。

还有一个枚举,它也列出了所有支持的HTTP头。

但我不能在此刻记住它...我会看看它在几秒钟之...

1

看看HttpWebRequest的。您应该能够使用HttpWebRequest.Method =“POST”构建对所讨论的URL的请求。

3

您是否尝试过WebClient类?示例可能如下所示:

 WebClient client = new WebClient(); 
     NameValueCollection data = new NameValueCollection(); 
     data["var1"] = "var1"; 
     client.UploadValues("http://somewhere.com/api", "POST", data); 
0

我使用2个示例页面使用XmlHttpRequest选项测试了您的场景。 使用XmlHttpRequest发布的aspx页面中可以使用自定义标头。

创建以下2页。确保aspx页面在解决方案中,以便您可以在调试器中运行,设置断点并检查Request.Header集合。

<HTML>

<头>

&lt; script language="javascript"&gt; 

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); 

} 
&lt; script/&gt; 

< /头> <体> <形式> < INPUT TYPE = “按钮” 值= “点击我” 的OnClick =”发送请求();”/> < /形式> < /体> </HTML >


CheckHeader.aspx使用System

;

using System.Web;

using 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编辑器吸..或者我不知道如何使用它...

0

我昨天面对的异常是由我愚蠢的尝试写在已建成的页面的标题。

当我按照这里指定的方法之一开始创建我的请求时,我可以写我的标题。

现在我正在使用WebRequest对象,如@sectrean指示的示例here

非常感谢大家。 StackOverflow rocks :-)