我有一段代码可以输出到Google Wallet,并执行HttpWebRequest
。该代码在我所有的机器上都可以正常工作,除了我现在正在使用的这台计算机上。这台计算机上的Internet正常运行(因为我现在正在使用它来键入此问题),并且我们没有代理服务器在工作。
问题在于它只是挂起。甚至没有超时。它只是挂起而没有任何错误信息或任何东西,我不得不强行关闭它。这是代码:
private static string GetLoginHtml()
{
var request = (HttpWebRequest)WebRequest.Create(LoginUrl);
var cookieJar = new CookieContainer();
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.CookieContainer = cookieJar;
using (var requestStream = request.GetRequestStream())
{
string content = "Email=" + Username + "&Passwd=" + Password;
requestStream.Write(Encoding.UTF8.GetBytes(content), 0, Encoding.UTF8.GetBytes(content).Length);
using (var sr = new StreamReader(request.GetResponse().GetResponseStream()))
{
string html = sr.ReadToEnd();
string galxValue = ParseOutValue(html, "GALX");
return GetLoginHtml2(galxValue, cookieJar);
}
}
}
逐步执行Visual Studio调试器上的代码,我知道当它遇到以下行时,它就会挂起:
using (var sr = new StreamReader(request.GetResponse().GetResponseStream()))
具体来说,
request.GetResponse()
部分就是要挂的东西。运行Fiddler,我所看到的只是一个灰色条目,看起来像这样: 3 200 HTTP Tunnel to accounts.google.com:443 0
没有别的了。没有反应的 body 。有人对可能发生的事情有任何建议吗?它仅在一台计算机上发生的事实告诉我,它可能不是编程问题。
最佳答案
我终于弄明白了这个问题。我正在发布此答案,希望将来对某些人的头部擦伤有帮助。
现在是我的工作代码:
private static string GetLoginHtml()
{
var request = (HttpWebRequest)WebRequest.Create(LoginUrl);
var cookieJar = new CookieContainer();
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.CookieContainer = cookieJar;
using (var requestStream = request.GetRequestStream())
{
string content = "Email=" + Username + "&Passwd=" + Password;
requestStream.Write(Encoding.UTF8.GetBytes(content), 0, Encoding.UTF8.GetBytes(content).Length);
}
using (var sr = new StreamReader(request.GetResponse().GetResponseStream()))
{
string html = sr.ReadToEnd();
string galxValue = ParseOutValue(html, "GALX");
return GetLoginHtml2(galxValue, cookieJar);
}
}
我的猜测是在获取响应流之前,没有对我的requestStream进行垃圾收集和关闭。我认为响应流在请求流完成其字节写入之前就处于打开和读取状态。愚蠢的.NET垃圾收集器
关于c# - HttpWebRequest刚卡在一台计算机上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27361962/