-
12.08.2021, 10:13 #1
Hallo,
meine HTTP-Anfragen liefern immer 403 Forbidden Fehler. Ob ich curl oder wget benutze, macht keinen Unterschied. Woran liegt das, wie kann ich es lösen?
-
12.08.2021, 13:28 #2
- Registriert seit
- 15.11.2011
- Beiträge
- 6.142
- Blog Entries
- 5
Thanked 9.130 Times in 3.005 PostsFunktioniert der Zugriff auf die jeweilige Seite im Browser, fehlt wahrscheinlich etwas in deiner Anfrage, die du mit wget/curl sendest. In den meisten Fällen eines oder mehrere der folgenden Dinge. Zur Ermittlung mancher Werte kann es hilfreich sein, die Anfrage einmal im Browser durchzuführen und mit den Entwicklertools (F12) die Header anzuschauen, welche der Browser sendet.
User-Agent
Enthält Informationen über deinen Browser und das Betriebssystem, auf dem er läuft. Dieser Header ist zwar optional. Aber manche Seiten prüfen ihn und erlauben/verbieten bestimmte User-Agenten. Standardmäßig sendet curl hier "curl/7.64.0" mit entsprechender Version, sodass die Seiten leicht prüfen können ob z.B. curl darin vor kommt und die Anfragen dann ablehnen.
Um das zu lösen, sendet man einen echten User-Agenten eines Browsers: Zum Beispiel whatmyuseragent.com aufrufen, der User-Agent kopieren und in curl wie folgt setzen
Code:curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:90.0) Gecko/20100101 Firefox/90.0" "https://u-labs.de"
Dieser Header enthält die Herkunftsseite, beispielsweise bei Klicks auf einen Link. Wie der User-Agent ist auch dieser Header optional. Manche Seiten prüfen ihn aber und erlauben nur bestimmte Seiten. Am einfachsten schaut man in der Browserkonsole, was als Referer Header gesetzt ist und übergibt dies an curl:
Code:curl --referer "https://u-labs.de/forum" "https://u-labs.de"
Sind bestimmte Inhalte nur für angemeldete Benutzer verfügbar, gibt es zwei Möglichkeiten:
1. Basic-Authentifizierung
Sofern es die Seite unterstützt, können wir einfach --user benutzername:passwort übergeben.
2. Login-Anfrage senden
Alternativ müssen wir die (i.d.R. POST) Abfrage zum Logik absenden, die Cookies speichern und für unsere Anfrage wiederverwenden (siehe unten).
Cookies/Sitzungen
Teils werden auch bestimmte Cookies benötigt. Dies können statische Cookies sein, aber auch Sitzungen. Letztere meist eingeloggt, teils auch auch ohne. Einzelne Cookies können mit --cookie a=b übergeben werden. Falls wir einen Login brauchen, ermitteln wir im Browser welche Formularfelder gesendet werden müssen und speichern die Cookies:
Code:curl -c cookie.txt curl -X POST -F 'user=test' -F 'password=123' https://example.com/login
Code:curl -b cookie.txt https://example.com
Weitere Tipps
Das sind die gängigsten Probleme, die bei curl Anfragen auftreten und einen 403 Fehler erzeugen können. Sollte die Anfrage dennoch nicht funktionieren, empfehle ich einen Vergleich der Header von curl mit denen des Browsers. Dazu folgende Parameter nutzen:
Code:curl -s -D - -o /dev/null https://u-labs.de
Falls weitere Header gesetzt werden müssen, kann man dies mit -H name:Wert an curl weitergeben.
-
The Following 2 Users Say Thank You to DMW007 For This Useful Post:
-
13.08.2021, 13:34 #3
Bei der Seite die ich aufrufen wollte, wurde anscheinend curl als Useragent blockiert. Alles andere hat funktioniert, selbst wenn ich dort nur Chrome oder Firefox rein schreibe (also nur das Wort, ohne den richtigen String von den Browsern). Danke für die ausführliche Antwort :)
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.