request.GetResponse总是给人超时

编程入门 行业动态 更新时间:2024-10-26 10:34:48
本文介绍了request.GetResponse总是给人超时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我做了一个功能的程序,它不工作时,请求类型是 GET ,如果是 POST ,它总是产生超时异常(和50年代的超时wasnt到达)的行 HttpWebResponse响应=(HttpWebResponse)request.GetResponse(); 我试过很多东西,但我犯规找到了原因,也许这里有人知道这一点。 修改:得到它的工作,如果有人有兴趣: gist.github/4347248 任何帮助将大大AP preciated。 我的code是:

公共ResRequest请求(字符串URL,请求类型(典型值),CookieCollection饼干,串POSTDATA =,INT超时= 50000)     {         byte []的数据;         流REQ;         流RESP;         HttpWebRequest的要求= WebRequest.Create(URL)为HttpWebRequest的;         request.Timeout =超时;         request.ContinueTimeout =超时;         request.ReadWriteTimeout =超时;         request.Proxy =新WebProxy(127.0.0.1,8118);         request.Headers.Add(Htt的prequestHeader.AcceptLanguage,德);         request.Headers.Add(UA-CPU,86);         request.Headers.Add(Htt的prequestHeader.AcceptEncoding,GZIP,放气);         request.UserAgent =Mozilla的/ 4.0(兼容; MSIE 7.0; Windows NT的6.0; WOW64; SLCC1; .NET CLR 2.0.50727; Media Center PC的5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618);         request.CookieContainer =新的CookieContainer();         request.CookieContainer.Add(饼干);         如果(典型值== RequestType.POST)         {             数据= System.Text.Encoding.Default.GetBytes(POSTDATA);             request.Method =POST;             request.ContentType =应用/的X WWW的形式urlen codeD;             request.ContentLength = data.Length;             REQ = request.GetRequestStream(); //试了几次后,这产生了超时错误             req.Write(数据,0,data.Length);             req.Close();             HttpWebResponse响应=(HttpWebResponse)request.GetResponse(); //这一行产生超时异常             RESP = response.GetResponseStream();             如果((response.ContentEncoding.ToLower()。包含(GZIP)))             {                 RESP =新System.IO.Com pression.GZipStream(RESP,System.IO.Com pression.Com pressionMode.Decom preSS);             }否则,如果((response.ContentEncoding.ToLower()。包含(放气))){                 RESP =新System.IO.Com pression.DeflateStream(RESP,System.IO.Com pression.Com pressionMode.Decom preSS);             }             返回新ResRequest(){结果=新就是System.IO.StreamReader(RESP,System.Text.Encoding.UTF8).ReadToEnd(),饼干= response.Cookies,CString的= cookiestring(response.Cookies)};         }         其他         {             request.Method =GET;             HttpWebResponse响应=(HttpWebResponse)request.GetResponse();             RESP = response.GetResponseStream();             如果((response.ContentEncoding.ToLower()。包含(GZIP)))             {                 RESP =新System.IO.Com pression.GZipStream(RESP,System.IO.Com pression.Com pressionMode.Decom preSS);             }             否则,如果((response.ContentEncoding.ToLower()。包含(放气)))             {                 RESP =新System.IO.Com pression.DeflateStream(RESP,System.IO.Com pression.Com pressionMode.Decom preSS);             }             返回新ResRequest(){结果=新就是System.IO.StreamReader(RESP,System.Text.Encoding.UTF8).ReadToEnd(),饼干= response.Cookies,CString的= cookiestring(response.Cookies)};         }     }

解决方案

所以它每次都挂在 req.GetRequestStream(),或它的工作原理几试图然后挂机?

如果它工作了几下,然后挂起,它可能是你没有关闭请求不当,这是造成你用完的连接。确保关闭()和/或的Dispose()的 HttpWebResponse 的对象,所有的流和读者,你创造的。

I made a Function for a program, which does work when the Request Type is GET, if it is POST, it always produces a Timeout Exception(and the timeout of 50s wasnt reached) on the Line HttpWebResponse response = (HttpWebResponse)request.GetResponse(); I tried many things, but I doesnt found out why, may someone here know it. Edit: Got it to work, if someone is interested: gist.github/4347248 Any help will be greatly appreciated. My Code is:

public ResRequest request(string URL, RequestType typ, CookieCollection cookies, string postdata ="", int timeout= 50000) { byte[] data; Stream req; Stream resp; HttpWebRequest request = WebRequest.Create(URL) as HttpWebRequest; request.Timeout = timeout; request.ContinueTimeout = timeout; request.ReadWriteTimeout = timeout; request.Proxy = new WebProxy("127.0.0.1", 8118); request.Headers.Add(HttpRequestHeader.AcceptLanguage, "de"); request.Headers.Add("UA-CPU", "x86"); request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618) "; request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); if (typ == RequestType.POST) { data = System.Text.Encoding.Default.GetBytes(postdata); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = data.Length; req = request.GetRequestStream();//after a few tries this produced a Timeout error req.Write(data, 0, data.Length); req.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse();//This line produces a Timeout Exception resp = response.GetResponseStream(); if ((response.ContentEncoding.ToLower().Contains("gzip"))) { resp = new System.IO.Compression.GZipStream(resp, System.IO.Compression.CompressionMode.Decompress); } else if ((response.ContentEncoding.ToLower().Contains("deflate"))) { resp = new System.IO.Compression.DeflateStream(resp, System.IO.Compression.CompressionMode.Decompress); } return new ResRequest() { result = new System.IO.StreamReader(resp, System.Text.Encoding.UTF8).ReadToEnd(), cookies = response.Cookies, cstring = cookiestring(response.Cookies) }; } else { request.Method = "GET"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); resp = response.GetResponseStream(); if ((response.ContentEncoding.ToLower().Contains("gzip"))) { resp = new System.IO.Compression.GZipStream(resp, System.IO.Compression.CompressionMode.Decompress); } else if ((response.ContentEncoding.ToLower().Contains("deflate"))) { resp = new System.IO.Compression.DeflateStream(resp, System.IO.Compression.CompressionMode.Decompress); } return new ResRequest() { result = new System.IO.StreamReader(resp, System.Text.Encoding.UTF8).ReadToEnd(), cookies = response.Cookies, cstring = cookiestring(response.Cookies) }; } }

解决方案

So does it hang on req.GetRequestStream() every time, or does it work "a few tries" and then hang?

If it works a few times and then hangs, it's possible that you're not closing the requests properly, which is causing you to run out of connections. Make sure to Close() and/or Dispose() the HttpWebResponse objects and all of the Streams and Readers that you're creating.

更多推荐

request.GetResponse总是给人超时

本文发布于:2023-11-05 19:39:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1561665.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:给人   request   GetResponse

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!