Ich versuche, eine Datei mit wget
und herunterzuladen curl
und sie wird mit einem 403-Fehler abgelehnt (verboten).
Ich kann die Datei mit dem Webbrowser auf demselben Computer anzeigen.
Ich versuche es erneut mit dem User Agent meines Browsers, der von http://www.whatsmyuseragent.com bezogen wird . Ich mache das:
wget -U 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...
und
curl -A 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...
aber es ist immer noch verboten. Welche anderen Gründe könnte es für den 403 geben, und wie kann ich die Befehle wget
und ändern curl
, um sie zu überwinden?
(Hier geht es nicht darum, die Datei abrufen zu können. Ich weiß, dass ich sie einfach in meinem Browser speichern kann. Es geht darum, zu verstehen, warum die Befehlszeilentools anders funktionieren.)
aktualisieren
Vielen Dank an alle hervorragenden Antworten auf diese Frage. Das spezifische Problem, auf das ich gestoßen war, war, dass der Server den Referrer überprüfte. Indem ich dies zur Kommandozeile hinzufüge, könnte ich die Datei mit curl
und erhalten wget
.
Der Server, der den Referrer überprüft hat, ist über einen 302 an einen anderen Standort gestoßen, an dem überhaupt keine Überprüfungen durchgeführt wurden, sodass ein curl
oder wget
dieser Standort ordnungsgemäß funktioniert hat.
Wenn jemand interessiert ist, ist dies darauf zurückzuführen, dass ich diese Seite gelesen habe, um etwas über eingebettetes CSS zu erfahren, und versucht habe, das CSS der Site als Beispiel zu betrachten. Die eigentliche URL, mit der ich Probleme hatte, war diese und die curl
, mit der ich gelandet bin, ist
curl -L -H 'Referer: http://css-tricks.com/forums/topic/font-face-in-base64-is-cross-browser-compatible/' http://cloud.typography.com/610186/691184/css/fonts.css
und der wget ist
wget --referer='http://css-tricks.com/forums/topic/font-face-in-base64-is-cross-browser-compatible/' http://cloud.typography.com/610186/691184/css/fonts.css
Sehr interessant.
Antworten:
Eine HTTP-Anfrage kann mehrere Header enthalten, die nicht durch curl oder wget festgelegt wurden. Zum Beispiel:
key=val
, können Sie es mit der Option-b key=val
(oder--cookie key=val
) für festlegencurl
.curl
Option hierfür ist-e URL
und--referer URL
.curl
mit der Option-u user:password
(oder--user user:password
) eingestellt werden.Mozilla
oder beginnenWget
oder oder enthaltencurl
) verwendet werden.Normalerweise können Sie die Entwicklertools Ihres Browsers verwenden (Firefox und Chrome unterstützen dies), um die von Ihrem Browser gesendeten Header zu lesen. Wenn die Verbindung nicht verschlüsselt ist (dh kein HTTPS verwendet), können Sie zu diesem Zweck auch einen Paketsniffer wie Wireshark verwenden.
Neben diesen Kopfzeilen können Websites auch Aktionen hinter den Kulissen auslösen, die den Status ändern. Wenn Sie beispielsweise eine Seite öffnen, wird möglicherweise eine Anforderung im Hintergrund ausgeführt, um den Download-Link vorzubereiten. Oder eine Weiterleitung findet auf der Seite statt. Bei diesen Aktionen wird in der Regel Javascript verwendet, es kann jedoch auch einen verborgenen Rahmen geben, um diese Aktionen zu vereinfachen.
Wenn Sie nach einer Methode suchen , um auf einfache Weise Dateien von einer Download - Site zu holen, hat einen Blick auf plowdown, mit inbegriffen plowshare .
quelle
wget
versuchen Sie--auth-no-challenge
. Funktioniert wie Magie.Fügen Sie zu den obigen Antworten hinzu, dass Sie die Funktion "Als cURL kopieren" in den Chrome-Entwicklertools (seit v26.0) und in Firebug (seit v1.12 ) verwenden können. Sie können auf diese Funktion zugreifen, indem Sie auf der Registerkarte Netzwerk mit der rechten Maustaste auf die Anforderungszeile klicken.
quelle
Enable persistent logs
die Registerkarte "Einstellungen" der Firefox- Entwicklungstools ankreuzen , um zu verhindern, dass Netzwerkprotokolle bei einer Umleitung gelöscht werden . Chrome hat eine ähnliche Option. "Copy as cURL" ist übrigens schon eine Weile in Firefox Nightly / Aurora / Beta und wird voraussichtlich in der nächsten Hauptversion (31.0) veröffentlicht.Versuchte das alles aber kein Glück; Ich habe das Dev-Browser-Tool verwendet, um die User-Agent-Zeichenfolge abzurufen, nachdem ich Folgendes hinzugefügt habe:
quelle
Je nachdem, wonach Sie fragen, kann es sich um ein Cookie handeln. Mit Firefox können Sie mit der rechten Maustaste auf die betreffende Seite "Seiteninformationen anzeigen" klicken. Wählen Sie das Symbol "Sicherheit" und klicken Sie auf die Schaltfläche "Cookies anzeigen".
Zum Verwirren von Cookies ist das Firefox-Plug-In "Live HTTP Headers" erforderlich. Sie können sehen, welche Cookies gesetzt und welche Cookies an den Webserver zurückgesendet werden.
wget
kann mit Cookies arbeiten, ist aber total ärgerlich, da es keinen Hinweis darauf gibt, dass keine Cookies gesendet wurden. Am besten entfernen Sie alle zugehörigen Cookies aus Ihrem Browser und durchlaufen die anfängliche Anmeldung oder die Reihenfolge der Seitenanzeige. Unter "Live-HTTP-Header" finden Sie Informationen zu Cookies und zu POST- oder GET-Parametern.wget
Führen Sie den ersten Anmeldeschritt mit den Optionen "--keep-session-cookies" und "--save-cookies" aus. Dadurch erhalten Sie eine Cookie-Datei, die Sie mit einem Texteditor anzeigen können. Verwenden Siewget --load-cookies
mit der Cookie - Datei für die nächsten Schritte.quelle
Ein weiterer Grund dafür kann sein, dass für die Site SSL erforderlich ist. Ihr Browser leitet automatisch von HTTP zu HTTPS weiter, Curl und Wget jedoch nicht. Versuchen Sie also die Anfrage mit HTTPS anstelle von HTTP.
quelle