专业会话¶
该工具包在 requests_toolbelt.sessions
模块中提供专业会话类。
- class requests_toolbelt.sessions.BaseUrlSession(base_url=None)¶
一个使用 URL 作为所有请求基础的会话。
让我们从查看几个示例开始
>>> from requests_toolbelt import sessions >>> s = sessions.BaseUrlSession( ... base_url='https://example.com/resource/') >>> r = s.get('sub-resource/', params={'foo': 'bar'}) >>> print(r.request.url) https://example.com/resource/sub-resource/?foo=bar
我们对
get
方法的调用将在创建会话时传入的 URL 和我们提供的部分资源名称中发出请求。我们通过覆盖会话的request
方法来实现这一点。同样,我们覆盖
prepare_request
方法,以便您可以用相同的方式构建一个 PreparedRequest>>> from requests import Request >>> from requests_toolbelt import sessions >>> s = sessions.BaseUrlSession( ... base_url='https://example.com/resource/') >>> request = Request(method='GET', url='sub-resource/') >>> prepared_request = s.prepare_request(request) >>> r = s.send(prepared_request) >>> print(r.request.url) https://example.com/resource/sub-resource
注意
您提供的基本 URL 和您提供的路径非常重要。
让我们看另一个类似的示例
>>> from requests_toolbelt import sessions >>> s = sessions.BaseUrlSession( ... base_url='https://example.com/resource/') >>> r = s.get('/sub-resource/', params={'foo': 'bar'}) >>> print(r.request.url) https://example.com/sub-resource/?foo=bar
这里的关键区别在于我们使用
/sub-resource/
调用了get
,即存在一个前导/
。这改变了我们创建 URL 的方式,因为我们依赖于urllib.parse.urljoin
。要覆盖我们生成 URL 的方式,请对该方法进行子类化并覆盖
create_url
方法。基于 https://github.com/kennethreitz/requests/issues/2554#issuecomment-109341010 中的实现。
- create_url(url)¶
根据此部分路径创建 URL。
- prepare_request(request, *args, **kwargs)¶
在生成完整 URL 后准备请求。
- request(method, url, *args, **kwargs)¶
在生成完整 URL 后发送请求。
BaseUrlSession¶
0.7.0 版中的新增功能。
许多人编写了会话子类,允许指定“基本 URL”,因此所有未来的请求无需指定完整 URL。为了创建一个简化且易于配置的版本,我们已将 requests_toolbelt.sessions.BaseUrlSession
对象添加到工具包中。
- 类 requests_toolbelt.sessions.BaseUrlSession¶