跳转到主要内容

Python-requests高级用户工具包

项目描述

Requests Toolbelt

这只是python-requests的一个实用工具集合,但实际上并不属于requests本身。最低测试的requests版本是2.1.0。实际上,工具包应该也能与2.0.1一起工作,但由于一些特殊问题,该版本无法有效或合理地测试。

使用 pip install requests-toolbelt 开始!

multipart/form-data 编码器

主要特色是一个流式multipart/form-data对象,MultipartEncoder。它的API看起来像这样

from requests_toolbelt import MultipartEncoder
import requests

m = MultipartEncoder(
    fields={'field0': 'value', 'field1': 'value',
            'field2': ('filename', open('file.py', 'rb'), 'text/plain')}
    )

r = requests.post('http://httpbin.org/post', data=m,
                  headers={'Content-Type': m.content_type})

您也可以为不需要文件的请求使用 multipart/form-data 编码

from requests_toolbelt import MultipartEncoder
import requests

m = MultipartEncoder(fields={'field0': 'value', 'field1': 'value'})

r = requests.post('http://httpbin.org/post', data=m,
                  headers={'Content-Type': m.content_type})

或者,您也可以创建字符串并检查数据

# Assuming `m` is one of the above
m.to_string()  # Always returns unicode

User-Agent构造函数

您可以轻松构建一个类似requests风格的User-Agent字符串

from requests_toolbelt import user_agent

headers = {
    'User-Agent': user_agent('my_package', '0.0.1')
    }

r = requests.get('https://api.github.com/users', headers=headers)

SSLAdapter

SSLAdapter最初发布在Cory Benfield的博客上:选择Requests中的SSL版本。此适配器允许用户在Python的ssl模块提供的SSL协议中选择一个用于出站HTTPS连接

from requests_toolbelt import SSLAdapter
import requests
import ssl

s = requests.Session()
s.mount('https://', SSLAdapter(ssl.PROTOCOL_TLSv1))

cookies/ForgetfulCookieJar

ForgetfulCookieJar防止特定的requests会话存储cookies

from requests_toolbelt.cookies.forgetful import ForgetfulCookieJar

session = requests.Session()
session.cookies = ForgetfulCookieJar()

贡献

请阅读建议的工作流程,了解如何为此项目做出贡献。

请将任何错误报告在问题跟踪器

历史记录

1.0.0 – 2023-05-01

重大变更

  • 移除对Google App Engine的支持,以便使用urllib3 2.0

修复错误

  • 确保测试套件不再访问互联网

杂项

  • 添加对Python 3.11的显式支持

0.10.1 – 2022-10-25

修复错误

  • 修复urllib3警告,仅在X509Adapter使用时发出

0.10.0 – 2022-10-06

新功能

  • 在BaseUrlSession中添加对准备请求的支持

修复错误

  • 修复dump实用程序中缺少换行符的问题

0.9.1 – 2019-01-29

修复错误

  • 修复从urllib3导入pyOpenSSL shim以用于PKCS12适配器的问题

0.9.0 – 2019-01-29

新功能

  • 添加可以处理PKCS12的X509适配器

  • 添加通过MultipartEncoder从一台主机到另一台主机(分块)进行流式传输文件的无状态解决方案

修复错误

  • 更新示例链接

  • 将collections中的ABCs导入到_compatibility模块的特定版本部分

  • 修复get_encodings_from_content中的向后不兼容性

  • 更正MultipartEncoderMonitor的回调文档

  • 修复在请求编码零部分时的问题

  • 更正非字符串请求正文转储的类型

  • 从MultipartDecoder中删除内容

  • 通过启用对大写字母content-type的支持来修复错误

  • 在转储请求之前将代理URL强制转换为字节

  • 在空响应原因上避免抛出异常而退出

  • 更正Pool文档

  • 更正示例用法中的括号匹配

  • MultipartEncoder中将“oject”更正为“object”

  • 在迁移后修复项目URL

  • 为OSX TCPKeepAliveAdapter添加修复

杂项

  • 从测试中删除py33,并在travis矩阵中添加Python 3.6和夜间测试

0.8.0 – 2017-05-20

有关此版本的信息,请参阅0.8.0里程碑

新功能

  • 添加UserAgentBuilder以提供对生成的User-Agent字符串的更多控制。

修复错误

  • _validate_certificate包含在AppEngineAdapter选择的属性列表中。

  • 修复get_encodings_from_content中的向后不兼容性

0.7.1 – 2017-02-13

有关此版本的信息,请参阅0.7.1里程碑

修复错误

  • 修复了AppEngineAdapter的monkey-patching问题。

  • 使禁用AppEngine时的证书验证变得更加容易。

  • 处理没有尾部CRLF的multipart/form-data正文。

0.7.0 – 2016-07-21

有关此版本的信息,请参阅0.7.0里程碑

新功能

  • 添加BaseUrlSession以允许开发人员拥有具有“Base”URL的会话。有关更多详细信息,请参阅文档和示例。

  • stream_response_to_file的逻辑拆分为两个单独的函数

    • get_download_file_path 从响应中生成文件名。

    • stream_response_to_file 在需要时会使用 get_download_file_path

修复错误

  • 修复了使用非常旧版本的 Requests 的用户遇到的问题,他们在尝试导入 connection 时会看到来自 requests_toolbelt._compat 的 ImportError。

0.6.2 – 2016-05-10

修复错误

  • 当通过 Requests 传递超时时,它没有被适当地转换为 urllib3 代码所期望的超时。

