2015-07-20 28 views
0

因此,我想使用urllib下載二進制文件(使用gpg加密)。現在,如果我想管它:使用urllib下載二進制加密文件,將其保存爲流

this_script.py > file1 

我應該能夠解密二進制文件1,但是,在GPG只是給出了一個錯誤。我不想用python保存文件,因爲我需要它來解密下載文件的程序。另外我不能使用urlretireve,因爲我不能欺騙useragent字符串,這會導致網站給我403禁止錯誤。

import urllib 
url = <link_to_any_binary_file> 
req = urllib.request.Request(
     url, 
     data=None, 
     headers={ 
       'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0' 
       } 
          ) 
file_response = urllib.request.urlopen(req) 
binary_file = file_response.read() 
print(binary_file) 

回答

1

當您對print()通話,標準Python解釋器將要包裝的二進制內容的二進制串符號(b'string內容)。多餘的字符可能會讓GPG的文件讀取變得困難。您可以嘗試手工刪除多餘的字符,如果管道是對你真正重要的還是隻是在Python做一個快速的寫:

binary_file = file_response.read() 
with open('file1', 'wb') as output: 
    output.write(binary_file) 

(我不明白你的厭惡顯而易見的這個)

編輯: 您也可以使用sys.stdout對象:

binary_file = file_response.read() 
import sys 
sys.stdout.buffer.write(binary_file) 
相關問題