getResponse в c # не работает. Нет ответа - PullRequest
3 голосов
/ 23 мая 2011

У меня есть этот код в C #:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/x-www-form-urlencoded";
request.Timeout = 30000; 
request.Method = "POST"; 
request.KeepAlive = true;
request.AllowAutoRedirect = false;

Stream newStream = request.GetRequestStream();
newStream.Write(bPostData, 0, bPostData.Length);

byte[] buf = new byte[1025]; int read = 0; string sResp = "";
HttpWebResponse wResp = (HttpWebResponse)request.GetResponse();
Stream resp = wResp.GetResponseStream();

Строка HttpWebResponse wResp =... просто зависает (как нет ответа от URL).Я не уверен, где именно его сбой (потому что я даже не получаю ошибку исключения).Я проверил URL в IE, и он отлично работает.Я также проверил bPostData, и в нем есть данные.Куда это идет не так?

Ответы [ 5 ]

3 голосов
/ 24 мая 2011

Попробуйте закрыть поток запросов в переменной newStream.Возможно, API ждет, когда это будет сделано.

1 голос
/ 09 июля 2012

Вы должны увеличить лимит:

ServicePointManager.DefaultConnectionLimit = 10; // Max number of requests
0 голосов
/ 06 июня 2012

Использовать длину содержимого = 0

Пример:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
        request.Method = "POST";
        request.ContentLength = 0;
        var requestStream = request.GetRequestStream();
        HttpWebResponse res = (HttpWebResponse)request.GetResponse();
        res.Close();
0 голосов
/ 24 мая 2011

Когда я прокомментировал ранее, я запустил твой код в своем офисе (сильно огненный) и получил тот же результат, что и ты.Пришел домой, попробовал еще раз (меньше огнем), он работал нормально ... Я думаю, у вас есть барьер там.Я полагаю, что вы столкнулись с проблемой брандмауэра.

0 голосов
/ 24 мая 2011

Попробуйте упростить ваш код и подделать пользовательский агент. Может быть, сайт блокирует / регулирует скребки / ботов. Также убедитесь, что ваши значения application/x-www-form-urlencoded HTTP POST правильно закодированы. Для этого я бы порекомендовал вам WebClient :

using (var client = new WebClient())
{
    client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0";
    var values = new NameValueCollection
    {
        { "param1", "value1" },
        { "param2", "value2" },
    };
    byte[] result = client.UploadValues(url, values);
}
...