0.6.1 – 2016-05-05

修复错误

  • 在 AppEngineAdapter 中删除了对请求 URL 的断言。

  • 阻止 pip 在发布时安装 requests 3.0.0,直到我们准备好处理它。

0.6.0 – 2016-01-27

关于此版本的更多信息可以在 0.6.0 里程碑 上找到。

新功能

  • 添加 AppEngineAdapter 以支持使用 Google AppEngine 平台的 Requests 开发者。

  • 添加 GuessProxyAuth 类以支持代理之间猜测 Basic 和 Digest 认证。

修复错误

  • 确保在使用 SSLAdapter 时,代理使用正确的 TLS 版本。

  • 修复了使用 HTTPProxyDigestAuth 类时的 AttributeError

杂项

  • 停止对 Python 3.2 的测试支持。virtualenv 和 pip 已经停止支持它,这意味着在我们的 CI 基础设施中对其进行测试变得更加困难。从现在开始,我们将尽力支持 3.2,但不会对其进行测试。

0.5.1 – 2015-12-16

有关此版本的更多信息可以在 0.5.1 里程碑 上找到。

修复错误

  • 现在解决 requests 的 super_len 函数在不同版本(2.9.0 之前和 2.9.0 及以后)之间的差异。

0.5.0 – 2015-11-24

有关此版本的更多信息可以在 0.5.0 里程碑 上找到。

新功能

  • requests_toolbelt.downloadutils 中添加了 tee 子模块。它允许你在写入文件的同时迭代响应的字节。函数 tee.tee 期望你传递一个打开的文件对象,而 tee.tee_to_file 将使用提供的文件名为你打开文件。

  • requests_toolbelt.utils.user_agent 添加了一个新参数,允许用户指定附加项。

  • 添加了嵌套的表单数据辅助程序,requests_toolbelt.utils.formdata.urlencode

  • requests_toolbelt.cookies 中添加了 ForgetfulCookieJar

  • requests_toolbelt.utils.dump 中添加了有关请求-响应周期信息的实用程序。

  • 实现了 requests_toolbelt.threaded 模块文档字符串中描述的 API,即添加了 requests_toolbelt.threaded.map 作为可用函数。

修复错误

  • 现在解决从系统软件包安装的 requests 版本和从 PyPI 安装的 requests 版本之间的 API 差异。

  • 允许为 SourceAddressAdapter 使用字符串类型。

0.4.0 – 2015-04-03

有关此版本的更多信息,请参阅项目页面上的 0.4.0 里程碑

新功能

  • 工具包中现在包含了一个简单的线程池实现。请参阅 docs/threading.rst 或在 Read The Docs 上的文档。

  • 现在 StreamingIterator 接受没有特定长度的文件(如 sys.stdin),并将正确地流式传输它们。

  • 现在,MultipartEncoder 接受与请求的 files 参数完全相同的字段格式。换句话说,你现在也可以向请求体中的某个部分添加额外的头信息。你现在还可以为部分指定自定义的 Content-Type

  • 现在已包含 HTTP Digest 认证代理的实现。

  • 工具包中现在包含一个传输适配器,允许用户指定特定的证书指纹。

  • 工具包中现在包含一个简化用户指定套接字选项的传输适配器。

  • 工具包中现在包含一个简化用户指定 TCP Keep-Alive 选项的传输适配器。

  • 现在包含了从 requests.utils 中弃用的函数,并进行了维护。

  • 现在包含了一个身份验证工具,允许用户同时指定如何对多个不同域名进行认证。

  • 现在包含了一个函数,可以通过分析 Content-Disposition 头将流式响应保存到磁盘。

修复错误

  • MultipartEncoder 现在将允许用户在 32 位系统上上传大于 4GB 的文件。

  • MultipartEncoder 现在接受空 Unicode 字符串作为表单值。

0.3.1 – 2014-06-23

  • 修复了 0.3.0 版本包不包括 StreamingIterator 的问题。

0.3.0 – 2014-05-21

错误修复

  • MultipartEncoder 的全面重写修复了上传中字节丢失的 bug。

新功能

  • MultipartDecoder 接受 multipart/form-data 响应体并将它们解析为易于使用的对象。

  • SourceAddressAdapter 允许用户选择要绑定连接的本地地址。

  • GuessAuth 接受用户名和密码,并使用 WWW-Authenticate 头确定如何对服务器进行认证。

  • MultipartEncoderMonitor 包装了一个 MultipartEncoder 实例,并跟踪读取了多少字节,并将调用提供的回调。

  • StreamingIterator 将包装一个迭代器,流式传输上传而不是分块上传,前提是你也提供了要上传的内容的长度。

0.2.0 – 2014-02-24

  • 添加了告诉 MultipartEncoder 使用哪种编码的能力。默认使用 'utf-8'。

  • 修复 #10 - 允许用户使用 pip 进行安装

  • 修复 #9 - 修复 MultipartEncoder#to_string,使其能够正确处理文件对象作为字段

0.1.2 – 2014-01-19

  • 在开发过程中,我们破坏了如何处理普通文件对象的方法。感谢 @konomae,这个问题现在已经修复。

0.1.1 – 2014-01-19

  • 更好地处理 io.BytesIO 类似的对象

0.1.0 – 2014-01-18

  • 添加了流式 MultipartEncoder 的初始实现

  • 添加了 user_agent 函数的初始实现

  • 添加了 SSLAdapter

由以下支持