今天用了将近一天的时间来查找这个问题的存在,不停的百度查找原因测试原因,发现解决方案很是简单,不过最好还好哦啊都解决了,在这里纪录一下,希望可以帮到你们

 payload = System.Text.Encoding.UTF8.GetBytes(postDataStr);
request.ContentLength = payload.Length;
Stream writer = request.GetRequestStream();
writer.Write(payload, , payload.Length);
//writer.Flush();
writer.Close();
//HttpWebResponse response = (HttpWebResponse)request.GetResponse();
HttpWebResponse res;
try
{
System.Net.ServicePointManager.DefaultConnectionLimit = ;
res = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{ res = (HttpWebResponse)ex.Response;
}

今天我的res 一直报操作超时,百度了很多方案,一一测试,总结来说,如果你也出现了这种错误,可以一次尝试一下方案

第一种:加长request的timeout的时间,默认是100秒(我就是测试了好多方案,才发现我的timeout的时间太短,引起的操作超时)

第二种:设置request.KeepAlive = false;原因是:默认KeepAlive的属性是true,将此属性设置为 true 以发送带有 Keep-alive 值的 Connection HTTP 标头。 应用程序使用 KeepAlive 指示持久连接的首选项。 当 KeepAlive 属性为 true 时,应用程序与支持它们的服务器建立持久连接。也要记住要及时关闭相对应的关闭工作

if (request != null)
{
request.Abort();
}
if (res != null)
{
res.Close();
}

第三种:

System.Net.ServicePointManager.DefaultConnectionLimit = ;

加上这句话,因为这个默认设置的是2,当http的连接超过2条时,也会报这种操作超时的错误

第四种:

                System.GC.Collect();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postDataStr.Length;
request.KeepAlive = false;
request.Timeout = ;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);

之前加上:System.GC.Collect();

原因是:系统中的http相关的资源没有正确的释放,导致后续的GetResponse或者说GetRequestStream超时死掉

改进之后的所有代码:

public static bool HttpPost(string Url, string postDataStr, out string errMsg, out string returnData)
{
try
{
System.GC.Collect();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postDataStr.Length;
request.KeepAlive = false;
request.Timeout = ;
//StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.UTF8);
//writer.Write(postDataStr);
//writer.Flush();
byte[] payload;
payload = System.Text.Encoding.UTF8.GetBytes(postDataStr);
request.ContentLength = payload.Length;
Stream writer = request.GetRequestStream();
writer.Write(payload, , payload.Length);
//writer.Flush();
writer.Close();
//HttpWebResponse response = (HttpWebResponse)request.GetResponse();
HttpWebResponse res;
try
{
System.Net.ServicePointManager.DefaultConnectionLimit = ;
res = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{ res = (HttpWebResponse)ex.Response;
} //StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
string retString = reader.ReadToEnd();
errMsg = "";
try
{
returnData = Util.base642Str(retString);
}
catch (Exception)
{
returnData = retString;
//throw;
}
if (request != null)
{
request.Abort();
}
if (res != null)
{
res.Close();
}
return true;
}

参考文章:https://www.cnblogs.com/wohexiaocai/p/5673193.html

HttpWebRequest中GetResponse或者说GetRequestStream偶尔超时,或者是各种操作超时造成的假死的一些解决方案的更多相关文章

  1. HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法

    [问题] 用C#模拟网页登陆,其中去请求几个页面,会发起对应的http的请求request,其中keepAlive设置为true,提交请求后,然后会有对应的response: resp = (Http ...

  2. 【转载】HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法

    [问题] 用C#模拟网页登陆,其中去请求几个页面,会发起对应的http的请求request,其中keepAlive设置为true,提交请求后,然后会有对应的response: resp = (Http ...

  3. 【已解决】HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法

    [问题] 用C#模拟网页登陆,其中去请求几个页面,会发起对应的http的请求request,其中keepAlive设置为true,提交请求后,然后会有对应的response: resp = (Http ...

  4. HttpWebRequest在GetResponse时总是超时

    最近在通过RESTFUL接口来发布些数据,总是出现请求超时,好不容易找到个靠谱点的了,记下来,回去试下!! “ 问题就是我第一个HttpWebRequest在GetResponse之后,忘记将取得的W ...

  5. 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

    通用辅助类  下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需 要获取认证信息(如Cookie),所以返回的是HttpWeb ...

  6. (转) 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

    转自:http://blog.csdn.net/zhoufoxcn/article/details/6404236 通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中 ...

  7. 【转】在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

    http://zhoufoxcn.blog.51cto.com/792419/561934 这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全 ...

  8. 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求【转载】

    标签:C# HTTPS HttpWebRequest HTTP HttpWebResponse 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. ...

  9. C#中用HttpWebRequest中发送GET/HTTP/HTTPS请求 (转载)

    这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全部采用手工操作工作量大而且繁琐,因此周公决定利用C#来实现.在很多地方都需要验证用户身份才可 ...

随机推荐

  1. iOS开发之JSON转PLIST(把存储json格式的文件转换成plist文件)

    p.p1 { margin: 0.0px 0.0px 0.0px 60.0px; font: 16.0px "PingFang SC"; color: #586e75 } p.p2 ...

  2. IntelliJ IDEA(六) :Settings(下)

    一.Build,Execution,Deployment 项目的构建,执行,部署相关的配置. 1. Build Tools 构建工具,包含Maven,Gradle,Gant. Maven Work o ...

  3. ES6初体验

    开始学习ES6,打算走全栈这条路了,废话不多说,开始吧. 首先安装node环境,去node官网上面下载node最新版本的,我用的系统是window10,所以我只需要下一步下一步就行了,安装完成后打开c ...

  4. Hybris 项目工程配置

    1.控制台页面进入platform目录 cd F:\hybris640\hybris\bin\platform 并运行 setantenv.bat 生成对应的ant. 2.运行 ant moduleg ...

  5. php iconv 函数参数的区别

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/57 用户输入:英特尔® 酷睿™ i7处理器大显身手 case1 ...

  6. 使用requests爬取猫眼电影TOP100榜单

    Requests是一个很方便的python网络编程库,用官方的话是"非转基因,可以安全食用".里面封装了很多的方法,避免了urllib/urllib2的繁琐. 这一节使用reque ...

  7. BZOJ 4819 新生舞会

    第一句话:算出3.363636的孩子啊,你跑错流种了. 貌似上一篇我讲SDOI出原题?嘿还真是! 半个月前有一个叫WG的男人给我们搞过一场考试... ... 里面有一道题叫做保密... ...SDOI ...

  8. touchstart和touchend事件

    touchstart和touchend事件 移动互联网是未来的发展趋势,现在国内很多互联网大佬都在争取移动这一块大饼,如微信及支付宝是目前比较成功的例子,当然还有各种APP和web运用. 由于公司的需 ...

  9. 如何严格设置php中session过期时间

    如何严格限制session在30分钟后过期! 1.设置客户端cookie的lifetime为30分钟: 2.设置session的最大存活周期也为30分钟: 3.为每个session值加入时间戳,然后在 ...

  10. lesson - 4 Linux目录文件管理

    内容概要:1. 和目录相关的几个命令mkdir 关注-p选项 rmdir 同样也有一个-p选项rm -r -f 两个常用选项cp -r 针对目录, 有时我们使用/bin/cpmv 重命名或者移动, 有 ...