Verwenden von .NET, um eine Datei an Server HttpWebRequest oder WebClient zu senden

8

Okay, hier ist der Deal. Wie die Frage besagt, versuche ich eine Datei an einen Webserver zu senden und habe ein paar Probleme.

Ich habe versucht, dieselbe Datei mit Curl.exe auf demselben Webserver zu posten und hatte keine Probleme. Ich habe die Flags gepostet, die ich mit curl verwendet habe, nur weil sie mögliche Gründe für Probleme mit den .NET-Klassen aufzeigen könnten.

%Vor%

Ich versuche, eine .NET-Klasse wie WebClient oder HttpWebRequest zu verwenden, um dasselbe zu tun. Hier ist ein Beispiel für den Code, den ich ausprobiert habe. Mit dem WebClient bekomme ich einen 505 HTTP Version Not Supported Fehler und mit der HttpWebRequest bekomme ich einen 501 Not Implemented.

Wenn Sie es mit einem WebClient versuchen:

%Vor%

Und bei der Verwendung eines HttpRequest:

%Vor%     
Myishmael 02.03.2010, 04:05
quelle

2 Antworten

10

Verwenden Sie zunächst so etwas wie fiddler und untersuchen Sie die Anfragen und Antworten, um zu sehen, was sich zwischen curl und System.Net.WebClient unterscheidet.

Sie können es auch versuchen (obwohl die Überprüfung mit dem Debugging-Proxy es Ihnen ermöglichen sollte, den Unterschied genau zu bestimmen):

Verwenden Sie den Berechtigungscache, um Ihre Anmeldeinformationen für die Standardauthentifizierung festzulegen:

%Vor%

Legen Sie einen User-Agent-Header fest:

%Vor%

Ändern Sie die Protokollversion in der WebRequest:

%Vor%     
dugas 02.03.2010, 04:31
quelle
1

Es könnte noch zwei weitere Gründe geben, wenn ein 501-Akkord vorliegt.

---------- 1 ---------

wenn das Postdate einen chinesischen Buchstaben oder ein anderes Zeichen enthält. z.B.

%Vor%

Um die richtige Nachricht zu posten, können Sie auch folgende 2 Zeilen hinzufügen:

%Vor%

das führt auch zu einem 501.

Bei dieser Gelegenheit können Sie die 2 Zeile löschen und postDate wie folgt ändern.

%Vor%

vielleicht ist dies eine Lösung, um das postDate zu modifizieren, aber ich habe es noch nicht getestet.

%Vor%

---------- 2 ---------

wenn Response.StatusCode == HttpStatusCode.Redirect Redirect ist gleich 302. folgende Zeile ist ein Muss:

%Vor%     
McKelvin 23.04.2011 02:21
quelle