Ich rufe eine URL in C# mit WebClient
Klasse. Es folgt der Code: -WebException (Status: Protokollfehler)
public string SendWebRequest(string requestUrl)
{
using (var client = new WebClient())
{
string responseText = client.DownloadString(requestUrl);
return responseText;
}
}
Dieser Code schlägt mit folgenden Ausnahmedetails: -
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 traf den Server ordnungsgemäß. Die erwarteten Aktionen (Datenbank aktualisieren) auf dem Server werden ordnungsgemäß ausgeführt. Der Server sendet die Antwort ordnungsgemäß. WebClient
verarbeitet die Antwort nicht.
Ich habe auch versucht, HttpWebRequest
Klasse ohne Erfolg.
Anfangs war ein ähnliches Problem während der Anfrage. Es wurde gelöst, als ich meine app.config
modifizierte mit folgenden Optionen: -
<settings>
<httpWebRequest useUnsafeHeaderParsing = "true"/>
</settings>
Ich kann nicht URL in diesem Forum posten und trotzdem ist es nicht zugänglich außerhalb Netzwerk.
Wenn ich dieselbe URL in die Adressleiste des Browsers kopiere, funktioniert es einfach und gibt die erwartete Antwort zurück.
Was könnte das Problem mit Windows-Anwendung dann sein?
bearbeiten 1
ich Vorschläge Antwort umgesetzt. Ich habe auch Vorschlag in der angenommenen Antwort für this Frage implementiert. Nun sieht meine Funktion wie folgt aus: -
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;
}
}
Es löst immer noch nicht das Problem. Antwort ist jetzt leere Zeichenfolge ("") anstelle von "Erfolg". Dies ist kein Fehler vom Server, der bestätigt wird.
Wenn ich Konfiguration in app.config
entferne, löst es andere Ausnahme aus.
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)
Sie müssen die sachgemäßer Request-Header senden ('Accept' zum Beispiel) und jeder andere Header, den der Server möglicherweise benötigt (wie zum Beispiel "User-Agent") –
Problem ist nicht auf dem Server.Problem ist auf der Client-Seite, wenn es Antwort erhält, es ist nicht in der Lage, es IMO zu analysieren. –
Mögliches Duplikat von [Bad Request 400 - Protokollfehler auf einer gültigen URL - Webclient] (http://stackoverflow.com/questions/22623664/bad-request-400-protocol-error-on-a-valid-url-webclient) – TheDude