【问题标题】:Send file using POST from a Python script使用 POST 从 Python 脚本发送文件
【发布时间】:2010-09-14 02:40:45
【问题描述】:

这几乎与Send file using POST from a Python script 重复,但我想补充一点:我需要一些能够正确处理字段和附件编码的东西。当您将包含非 ascii 字符的 unicode 字符串放入混合中时,我能够找到解决方案。此外,大多数解决方案不会对数据进行 base64 编码以保持 7 位干净。

【问题讨论】:

    标签: python encoding post


    【解决方案1】:

    我能想到的最好的事情就是自己编码。这个子程序怎么样?

    from urllib2 import Request, urlopen
    from binascii import b2a_base64
    
    def b64open(url, postdata):
      req = Request(url, b2a_base64(postdata), headers={'Content-Transfer-Encoding': 'base64'})
      return urlopen(req)
    
    conn = b64open("http://www.whatever.com/script.cgi", u"Liberté Égalité Fraternité")
    # returns a file-like object
    

    (好的,所以这段代码只是发送 POST 数据。但您显然想要多部分编码的数据,就像您单击“上传文件”按钮一样,对吧?嗯,这是我在这里和您链接的问题的答案。)

    【讨论】:

      【解决方案2】:

      PyCURL 提供了一个从 Python 到 CURL 的接口。

      http://curl.haxx.se/libcurl/python/

      Curl 将满足您的所有需求。它可以正确传输二进制文件,并支持多种编码。但是,您必须确保在 POST 文件时将正确的字符编码作为自定义标头。

      具体来说,您可能需要进行“文件上传”样式的 POST:

      http://curl.haxx.se/docs/httpscripting.html(第 4.3 节)

      使用 curl(或任何其他 HTTP 客户端)您可能需要设置内容编码:

      内容类型:文本/html; charset=UTF-8

      另外,请注意请求标头必须是 ascii,这包括 url(因此请确保正确转义可能的 unicode URL。有 HTTP 标头的 unicode 转义)最近在 Python 中修复:

      http://bugs.python.org/issue3300

      我希望这会有所帮助,有更多关于该主题的信息,包括在您的服务器上设置您的默认字符集等。

      【讨论】:

        【解决方案3】:

        只需使用这个库并发送文件。

        http://github.com/seisen/urllib2_file/

        【讨论】:

          猜你喜欢
          • 2015-09-22
          • 2017-06-08
          • 1970-01-01
          • 1970-01-01
          • 2014-09-20
          • 2016-08-14
          • 2012-07-29
          相关资源
          最近更新 更多