C#中的HTTPS帖子,Winforms(流编写器、HttpWebResponse、HttpWebRequest)
更新:我正在尝试将数据发布到https URI。POST可用于HTTP,但无法用于HTTPS uriC#中的HTTPS帖子,Winforms(流编写器、HttpWebResponse、HttpWebRequest),c#,winforms,post,https,C#,Winforms,Post,Https,更新:我正在尝试将数据发布到https URI。POST可用于HTTP,但无法用于HTTPS uri 嗨,我正在创建一个c#winforms exe来将数据发布到网站。代码如下。问题是,流复制了我的帖子数据 假设我想发布这个->username=bob 然后当我检查流量时,实际发送的是,username=bobusername=bob 看到了吗?它复制,它再次将同一行添加到缓冲区的末尾并发送它 两天来我一直想找出问题所在,我快发疯了。。有谁能解决这个问题或给我一些提示吗?谢谢 (内容长度正确设
嗨,我正在创建一个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_数据)上放置了一个断点代码>和postBytes
包含正确的数据。。。但它得到了两次输出
为什么会这样?我希望我说得很清楚。您可以尝试通过设置跟踪配置来获取更多信息,如本文所述。当我尝试您的代码时,我得到以下输出:
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对象。在我将URI中的主机更改为可寻址(已使用)后,我尝试了您的代码,它似乎按预期工作(发送了一个带有12字节负载的HTTP Post)。以下是wireshark的追踪:
您可以尝试使用我用来查看您得到的URI,这至少可以排除您的计算机或代码可能是问题的根源。如果使用不同的URI时问题消失,则问题可能出现在您的网络设备和web服务器之间(反向代理配置、web服务器配置、网络交换机配置等)。您好jiaji wu,感谢您的时间和帮助。我试着关闭webresponse。但它仍在发送副本。是的,有点不对劲,我是另外一个人嗨,Darwyn,谢谢你的时间和帮助。。我尝试了这个新的URI,并注意到,现在我的exe发送正确的数据。。但我发现有趣的是,只有当它的HTTPS请求。。对于HTTP链接,它只需要一个buff tiem。。有人知道为什么HTTPS(安全)连接的数据是重复的吗?我正在尝试发送到HTTPS站点。。(现在编辑我的tquestion)它对HTTPS失败,对HTTP有效。我想发布到HTTPS URI不幸。。。