我正在尝试制作一个HttpWebRequest,它为我注册帐号。 我正在使用循环来注册新帐户,只更改了一件事,即用户名。 但由于某种原因它只能工作两次,第三次它会到达某一行调用函数“webRequest.GetRequestStream();”它永远不会完成,它不会抛出错误或任何东西。 这是我的第一个HttpWebRequest,它非常混乱。 对于想知道的人来说,value是一个带有注册“值”的字符串。前两次确实注册了账户,所以它确实有效。
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();
}
可能出现什么问题?
答案 0 :(得分:2)
查看您发送的Referer
和UserAgent
我从道德观角度对您在此处所做的事情表示怀疑。也就是说,您可以尝试使用WebClient清除代码:
using (var client = new WebClient())
{
client.Headers[HttpRequestHeader.UserAgent] = "Hacker";
client.Headers[HttpRequestHeader.Accept] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
client.Headers[HttpRequestHeader.Referer] = "http://yougothacked.com";
client.UploadValues("http://87.255.55.218/register", new NameValueCollection
{
{ "username", "foo" },
{ "someOtherParam", "value" }
});
}
如果这不起作用那么,也许,服务器会限制来自同一IP的多个注册请求。当然,您可以随时联系提供商,并询问他是否可能出现这种情况。
答案 1 :(得分:2)
我强烈怀疑问题出现在您未显示的某些代码中 - 即当您使用请求时,您没有正确处理响应。 (就像你应该使用using
块中的请求流来放置代码。)
如果您没有处理响应,那么该响应将保持与服务器的连接,直到终结器释放它为止。与各个服务器的连接汇集在一起。
简而言之:确保将响应放在using
块中,如下所示:
using (WebResponse response = req.GetResponse())
{
...
}
我怀疑你会发现它有多少请求。
另一方面,使用Darin建议的WebClient
可能会让您的生活变得更简单。