2015-11-02 17 views
8

Pdf dosyasını, URL'de verilen formata göre yerel olarak kaydedecek bir python betiği yazıyorum. örneğin.python ile https üzerinden pdf dosyasını nasıl yüklerim?

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

Python komut dosyası aracılığıyla bu URL'yi açıyorum:

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

url resim ve metinlerin bolca içerir. Bu URL açıldığında python komut dosyasını kullanarak pdf formatında bir dosya kaydetmek istiyorum.

Şimdiye kadar yaptığım şey budur.
Kod 1: urllib2.HTTPError: HTTP Hatası 401: i alıyorum Yukarıdaki kodda

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() 

:

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() 

Kod 2

i Kod 2 kullanırsanız Yetkisiz, nasıl olabilir Yetkilendirme ayrıntılarını geçiyorum?

+0

Eğer 'webbrowser.open',' requests.get' veya 'urllib2 kullanarak bir çözüm istiyor musunuz. urlopen'? –

+0

@ Robᵩ - Yukarıdaki yaklaşımları denedim. Yani istekleri veya urllib2 bir şey çalışacaktır. Bir şifre çözme adımı içerdiğinden, –

cevap

5

Ben bu işe yarayacak

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

Sen gibi bir şey deneyebilirsiniz:

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' muhtemelen kötü bir seçimdir. Belki dosyayı "wb" ile açın ve bunun yerine response.content yazın. –

+1

response.raw Sanırım –

+0

Görünüşe göre, 'response.iter_chunk'' '' '' '' '' '' '' '' 'bir belgeyi geri almak için tercih edilen ve önerilen yol '': http://docs.python-requests.org/en/latest/user/quickstart/# raw-response-content –

İlgili konular