2010-09-26 2 views
1

Я пытаюсь сделать HttpWebRequest, который регистрирует учетные записи для меня. Я использую цикл для его регистрации новых учетных записей только с одним изменением вещи, именем пользователя. Но по какой-то причине он работает только дважды, в третий раз он достигнет определенной строки, вызывающей функцию «webRequest.GetRequestStream()»; и это никогда не закончится, это не вызовет ошибки или чего-то еще. Это мой первый HttpWebRequest, и это очень грязно. Для людей, интересующихся, значение представляет собой строку с регистрационными значениями. Первые 2 раза действительно регистрируют учетные записи, поэтому они действительно работают.WebRequest не может получить поток запросов

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(); 
    } 

Что может быть неправильным?

+1

В качестве побочного примечания, если вы помещаете свой webRequest в оператор using, вы получаете преимущества вызова Dispose с попыткой окончательно «встроить», «используя (WebRequest webRequest = Get()) {/ * code * /} ' – Patrick

+1

webRequest не является одноразовым. – Basser

+0

Извините, я имел в виду reqStream. – Patrick

ответ

2

Я сильно подозревают, что проблема в какой-то код, который вы не показали, а именно - что, когда вы использовать запрос, вы не избавляясь от ответа правильно. (Точно так же, как вы должны поместить код с использованием потока запросов в блок using.)

Если вы не избавляетесь от ответа, этот ответ будет удерживаться на подключении к серверу до тех пор, пока окончательный вариант не выпустит его. Соединения с отдельными серверами объединяются.

Вкратце: убедитесь, что вы положили в ответ на using блок, как это:

using (WebResponse response = req.GetResponse()) 
{ 
    ... 
} 

, и я подозреваю, что вы найдете, что это работает однако много запросов вы делаете.

С другой стороны, с использованием WebClient, предложенного Дарином, вполне может сделать вашу жизнь проще.

+0

Спасибо, это исправило мою проблему. – Basser

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. Конечно, вы всегда можете связаться с провайдером и спросить его, может ли это быть так.

+0

Не волнуйся, я не сделаю ничего незаконного. Я понятия не имел, что заполнить. Я не уверен, как использовать это, я полный новичок на этом этапе. – Basser

+0

Ну просто напишите функцию, содержащую мой код, и передайте имя пользователя в качестве параметра. Затем попробуйте вызвать функцию с разными именами пользователей и посмотреть, что дает. –

+0

Должен ли я установить метод «POST», если да, как? – Basser