C# c无法将POST数据写入https请求

C# c无法将POST数据写入https请求,c#,winforms,https,proxy,C#,Winforms,Https,Proxy,这个问题很奇怪,但我很感激任何建议。 应用程序使用3个线程工作,并发送POST https请求。当我使用内部代理Fiddler2时,所有3个请求都成功发送。当我不使用内部代理时,会发送2个请求,最后一个请求(取决于哪个线程更快到达请求)失败,出现超时异常。它就是不能写POST数据。以下是在不同线程中发送3次请求的示例: //some data before request byte[] byteArray3 = Encoding.ASCII.GetBytes(post_data_final3

这个问题很奇怪,但我很感激任何建议。 应用程序使用3个线程工作,并发送POST https请求。当我使用内部代理Fiddler2时,所有3个请求都成功发送。当我不使用内部代理时,会发送2个请求,最后一个请求(取决于哪个线程更快到达请求)失败,出现超时异常。它就是不能写POST数据。以下是在不同线程中发送3次请求的示例:

 //some data before request
 byte[] byteArray3 = Encoding.ASCII.GetBytes(post_data_final3);
 HttpWebRequest request3 = (HttpWebRequest)WebRequest.Create(site_URI);
 WebHeaderCollection NewHeaders3 = request3.Headers;
 request3.CookieContainer = new CookieContainer();
 request3.Method = "POST";
 request3.Timeout = 60000;
 //some headers info here
 try
 {
     using (Stream os3 = request3.GetRequestStream())
     {
          os3.Write(byteArray3, 0, byteArray3.Length);
     }
 }
 catch (WebException ex33)
 {
     Console.WriteLine(ex33);
     Console.WriteLine(ex33.Status);
 }
 try
 {
     HttpWebResponse response3 = (HttpWebResponse)request3.GetResponse();
     //response handling..
 }
 catch (Exception e) {//catching exception}
在使用Fiddler2的案例1中,上述所有3个请求都运行良好。 在不使用本地代理的情况下,情况2请求完成得很好,最新的请求在阶段上引发异常:

 try
 {
      using (Stream os3 = request3.GetRequestStream())
      {
           os3.Write(byteArray3, 0, byteArray3.Length);
      }
 }
 catch (WebException ex33)
 {
      Console.WriteLine(ex33);
      Console.WriteLine(ex33.Status);
 }
注意,多线程和锁定的实现是正常的,所以在代理和/或https协议的某个地方使用。 我每次都可以使用本地代理,但我不想。谢谢

更新:找到解决方案。在结束阶段关闭所有响应将生效:

try
{
     HttpWebResponse response3 = (HttpWebResponse)request3.GetResponse();
     //response handling..
}
catch (Exception e) {//catching exception}
finally { response3.Close(); }

从历史上看,我所见过的大多数此类问题都会发生 当您忘记调用时。关闭从返回的对象 GetResponseStream。问题的存在是因为当你忘记 关闭第一个请求,第二个请求死锁等待 免费连接

通常,这种挂起发生在第三个请求上,而不是第二个请求上

更新:看看你的复制品,这与订单无关 请求的一部分。您遇到问题,因为此网站正在发送 HTTPS握手开始时出现TLS警告,.NET将 发生这种情况时超时。看见 . 问题只会在Windows Vista及更高版本上出现,因为 警告与HTTPS中不存在的TLS扩展相关 WinXP上的堆栈


但是Fiddler2如何处理并使其工作对我来说仍然是一个魔术。

在不使用代理时,尝试通过在每篇文章之间添加手动延迟来进行测试。如果这样做有效,那么几乎可以肯定这是一个服务器端问题。