使用 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)