To main content

Wget zeigt „HTTP Error 403 – Forbidden“

Veröffentlicht von Benjamin Marwell am

Die Tage wollte ich ein Skript schreiben, welches eine komplette Seite spidert, um sie auf Deadlinks zu überprüfen. Wget schien das geeignete Tool zu sein. Aber es schmeißt einem unter Umständen HTTP-"403"-Fehler entgegen.

Ursachensuche

So Recht wollte mir kein logischer Zusammenhang einfallen. Der Befehl war ganz einfach gehalten:
$ wget --spider -m -nv -A "*.html,*.htm,*.php,*.txt" "http://example.invalid/"
Da ging es nie weiter. Gut, dann muss man sich mal angucken, warum. Wget bietet dafür eine Option, die Serverantwort im Detail anzuzeigen:
$ wget --server-response -m  "http://example.invalid/"
--2010-11-19 22:32:33--  http://example.invalid/
Auflösen des Hostnamen »example.invalid«.... 0.0.0.0
Verbindungsaufbau zu example.invalid|0.0.0.0|:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort...
HTTP/1.1 403 Forbidden
Server: nginx
Date: Fri, 19 Nov 2010 21:32:33 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive
2010-11-19 22:32:33 FEHLER 403: Forbidden.
Forbidden? Aber mit Firefox klappt es doch? Hmm? Aber vielleicht ist ja genau das das Problem.

Versteckspiel

Wget kennt noch ein paar schöne Parameter, etwa den "User Agent", also die Identifizierung ändern. Das sieht dann so aus:
$ wget -U firefox --server-response "http://example.invalid/"
--2010-11-19 22:36:43-- http://example.invalid/
Auflösen des Hostnamen »example.invalid«.... 0.0.0.0
Verbindungsaufbau zu example.invalid|0.0.0.0|:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort...
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 19 Nov 2010 21:36:43 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
Vary: Accept-Encoding
Last-Modified: Fri, 19 Nov 2010 21:39:43 GMT
Vary: Cookie,Accept-Encoding
Expires: Fri, 19 Nov 2010 22:39:43 GMT
Pragma: public
Cache-Control: public, must-revalidate, proxy-revalidate
Etag: 2ae491fdf055349b5a6b8ef437919b01
X-Pingback: http://example.invalid/xmlrpc.php
Cache-Control: private
Länge: nicht spezifiziert [text/html]
In »»index.html«« speichern.

[ <=> ] 51.638 --.-K/s in 0,1s

2010-11-19 22:36:43 (502 KB/s) - »»index.html«« gespeichert [51638]

Aha, geht doch! Es liegt also am Server. Dieser blockt - warum auch immer - einige User Agents. Was für eine lästige Webserver-Konfiguration...

Englische Quelle: http://sparc86.wordpress.com/2009/04/08/wget-shows-http-error-403-forbidden/