C#中的HTTPS帖子,Winforms(流编写器、HttpWebResponse、HttpWebRequest)

C#中的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 看到了吗?它复制,它再次将同一行添加到缓冲区的末尾并发送它 两天来我一直想找出问题所在,我快发疯了。。有谁能解决这个问题或给我一些提示吗?谢谢 (内容长度正确设

更新:我正在尝试将数据发布到https URI。POST可用于HTTP,但无法用于HTTPS uri


嗨,我正在创建一个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不幸。。。