Python: .pdf aus https Umgebung herunterladen?
Hallo angenommen man hat eine https-Umgebung, etwa ein Intranet, welches damit läuft.
Angenommen man möchte nun via Python eine bestimmte url, etwa 'https:\\www.intranet\09.pdf' aufrufen.
Der Nutzer hat sich bei diesem Fall bereits einmal registriert/angemeldet.
Ich möchte die .pdf direkt herunterladen.
Wie gehe ich vor ?
Ich habe schon einige Lösungen ausrobiert aber irgendwie ging bisher keine der Lösungen.
2 Antworten
Um eine PDF-Datei aus einer https-Umgebung herunterzuladen, können wir die Python-Bibliothek `requests` verwenden. Hier ist der Code dafür:
# Importiere die requests-Bibliothek
import requests
# Speichere die URL der PDF-Datei in einer Variablen
url = 'https://www.intranet/09.pdf'
# Sende eine HTTP GET-Anfrage an die URL und speichere die Antwort
response = requests.get(url)
# Öffne eine neue Datei mit dem Namen "09.pdf" im Write-Binary-Modus und schreibe den Inhalt der Antwort hinein
with open('09.pdf', 'wb') as f:
f.write(response.content)
Wenn wir uns bereits bei der https-Umgebung registriert/angemeldet haben, sollte dieser Code in der Lage sein, die PDF-Datei erfolgreich herunterzuladen. Wenn wir jedoch auf eine geschützte Ressource zugreifen möchten, für die eine Authentifizierung erforderlich ist, müssen wir möglicherweise zusätzliche Schritte unternehmen, um uns beim Server zu authentifizieren. Dies könnte zum Beispiel das Hinzufügen von Cookies oder das Übermitteln von Anmeldeinformationen in den HTTP-Header der Anfrage umfassen.
----------------------------------------------------------------------------------------
Um sich zusätzlich bei einer https-Umgebung anzumelden und danach eine PDF-Datei herunterzuladen, ist hier eine überarbeitete Version des Codes:
# Importiere die requests-Bibliothek
import requests
# Speichere die URL der Anmeldeseite und der PDF-Datei in Variablen
login_url = 'https://www.intranet/login'
pdf_url = 'https://www.intranet/09.pdf'
# Erstelle ein Dictionary mit den Anmeldeinformationen
login_data = {'username': 'myusername', 'password': 'mypassword'}
# Sende eine HTTP POST-Anfrage an die Anmelde-URL mit den Anmeldeinformationen
# und speichere die Antwort (diese enthält möglicherweise Cookies, die für die Authentifizierung benötigt werden)
login_response = requests.post(login_url, data=login_data)
# Sende eine HTTP GET-Anfrage an die URL der PDF-Datei und speichere die Antwort
pdf_response = requests.get(pdf_url, cookies=login_response.cookies)
# Öffne eine neue Datei mit dem Namen "09.pdf" im Write-Binary-Modus und schreibe den Inhalt der Antwort hinein
with open('09.pdf', 'wb') as f:
f.write(pdf_response.content)
In diesem Beispiel senden wir zunächst eine HTTP POST-Anfrage an die Anmelde-URL mit unseren Anmeldeinformationen. Die Antwort enthält möglicherweise Cookies, die wir für die Authentifizierung bei zukünftigen Anfragen verwenden müssen. Wir speichern diese Cookies in einer Variablen und übergeben sie dann als Argument an die `cookies` -Option, wenn wir die HTTP GET-Anfrage an die URL der PDF-Datei senden. Auf diese Weise werden die Cookies mit der Anfrage übermittelt und der Server kann uns authentifizieren.
Was sagen denn eventuelle Fehlermeldungen? Hat das "Intranet" vielleicht selbst signierte Zertifikate? Mal SSL verify ausgeschaltet?
Danke Teil 1 klappt leider schonmal nicht. Ich hatte früher auch schonmal etwa so versucht das Problem zu lösen; leider erfolglos. Teil 2 schau ich mir die Tage mal an, jedoch unsere URL die irgendwann so enden '[..bla....]04_(001)_MF.pdf?csf=1&web=1&e=H7g7yt' scheinen nicht eindeutig bezeichnet zu sein. versuche ich die MF.pdf dann anzuwählen passiert beim Ausführen meines Skriptes: rein gar nix (ich teste in einem größeren Projekt von mir, wo ich wenn etwas nich geht direkt im Ausgangsmenü lande).