2015-11-02 10 views
8

Ich schreibe ein Python-Skript, das PDF-Datei lokal speichern wird entsprechend dem Format in URL angegeben. für z.Wie lade ich pdf-Datei über https mit Python

https://Hostname/saveReport/file_name.pdf #saves the content in PDF file. 

Ich eröffne diese URL durch Python-Skript:

import webbrowser 
webbrowser.open("https://Hostname/saveReport/file_name.pdf") 

Die URL enthält viele Bilder und Text. Sobald diese URL geöffnet ist, möchte ich eine Datei im Pdf-Format mit Python-Skript speichern.

Das habe ich bisher gemacht. 1
Code:

import requests 
url="https://Hostname/saveReport/file_name.pdf" #Note: It's https 
r = requests.get(url, auth=('usrname', 'password'), verify=False) 
file = open("file_name.pdf", 'w') 
file.write(r.read()) 
file.close() 

Code 2:

import urllib2 
import ssl 
url="https://Hostname/saveReport/file_name.pdf" 
context = ssl._create_unverified_context() 
response = urllib2.urlopen(url, context=context) #How should i pass authorization details here? 
html = response.read() 

In obigem Code ich erhalte: urllib2.HTTPError: HTTP-Fehler 401: Unauthorized

Wenn i-Code 2 verwenden, wie kann Ich gebe Autorisierungsdetails?

+0

Sie arbeiten Sie eine Lösung mit 'webbrowser.open' wollen,' requests.get' oder 'urllib2. urlopen? –

+0

@ Robᵩ - Ich habe oben Ansätze versucht. Also Anfragen oder urllib2 wird alles funktionieren. –

Antwort

5

ich denke, das

import requests 
url="https://Hostname/saveReport/file_name.pdf" #Note: It's https 
r = requests.get(url, auth=('usrname', 'password'), verify=False,stream=True) 
r.raw.decode_content = True 
with open("file_name.pdf", 'wb') as f: 
     shutil.copyfileobj(r.raw, f)  
0

Sie können wie etwas versuchen:

import requests 
response = requests.get('https://websitewithfile.com/file.pdf',verify=False, auth=('user', 'pass')) 
with open('file.pdf','w') as fout: 
    fout.write(response.read()): 
+0

'response.text' ist wahrscheinlich eine schlechte Wahl, da es einen Decodierschritt beinhaltet. Öffnen Sie die Datei mit 'wb' und schreiben Sie stattdessen' response.content'. –

+1

response.raw Ich denke, –

+0

Offenbar ist 'response.iter_chunk'' request's "bevorzugte und empfohlene Möglichkeit, ein Dokument abzurufen": http://docs.python-requests.org/en/latest/user/quickstart/# Raw-Response-Inhalt –