簡體   English   中英

C#中的HTTPS POST,Winforms(Stream Writer,HttpWebResponse,HttpWebRequest)

[英]HTTPS POST in C#, Winforms (Stream Writer, HttpWebResponse, HttpWebRequest)

更新:我正在嘗試將數據發布到https URI。 POST適用於HTTP,但HTTPS uri失敗


嗨,我正在創建ac#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);上放了一個斷點byte[] postBytes = Encoding.ASCII.GetBytes(post_data); postBytes包含正確的數據......但它輸出兩次。

為什么會這樣? 我希望我很清楚..

我嘗試了你的代碼,在我將URI中的主機更改為可尋址的東西(使用http://adsf.com/login )之后,它似乎按預期工作(發送了帶有12byte有效負載的HTTP Post)。 這是來自wireshark的痕跡:

Wireshark跟蹤

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

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

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對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM