C# c无法将POST数据写入https请求
这个问题很奇怪,但我很感激任何建议。 应用程序使用3个线程工作,并发送POST https请求。当我使用内部代理Fiddler2时,所有3个请求都成功发送。当我不使用内部代理时,会发送2个请求,最后一个请求(取决于哪个线程更快到达请求)失败,出现超时异常。它就是不能写POST数据。以下是在不同线程中发送3次请求的示例: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
//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如何处理并使其工作对我来说仍然是一个魔术。在不使用代理时,尝试通过在每篇文章之间添加手动延迟来进行测试。如果这样做有效,那么几乎可以肯定这是一个服务器端问题。