2012-03-17 53 views
1

更新:我試圖POST數據到https URI。該POST適用於HTTP,但它不能用於HTTPS URIHTTPS POST在C#,Winforms(流編寫器,HttpWebResponse,HttpWebRequest)


你好我創建一個C#的WinForms exe文件將數據發佈到網站。代碼如下。問題是,流複製我的職務數據..

例如:假設我要發佈此 - 當我檢查了交通,什麼是實際發送是>username=bob

然後,username=bobusername=bob

見?它重複,它再次將相同的行添加到緩衝區的末尾併發送它。

我瘋了試圖從兩天內找到問題..任何機構可以解決這個問題或給我一些提示嗎?謝謝..

(內容長度被正確地設置爲12,但它再次發送24個字節,附加相同的數據後,緩衝器的尾部)

有頭

POST /login/ HTTP/1.0 
Content-Type: application/x-www-form-urlencoded 
Host: abc.test.com 
Content-Length: 12 

username=bobusername=bob 
- 

這是我目前使用的

string post_data = "username=bob"; 
string uri = "https://abc.test.com/login/"; 

HttpWebRequest request = (HttpWebRequest) 
WebRequest.Create(uri); 
request.KeepAlive = false; 
request.ProtocolVersion = HttpVersion.Version10; 
request.Method = "POST"; 

byte[] postBytes = Encoding.ASCII.GetBytes(post_data); 

request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = postBytes.Length; 

Stream requestStream = request.GetRequestStream(); 

requestStream.Write(postBytes, 0, postBytes.Length); 

MessageBox.Show(postBytes.Length.ToString()); 
requestStream.Close(); 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
StreamReader sr = new StreamReader(response.GetResponseStream()); 
string tmp = sr.ReadToEnd().Trim(); 

我把一個斷點上線byte[] postBytes = Encoding.ASCII.GetBytes(post_data);postBytes包含正確數據的代碼...但它獲得兩次輸出。

這是怎麼發生的?我希望我很清楚..

回答

1

您可以嘗試通過設置跟蹤配置來獲得更多信息,如page中所述。當我嘗試您的代碼時,我得到以下輸出:

System.Net Verbose: 0 : [2324] Data from ConnectStream#26756241::Write 
System.Net Verbose: 0 : [2324] 00000000 : 75 73 65 72 6E 61 6D 65-3D 62 6F 62    : username=bob 
System.Net Verbose: 0 : [2324] Exiting ConnectStream#26756241::Write() 

看起來數據正確寫入ConnectStream。其他地方有什麼問題?

並且不要忘記關閉WebResponse對象。

+0

hi jiaji wu,謝謝你的時間和幫助。我試圖關閉webresponse。但它仍然發送重複。是的,有些東西是錯誤的其他.. – 2012-03-17 07:36:28

2

我將您的代碼中的主機更改爲可尋址的地址(使用http://adsf.com/login)後,我試用了您的代碼並且它看起來像預期的那樣工作(發送了一個12byte有效負載的HTTP Post)。下面是Wireshark的跟蹤:

Wireshark trace

你可以試試我曾經看到你,這至少會排除您的計算機或代碼問題的可能來源是什麼URI。如果問題在使用不同的URI時消失,那麼問題可能出在網絡設備和Web服務器之間(反向代理配置,Web服務器配置,網絡交換機配置等)。

+0

嗨Darwyn,謝謝你的時間和幫助..我試過這個新的URI,並指出,現在我的EXE發送正確的數據..但我發現有趣的事情是,這失敗僅當其HTTPS請求時對於HTTP鏈接它只能緩衝一個tiem。因此,任何人都知道爲什麼HTTPS(安全)連接的數據是重複的?我正在嘗試發送到HTTPS網站..(現在編輯我的tquestion) – 2012-03-17 07:38:18

+0

HTTPS失敗,它適用於HTTP。我想不幸發佈到HTTPS URI ... – 2012-03-17 07:54:15

相關問題