所以,我想用urllib下载一个二进制文件(用gpg加密)。现在,如果我要管它:
this_script.py > file1
我应该能够解密二进制文件1但是,gpg只是给出了一个错误。我不想在python中保存文件,因为我需要它来解密下载文件的程序。另外我不能使用urlretireve,因为我无法欺骗useragent字符串,这会导致网站给我403 Forbidden Error。
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)
答案 0 :(得分:0)
当您调用print()
时,标准Python解释器将以二进制字符串表示法包装二进制内容(b&#39;字符串内容&#39;)。额外的角色可能搞乱了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)