Firefox header senden mit python requests?

...komplette Frage anzeigen

1 Antwort

url = 'https://www.gutefrage.net/frage/firefox-header-senden-mit-python-requests'

opener = urllib.request.build_opener()
opener.addheaders = [
('User-agent', 'Mozilla/5.0 (Windows x86_64; rv:87.0) Gecko/20200202 Firefox/55.0'),
('Referer', 'http://www.projecthoneypot.org/'),
('Accept', 'text/html;q=0.9,*/*;q=0.8'),
('Accept-Encoding', 'identity'),
('Connection', 'keep-alive'),
('Accept-Language', 'de,en;q=0.6'),
]

parts = []

with opener.open(url, timeout=60) as fp:
for part in fp:
parts.append(part)

response = b''.join(parts).decode('utf-8')

print(response) # Profit!!!

Der Code bezieht sich auf Python 3.x und zu Python 2.x gibt es einige kleinere Unterschiede.

Alles in allem würde ich das ganze natürlich in eine Funktion mit ordentlicher Fehlerprüfung (try, except) packen. Darüber hinaus kannst du darüber keine HTTPS Seiten abgreifen, denn dafür sind noch ein paar mehr Zeilen nötig.

Außerdem gehe ich am Ende von einer UTF-8 Kodierung aus, aber normalerweise solltest du in den ersten paar Kilobyte einer Website ein "<meta charset ..." oder "<meta http-equiv="Content-Type" ..." finden, wodurch du dynamisch die Kodierung feststellen kannst.  Das ersetzen der Entities (Modul http.entities) ist ebenfalls mit wenigen Zeilen erledigt und mit RegEx (Modul) kannst du auf die Schnelle den Inhalt extrahieren.

Auf der anderen Seite ist der ausgewachsene HTML-Parser (Modul html.parser) natürlich die beste Lösung.

Falls du Cookies verwenden willst setze auch ein Cookie-Jar (Modul http.cookies) ein. Und beachte bitte auch die robots.txt eines Servers (Modul http.robots).

Wie du Post Daten versendest, steht hier:

https://docs.python.org/3/library/urllib.request.html#examples

Hab jetzt keine Lust alles abzutippen, aber im Grunde genommen musst du nur einen in ASCII konvertierten Bytestring dem .data-Member vom opener-Objekt aus obigem Snippet hinzufügen:

opener.data = b'foo=bar&baz=qux&abc=123'

Siehe dazu die Beispiele auf der verlinkten Seite!

Naja, viel Spaß damit! :)

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?