当我尝试在.NET 3.5上运行它时,以下代码会挂起(当我将项目设置为.NET 4时,它会起作用)
(我等了2分钟 - 似乎冻结了)
HttpWebRequest l_oRequest;
HttpWebResponse l_oResponse;
if (m_bLoggedIn)
return true;
m_oSession = new SSessionIdentifier();
m_oSession.Cookies = new CookieContainer();
string l_sHost = "https://website.com";
// Start the login sequence
l_oRequest = GetNewRequest(l_sHost, "Login.aspx", m_oSession.Cookies);
l_oRequest.Timeout = 5000;
l_oRequest.ReadWriteTimeout = 5000;
l_oRequest.Method = "POST";
l_oRequest.Referer = "https://website.com";
// Set form parameters
string l_sFormParameters = "user=" + m_sUsername;
// Convert them to the HTTP stream
byte[] l_oRequestBuffer = UTF8Encoding.ASCII.GetBytes(l_sFormParameters);
var l_oRequestStream = l_oRequest.GetRequestStream();
l_oRequestStream.Write(l_oRequestBuffer, 0, l_oRequestBuffer.Length);
// I'm setting this to false because otherwise i can't get the cookies i want. And I love them cookies!
l_oRequest.AllowAutoRedirect = false;
// Now start the redirection sequence until we get to what we want
int l_iDTPos = -1;
// This line hangs
l_oResponse = (HttpWebResponse)l_oRequest.GetResponse();
while (l_oResponse.StatusCode == HttpStatusCode.Found)
{
// Yada Yada
这是GetNewRequest函数:
private HttpWebRequest GetNewRequest(string host, string targetUrl, CookieContainer a_oCookieJar)
{
HttpWebRequest l_oRequest = (HttpWebRequest)HttpWebRequest.Create(host + targetUrl);
l_oRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2";
l_oRequest.ContentType = "application/x-www-form-urlencoded";
l_oRequest.AllowAutoRedirect = false;
l_oRequest.CookieContainer = a_oCookieJar;
return l_oRequest;
}
我在文档中找不到3.5和4之间的任何更改。有没有人遇到过这样的问题?
答案 0 :(得分:4)
我遇到了同样的问题,我使用HttpWebRequest调用RESTful服务,我的代码在.Net 4+中运行良好,并挂在.Net 3.5,3.0的GetResponse()行中。 2.0。我最终尝试了本文中的示例代码:
http://msdn.microsoft.com/en-us/library/debx8sh9.aspx
让它在所有版本的.Net中运行。我猜我没有设置正确的东西或关闭资源,但是对于其他任何人来说这样做都会试试这篇文章。
答案 1 :(得分:0)
尝试使用以下链接中给出的代码,它使用Stream类来获取httpwebrequest的数据:
http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.getresponsestream.aspx