WebRequest "KOPF" geringes Gewicht alternative
Vor kurzem habe ich entdeckt, dass der folgende Code funktioniert nicht mit bestimmten Standorten, wie IMDB.com.
class Program
{
static void Main(string[] args)
{
try
{
System.Net.WebRequest wc = System.Net.WebRequest.Create("http://www.imdb.com"); //args[0]);
((HttpWebRequest)wc).UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.2.153.1 Safari/525.19";
wc.Timeout = 1000;
wc.Method = "HEAD";
WebResponse res = wc.GetResponse();
var streamReader = new System.IO.StreamReader(res.GetResponseStream());
Console.WriteLine(streamReader.ReadToEnd());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
Gibt es einen HTTP 405 ( Methode Nicht Erlaubt ). Mein problem ist, ich benutze code sehr ähnlich wie die oben genannten zu überprüfen, ob ein link gültig ist und die überwiegende Mehrheit der mal funktioniert es einwandfrei. Ich kann es ausschalten-Methode gleich BEKOMMEN und es funktioniert ( mit einem Anstieg timeout ), aber das verlangsamt die Dinge um ein Vielfaches. Ich gehe davon aus, dass die 405-Antwort ist eine server-Konfiguration auf der IMDB-die server-Seite.
Gibt es eine Möglichkeit für mich, das gleiche zu tun, wie oben, in eine leichte Art und Weise .NET? Oder gibt es einen Weg, das zu beheben obigen code so funktioniert es als GET-request, der mit imdb?
- Ich hatte zum erhöhen der timeout, aber der code, den Sie oben gepostet bei mir funktioniert. Ändern Sie es zu POSTEN würde keinen Sinn machen, weil Sie nicht haben, keine Daten zu veröffentlichen. Und Ihr Titel spricht Sie über den KOPF, aber Sie sind nicht machen einen HEAD-request. Bitte klären, was die Frage ist, seit Ihrem "kaputten" code funktioniert einwandfrei.
- Ug, wirklich blöde Tippfehler im Titel. Ist jetzt behoben... klassische Beispiel der glaube, eine Sache, und geben Sie einen anderen. Wenn Sie den oben stehenden code ausführen, Sie sind nicht immer ein 405-Antwort? EDIT: Ok, klar, auch mein code war fehlerhaft. Das oben genannte ist, was ich meinte zu posten, und so bearbeitet wird, geben Sie den 405 Fehler ( und die machen Sinn..... )
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie klären, was Sie bedeuten, von "Leichtgewicht". Was versuchen Sie zu erreichen?
Ob oder nicht Sie können mithilfe von GET/POST/HEAD/LÖSCHEN/etc hängt von der URL und was ist so konfiguriert, in der Anwendung, die auf dem server ausgeführt wird auf dieser URL.
Wenn alles, was Sie versuchen zu tun ist, sehen, wenn Sie eine Verbindung herstellen können, ohne tatsächlich das herunterladen der Inhalte, die Sie könnte vielleicht versuchen nur Initiierung einer Verbindung zu port 80 über sockets, aber es ist nicht wirklich zuverlässig, oder auf allgemein unterstützte Weise nur durch ändern der HTTP-Methode.
Öffnen Sie selbst die Verbindung mit einer Steckdose (anstelle eines HttpRequest oder WebClient), und den stream schließen, sobald Sie Sie gelesen haben, den status-code. Glücklicherweise ist der status-code kommt in der Nähe der Spitze des response-stream 🙂
Wenn KOPF zurück 405, das bedeutet, dass der server keine Unterstützung für den KOPF (zumindest für die URL) und Sie werden fallen, Sie zurück zu ERHALTEN, statt. Die Mehrheit der Websites, die Sie unterstützen sollten, den KOPF, so dass Sie wahrscheinlich wollen, um den KOPF standardmäßig, aber wenn er wirft einen 405, könnten Sie vielleicht wieder fallen zu BEKOMMEN, die für die Domäne. Oder vielleicht möchten Sie versuchen, mit dem KOPF voran, für jede Anforderung; YMMV.
Wenn der server erfordert, ERHALTEN, und Sie wollen, um den Netzwerkverkehr zu reduzieren, könnten Sie versuchen, eine bedingte zu BEKOMMEN und/oder eine teilweise ERHALTEN (siehe z.B. RFC2616). Ich habe nie versucht, diese mit WebRequest, aber ich denke, es ermöglicht Ihnen das hinzufügen von benutzerdefinierten ausgehende HTTP-Headern, so dass Sie sollten in der Lage sein, es zu tun.
Auch, vergessen Sie nicht, dass, wenn Sie schreiben eine Spinne (was Sie eindeutig sind), Sie sollten das respektieren des Servers robots.txt und es ist auch höflich zu drosseln Ihre Anfragen so etwas wie eine bitte alle zwei Sekunden, so dass Sie nicht slashdot server.