我正在尝试制作一个为我注册帐户的 HttpWebRequest。 我正在使用一个循环来注册新帐户,只有一件事发生变化,即用户名。 但由于某种原因它只工作两次,第三次它会到达调用函数“webRequest.GetRequestStream();”的特定行。它永远不会完成,它不会抛出错误或任何东西。 这是我的第一个 HttpWebRequest,它很乱。 对于想知道的人,值是一个字符串,其中包含注册“值”。前 2 次确实注册了帐户,所以它确实有效。
public static HttpWebRequest Get()
{
HttpWebRequest webRequest = WebRequest.Create("http://87.255.55.218/register") as HttpWebRequest;
webRequest.Method = "POST";
webRequest.Host = "87.255.55.218";
webRequest.UserAgent = "Hacker";
webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
webRequest.Referer = "http://yougothacked.com";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Headers.Add(HttpRequestHeader.KeepAlive, "115");
return webRequest;
}
public static void Register(string username)
{
string value = Value.Replace("replace", username);
WebRequest webRequest = Get();
webRequest.ContentLength = value.Length;
Thread.Sleep(50);
Stream reqStream = webRequest.GetRequestStream();
reqStream.Write(Encoding.ASCII.GetBytes(value), 0, value.Length);
Thread.Sleep(50);
reqStream.Flush();
reqStream.Close();
reqStream.Dispose();
}
有什么问题吗?
请您参考如下方法:
我强烈怀疑问题出在您未显示的某些代码中 - 也就是说,当您使用请求时,您没有正确处理响应. (就像您应该将使用请求流的代码放在 using block 中一样。)
如果您不处理响应,该响应将保持与服务器的连接,直到终结器释放它。与各个服务器的连接被合并。
简而言之:确保将响应放在 using block 中,如下所示:
using (WebResponse response = req.GetResponse())
{
...
}
而且我怀疑您会发现无论您提出多少请求,它都能正常工作。
另一方面,按照 Darin 的建议使用 WebClient 可能会让您的生活更简单。
