使用 urllib 下载二进制加密文件,将其保存为流
Download binary encrypted file with urllib, keep it as stream
所以,我想使用 urllib 下载一个二进制文件(用 gpg 加密)。现在,如果我将其管道化:
this_script.py > file1
我应该能够解密二进制文件1,但是 gpg 只是给出了一个错误。我不想将文件保存在 python 中,因为我的解密下载文件的程序需要它。我也不能使用 urlretireve,因为我不能欺骗用户代理字符串,这会导致网站给我 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)
当您调用 print()
时,标准 Python 解释器会将二进制内容包装在二进制字符串表示法中(b'字符串内容')。额外的字符可能会扰乱 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)
所以,我想使用 urllib 下载一个二进制文件(用 gpg 加密)。现在,如果我将其管道化:
this_script.py > file1
我应该能够解密二进制文件1,但是 gpg 只是给出了一个错误。我不想将文件保存在 python 中,因为我的解密下载文件的程序需要它。我也不能使用 urlretireve,因为我不能欺骗用户代理字符串,这会导致网站给我 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)
当您调用 print()
时,标准 Python 解释器会将二进制内容包装在二进制字符串表示法中(b'字符串内容')。额外的字符可能会扰乱 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)