【问题标题】:Download binary encrypted file with urllib, keep it as stream使用 urllib 下载二进制加密文件,将其保存为流
【发布时间】:2015-07-20 14:07:21
【问题描述】:

所以,我想使用 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)

【问题讨论】:

    标签: python python-3.x urllib binary-data gnupg


    【解决方案1】:

    当您调用 print() 时,标准 Python 解释器会将二进制内容包装在二进制字符串表示法(b'string contents')中。多余的字符可能会打乱 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)
    

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      相关资源
      最近更新 更多