C# 中httpwebresponse 遇到302跳转,响应时间会很长

willhuo 2014-11-10 01:57:11
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(urlStr);
request.Method = "POST";
request.AllowAutoRedirect = true;
request.Accept = "text/html, application/xhtml+xml, */*";
request.Referer = urlStr;
request.Headers.Add("Accept-Language", "zh-CN");
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko";
request.ContentType = "application/x-www-form-urlencoded";
request.KeepAlive = true;
request.Host = hostStr;
request.CookieContainer = cc;
request.ContentLength = buff.Length;

Stream s = request.GetRequestStream();
s.Write(buff, 0, buff.Length);

textBox1.AppendText(DateTime.Now+"开始response\r\n");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
textBox1.AppendText(DateTime.Now+"结束response\r\n");
cookies = response.Cookies;
string cookieStr = response.Headers.Get("Set-Cookie");
textBox1.AppendText("cookieStr:"+cookieStr+"\r\n");
foreach (var v in cookies)
{
textBox1.AppendText("cookie:"+v.ToString()+"\r\n");
}

s.Close();
response.Close();


问题在于当进行POST操作以后,会被要求进行重定向,也就是http的302代码。
重定向的地址是GET方式访问的,我用fiddler跟踪了。
用浏览器的方式访问这个地址,也会自动重定向,但是速度很快。
如果用代码的方式处理,速度会很慢,等待相应的时间为31秒。
我做了多次测试,相应时间均为31秒。
以下方法已经尝试过,失败:
增加request.timeout=5000; //延时五秒,无效,并且导致response超时异常
往请求的header里边增加 request.header.add("Accetp-Encoding","gzip,deflate"); 无效,这个只是编码的问题

还有就是我我做过遇到302中断的操作,该方法表示可能存在或多或少的问题,描述如下
如果request.AllowAutoRedirect=false; 表示不跳转
但是如果不跳转,我后续做的事情受影响。。。所以必须要访问跳转地址
有人提示,在中断跳转后增加一次对302跳转地址的访问
我尝试过了,但是好像通过fiddler跟踪不到后来这一次的302地址的访问。
根据程序的反馈信息,确实能够访问成功
但是接下来我要做的事情,或多或少的也存在很大的影响。。。

接下来的事情就是我提取cookie,然后利用webbrowser控件来访问另外一个地址。有时候可以访问成功,有时候会失败。。


所以,如果能解决掉response响应时间过长的问题,接下来的操作将会很顺利了。。。希望有大神能不厌其烦的看完我写的问题。
...全文
913 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
willhuo 2014-11-10
  • 打赏
  • 举报
回复
引用 4 楼 WM_JAWIN 的回复:
request.ServicePoint.Expect100Continue = false;
神一般的男子。。。 你终于粗线了。。。。 以前也遇到过这个东西,只不过是用wirshark抓包才能看见这个东西,fiddler好像看不见这个东西 那个时候,连看都没看,直接抄上了。。。。 感谢大神
hhh380283926 2014-11-10
  • 打赏
  • 举报
回复
嗯 已经看完了
willhuo 2014-11-10
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
嗯,如果對 HttpWebReqeust 不滿意,應該搜一搜沒有替代 HttpWebRequest 的類庫。如果有c#代碼開源的最好。實在不行,就自己使用 TcpClient 封裝一個出來,其實也不是狠麻煩。 --------------------------------------------------------------------------------------------------------- 尼玛,csdn能不能告诉我上面这段话(原来的简体中文内容)有什么“非法词组”不许我发言吗?!
我想不出来还能有啥能代替,如果用socket写的话,会很麻烦的。很多东西都需自己来写,数据的提交,接受并解析,然后模仿302跳转,然后获取数据,解析cookie。。。想想就。。。想撞墙
於黾 2014-11-10
  • 打赏
  • 举报
回复
非法词组多着呢 比如 代*表 开*源
WM_JAWIN 2014-11-10
  • 打赏
  • 举报
回复
request.ServicePoint.Expect100Continue = false;
  • 打赏
  • 举报
回复
总是不告诉“哪一个是非法词组”,这很令人讨厌。哪怕你把我的文字中的非法词组改成*****然后反馈给我也行啊! csdn真应该把网页(回复后)刷新速度提高10倍、用户体验提高一些。而且不要把左边那些漂亮的图片变成“脏兮兮、灰蒙蒙、抠抠搜搜”的外行图片。许多东西需要改进,而我看它的程序员很懒。
  • 打赏
  • 举报
回复
嗯,如果對 HttpWebReqeust 不滿意,應該搜一搜沒有替代 HttpWebRequest 的類庫。如果有c#代碼開源的最好。實在不行,就自己使用 TcpClient 封裝一個出來,其實也不是狠麻煩。 --------------------------------------------------------------------------------------------------------- 尼玛,csdn能不能告诉我上面这段话(原来的简体中文内容)有什么“非法词组”不许我发言吗?!
willhuo 2014-11-10
  • 打赏
  • 举报
回复
POST地址为这个,是POST登陆操作 http://www.game2.cn/logWebsite.php?skin=kt&gid=111&gc=mycs&fm=1>=3107 会自动跳转的

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