2008-09-02 200 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 :-)