Я вызываю URL-адрес в C#, используя класс WebClient
. Ниже приведен код: -WebException (Статус: ошибка протокола)
public string SendWebRequest(string requestUrl)
{
using (var client = new WebClient())
{
string responseText = client.DownloadString(requestUrl);
return responseText;
}
}
Этот код выдает следующие сведения об исключении: -
System.Net.WebException: The remote server returned an error: (1201).
at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
at System.Net.WebClient.DownloadString(Uri address)
at System.Net.WebClient.DownloadString(String address)
Exception Status: ProtocolError
URL ударил сервер правильно. Ожидаемые действия (обновление базы данных) на сервере происходят должным образом. Сервер отправляет ответ правильно. WebClient
не обрабатывает ответ.
Я также пробовал использовать класс HttpWebRequest
без успеха.
Первоначально аналогичная проблема была там во время запроса. Она была решена, когда я изменил мою app.config
со следующим: -
<settings>
<httpWebRequest useUnsafeHeaderParsing = "true"/>
</settings>
Я не могу отправить URL на этом форуме и в любом случае он не доступен за пределами сети.
Если я копирую один и тот же URL-адрес в адресной строке браузера, он просто отлично работает и возвращает ожидаемый ответ.
В чем может быть проблема с приложением Windows?
Edit 1
Я реализовал предложения от ответа. Я также внедрил предложение в принятом ответе на вопрос this. Теперь моя функция выглядит следующим образом: -
public string SendWebRequest(string requestUrl)
{
using (var client = new WebClient())
{
client.Headers.Add("Accept", "text/plain");
client.Headers.Add("Accept-Language", "en-US");
client.Headers.Add("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)");
client.Headers["Content-Type"] = "text/plain;charset=UTF-8";
string responseText = client.DownloadString(requestUrl);
return responseText;
}
}
Он по-прежнему не решает проблему. Ответ теперь пустой ("") вместо "Успех". Это не ошибка сервера, который подтвержден.
Если я удаляю конфигурацию в app.config
, это вызывает другое исключение.
System.Net.WebException: The server committed a protocol violation. Section=ResponseStatusLine
at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
at System.Net.WebClient.DownloadString(Uri address)
at System.Net.WebClient.DownloadString(String address)
Вам нужно отправить заголовки запроса, соответствующий ему ('Accept' например), и любой другой заголовок, который может понадобиться серверу (например, «Пользователь-агент»), –
проблема не на сервере.проблема возникает на стороне клиента, когда он получает ответ, он не может разобрать его IMO. –
Возможная дубликация [Ошибка запроса 400 - ошибка протокола на действительном URL-адресе Webclient] (http://stackoverflow.com/questions/22623664/bad-request-400-protocol-error-on-a-valid-url-webclient) – TheDude