一、测试环境
机器A:Windows7 简体中文旗舰版,已安装.net framework2.0和4.0
机器B:Windowsxp 英文专业版,已安装.net framework2.0和4.0
机器C:Windowsxp 简体中文专业版,只安装了.net framework2.0
程序是基于.net framework2.0写的
二、测试代码
try
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
CookieContainer cookieContainer = new CookieContainer();
httpWebRequest.CookieContainer = cookieContainer;
httpWebRequest.Timeout = 5000;
Stream responseStream = httpWebRequest.GetResponse().GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream, Encoding.GetEncoding(encode));
result = streamReader.ReadToEnd();
}
catch (Exception ex)
{
result = ex.ToString();
}
return result;
三、问题
很简单的一段代码,很久以前写的了,这天又拿出来用,却发现不能用了,总是抛异常(请求超时),试了好多不同的url都是一样,还以为是没写UserAgent或者UserAgent写的有问题,抓了个浏览器的包,把浏览器的UserAgent拷出来再试,也不行。把以前可以用的程序直接拿出来跑,也是一样。左思右想,代码一直没人动,变了的是操作系统由以前的window xp变成了现在的windows 7(机器A),立即拿到windows xp虚拟机(机器C)里去跑跑试试,直接从Debug里把文件拷过去,一跑可以用。由于windows xp虚拟机(机器C)只装了.net framework2.0,是不是.net framework4.0影响的呢?第二天直接拿到公司电脑(机器B)也可以用。
不能这么杯具吧?难道windows7就不行了吗?Microsoft不想让大家用HttpWebRequest了?
四、解决
经过几天在网上搜索,终于找到了一个和我差不多的问题,并给出了解决方法,不过他说是.net framework4.0,而我的是在windows7上就出问题。
最终根据给出的解决方法分析,可能是和系统不同的“默认代理和用户验证策略”有关。大家有知道准确原因的请指教。
解决方法如下:在app.config里加入以下代码,原来的代码C#代码无需修改
<defaultProxy
enabled="false"
useDefaultCredentials="false" >
<proxy/>
<bypasslist/>
<module/>
</defaultProxy>
</system.net>
五、参考
http://msdn2.microsoft.com/en-us/library/kd3cf2ex(VS.80).aspx