开发人员界面¶
文档的这一部分涵盖了请求的所有接口。对于请求依赖外部库的部分,我们在这里记录最重要的部分,并提供到规范文档的链接。
主界面¶
所有请求的功能都可以通过这7种方法访问。它们都返回 Response
对象。
- requests.request(method, url, **kwargs)[源代码]¶
构造并发送
Request
.- 参数:
method -- 新的方法
Request
对象:GET
,OPTIONS
,HEAD
,POST
,PUT
,PATCH
或DELETE
.url -- 新网址
Request
对象。params -- (可选)字典、要在查询字符串中发送的元组或字节列表
Request
.data -- (可选)要在正文中发送的字典、元组列表、字节或类似文件的对象
Request
.json -- (可选)要在主体中发送的JSON可序列化python对象
Request
.headers -- (可选)要与发送的HTTP头的字典
Request
.cookies -- (可选)要与一起发送的dict或cookiejar对象
Request
.files -- (可选)字典
'name': file-like-objects
(或){{'name': file-tuple}}
) for multipart encoding upload.file-tuple
可以是2元组('filename', fileobj)
,三元组('filename', fileobj, 'content_type')
或四元组('filename', fileobj, 'content_type', custom_headers)
在哪里'content-type'
是定义给定文件的内容类型的字符串,并且custom_headers
一个类似dict的对象,包含要为文件添加的附加头。auth -- (可选)auth tuple以启用基本/摘要/自定义http auth。
timeout (float or tuple) -- (可选)在放弃前等待服务器发送数据的秒数,以浮点形式,或 (connect timeout, read timeout) 元组。
allow_redirects (bool) -- (可选)布尔值。启用/禁用get/options/post/put/patch/delete/head重定向。默认为
True
.proxies -- (可选)字典映射协议到代理的URL。
verify -- (可选)或者是一个布尔值,在这种情况下,它控制我们是验证服务器的TLS证书,还是一个字符串,在这种情况下,它必须是要使用的CA束的路径。默认为
True
.stream -- (可选)
False
,将立即下载响应内容。cert -- (可选)如果为字符串,则为SSL客户端证书文件(.pem)的路径。如果tuple(‘cert’,‘key’)对。
- 返回:
Response
对象- 返回类型:
用法:
>>> import requests >>> req = requests.request('GET', 'https://httpbin.org/get') >>> req <Response [200]>
例外情况¶
- exception requests.Timeout(*args, **kwargs)[源代码]¶
请求超时。
捕获此错误将同时捕获
ConnectTimeout
和ReadTimeout
错误。
请求会话¶
- class requests.Session[源代码]¶
请求会话。
提供cookie持久性、连接池和配置。
基本用法:
>>> import requests >>> s = requests.Session() >>> s.get('https://httpbin.org/get') <Response [200]>
或者作为上下文管理器:
>>> with requests.Session() as s: ... s.get('https://httpbin.org/get') <Response [200]>
- cert¶
ssl客户端证书默认值,如果为字符串,则为ssl客户端证书文件(.pem)的路径。如果tuple(‘cert’,‘key’)对。
- cookies¶
包含当前在此会话上设置的所有未完成cookie的cookiejar。默认情况下,它是
RequestsCookieJar
但可能是其他的cookielib.CookieJar
兼容对象。
- delete(url, **kwargs)[源代码]¶
发送删除请求。退换商品
Response
对象。- 参数:
url -- 新网址
Request
对象。**kwargs -- 可选参数
request
拿。
- 返回类型:
- get(url, **kwargs)[源代码]¶
发送获取请求。退换商品
Response
对象。- 参数:
url -- 新网址
Request
对象。**kwargs -- 可选参数
request
拿。
- 返回类型:
- get_redirect_target(resp)¶
接收响应。返回重定向URI或
None
- head(url, **kwargs)[源代码]¶
发送头请求。退换商品
Response
对象。- 参数:
url -- 新网址
Request
对象。**kwargs -- 可选参数
request
拿。
- 返回类型:
- hooks¶
事件处理挂钩。
- max_redirects¶
允许的最大重定向数。如果请求超过此限制,则
TooManyRedirects
引发异常。默认为requests.models.default_redirect_limit,即30。
- options(url, **kwargs)[源代码]¶
发送选项请求。退换商品
Response
对象。- 参数:
url -- 新网址
Request
对象。**kwargs -- 可选参数
request
拿。
- 返回类型:
- prepare_request(request)[源代码]¶
构建一个
PreparedRequest
用于传输并返回。这个PreparedRequest
已将设置从合并Request
实例和Session
.- 参数:
request --
Request
使用此会话的设置准备的实例。- 返回类型:
- proxies¶
字典映射协议或协议和主机到代理服务器的URL(例如,http':'foo.bar:3128'、'http://host.name':'foo.bar:4012')的映射协议或协议
Request
.
- rebuild_auth(prepared_request, response)¶
重定向时,我们可能希望从请求中除去身份验证,以避免泄漏凭据。此方法在可能的情况下智能地删除和重新应用身份验证,以避免凭据丢失。
- rebuild_method(prepared_request, response)¶
当被重定向时,我们可能希望根据特定规范或浏览器行为更改请求的方法。
- rebuild_proxies(prepared_request, proxies)¶
此方法通过考虑环境变量来重新评估代理配置。如果我们被重定向到一个没有代理覆盖的URL,我们就去掉代理配置。否则,我们将为此URL设置丢失的代理密钥(以防以前的重定向将它们删除)。
必要时,此方法还替换代理授权头。
- 返回类型:
- request(method, url, params=None, data=None, headers=None, cookies=None, files=None, auth=None, timeout=None, allow_redirects=True, proxies=None, hooks=None, stream=None, verify=None, cert=None, json=None)[源代码]¶
构建一个
Request
,准备并发送。退换商品Response
对象。- 参数:
method -- 新的方法
Request
对象。url -- 新网址
Request
对象。params -- (可选)要在查询字符串中发送的字典或字节
Request
.data -- (可选)要在正文中发送的字典、元组列表、字节或类似文件的对象
Request
.json -- (可选)json发送到
Request
.headers -- (可选)要与发送的HTTP头的字典
Request
.cookies -- (可选)要与一起发送的dict或cookiejar对象
Request
.files -- (可选)字典
'filename': file-like-objects
用于多部分编码上传。auth -- (可选)auth tuple或callable以启用基本/摘要/自定义http auth。
timeout (float or tuple) -- (可选)在放弃之前等待服务器发送数据的时间(以浮点形式),或 (connect timeout, read timeout) 元组。
allow_redirects (bool) -- (可选)默认设置为真。
proxies -- (可选)字典映射协议或协议和主机名到代理的URL。
stream -- (可选)是否立即下载响应内容。默认为
False
.verify -- (可选)布尔值(在这种情况下它控制我们是否验证服务器的TLS证书)或字符串(在这种情况下它必须是要使用的CA捆绑包的路径)。默认为
True
。当设置为时False
,请求将接受服务器提供的任何TLS证书,并将忽略主机名不匹配和/或过期证书,这将使您的应用程序容易受到中间人(MITM)攻击。将验证设置为False
在本地开发或测试期间可能有用。cert -- (可选)如果为字符串,则为SSL客户端证书文件(.pem)的路径。如果tuple(‘cert’,‘key’)对。
- 返回类型:
- resolve_redirects(resp, req, stream=False, timeout=None, verify=True, cert=None, proxies=None, yield_requests=False, **adapter_kwargs)¶
接收响应。返回响应或请求的生成器。
- should_strip_auth(old_url, new_url)¶
决定重定向时是否应删除授权头
- stream¶
流响应内容默认值。
- trust_env¶
代理配置、默认身份验证等的信任环境设置。
- verify¶
SSL验证默认值。默认为 True ,要求请求在远程端验证TLS证书。如果验证设置为 False ,请求将接受服务器提供的任何TLS证书,并将忽略主机名不匹配和/或过期的证书,这将使应用程序易受中间人(MitM)攻击。只需将此设置为 False 用于测试。
下层阶级¶
- class requests.Request(method=None, url=None, headers=None, files=None, data=None, params=None, auth=None, cookies=None, hooks=None, json=None)[源代码]¶
用户创建
Request
对象。用于准备
PreparedRequest
,发送到服务器。- 参数:
method -- 要使用的HTTP方法。
url -- 要发送的URL。
headers -- 要发送的标题字典。
files -- 文件名:fileobject要多部分上载的文件的字典。
data -- 附加到请求的主体。如果字典或元组列表
[(key, value)]
如果提供,将进行表单编码。json -- 用于附加到请求的主体的JSON(如果未指定文件或数据)。
params -- 要附加到URL的URL参数。如果字典或元组列表
[(key, value)]
如果提供,将进行表单编码。auth -- 身份验证处理程序或(用户、传递)元组。
cookies -- 要附加到此请求的cookie字典或cookiejar。
hooks -- 回调挂钩字典,供内部使用。
用法:
>>> import requests >>> req = requests.Request('GET', 'https://httpbin.org/get') >>> req.prepare() <PreparedRequest [GET]>
- deregister_hook(event, hook)¶
注销以前注册的挂钩。如果钩子存在,则返回true,否则返回false。
- prepare()[源代码]¶
构建一个
PreparedRequest
用于传输并返回。
- register_hook(event, hook)¶
正确登记钩子。
- class requests.Response[源代码]¶
这个
Response
对象,其中包含服务器对HTTP请求的响应。- property apparent_encoding¶
由CHARSET_NORAMIZER或Chardet库提供的明显编码。
- property content¶
响应的内容(字节)。
- cookies¶
服务器发送回的一罐cookie。
- elapsed¶
从发送请求到响应到达所经过的时间量(以时间增量表示)。此属性专门测量从发送请求的第一个字节到完成对头的解析之间所用的时间。因此,它不受使用响应内容或
stream
关键字参数。
- encoding¶
访问r.text时要解码的编码。
- headers¶
响应头的不区分大小写字典。例如,
headers['content-encoding']
将返回'Content-Encoding'
响应头。
- property is_permanent_redirect¶
如果此响应是重定向的永久版本之一,则为true。
- property is_redirect¶
如果此响应是一个格式良好的HTTP重定向,并且可能已被自动处理(由
Session.resolve_redirects
)
- iter_content(chunk_size=1, decode_unicode=False)[源代码]¶
迭代响应数据。当请求上设置了stream=true时,这样可以避免将内容一次读取到内存中以获得较大的响应。块大小是应该读取到内存中的字节数。这不一定是由于解码而返回的每个项目的长度。
区块大小必须是int或none类型。“无”的值将根据 stream. stream=true将在数据到达时读取以接收到的块大小为单位的数据。如果stream=false,则数据作为单个块返回。
如果decode-unicode为true,则将使用基于响应的最佳可用编码对内容进行解码。
- iter_lines(chunk_size=512, decode_unicode=False, delimiter=None)[源代码]¶
迭代响应数据,一次一行。当请求上设置了stream=true时,这样可以避免将内容一次读取到内存中以获得较大的响应。
备注
此方法不可重入安全。
- json(**kwargs)[源代码]¶
返回响应的JSON编码内容(如果有)。
- 参数:
**kwargs -- 可选参数
json.loads
拿。- 抛出:
requests.exceptions.JSONDecodeError -- 如果响应主体不包含有效的JSON。
- property links¶
返回响应的解析头链接(如果有)。
- property next¶
返回重定向链中下一个请求的PreparedRequest(如果有)。
- property ok¶
返回true
status_code
小于400,否则为假。此属性检查响应的状态代码是否在400和600之间,以查看是否存在客户端错误或服务器错误。如果状态代码介于200和400之间,则返回true。这是 not 检查响应代码是否为
200 OK
.
- raw¶
响应的类文件对象表示(用于高级用法)。使用
raw
要求stream=True
按要求设置。此要求不适用于内部用于请求。
- reason¶
响应HTTP状态的文本原因,例如“未找到”或“确定”。
- request¶
这个
PreparedRequest
此为响应的对象。
- status_code¶
响应HTTP状态的整数代码,例如404或200。
- property text¶
响应的内容(Unicode)。
如果Response.coding为None,则使用以下命令猜测编码
charset_normalizer
或chardet
。响应内容的编码仅基于HTTP头,遵循RFC2616到字母。如果您可以利用非HTTP知识更好地猜测编码,那么应该设置
r.encoding
在访问此属性之前。
- url¶
响应的最终URL位置。
下层阶级¶
- class requests.PreparedRequest[源代码]¶
完全可变的
PreparedRequest
对象,包含将发送到服务器的确切字节。实例是从
Request
对象,并且不应手动实例化;这样做可能会产生不希望的效果。用法:
>>> import requests >>> req = requests.Request('GET', 'https://httpbin.org/get') >>> r = req.prepare() >>> r <PreparedRequest [GET]> >>> s = requests.Session() >>> s.send(r) <Response [200]>
- body¶
请求正文发送到服务器。
- deregister_hook(event, hook)¶
注销以前注册的挂钩。如果钩子存在,则返回true,否则返回false。
- headers¶
HTTP头字典。
- hooks¶
回调挂钩字典,供内部使用。
- method¶
发送到服务器的HTTP谓词。
- property path_url¶
生成要使用的路径URL。
- prepare(method=None, url=None, headers=None, files=None, data=None, params=None, auth=None, cookies=None, hooks=None, json=None)[源代码]¶
使用给定参数准备整个请求。
- prepare_cookies(cookies)[源代码]¶
准备给定的HTTP cookie数据。
此函数最终生成
Cookie
使用cookielib的给定cookies的头。由于Cookileib的设计,如果头已经存在,则不会重新生成,这意味着在PreparedRequest
对象。任何后续呼叫prepare_cookies
除非事先删除了“cookie”头,否则将没有实际效果。
- register_hook(event, hook)¶
正确登记钩子。
- url¶
发送请求的HTTP URL。
- class requests.adapters.BaseAdapter[源代码]¶
基本传输适配器
- send(request, stream=False, timeout=None, verify=True, cert=None, proxies=None)[源代码]¶
发送PreparedRequest对象。返回响应对象。
- 参数:
request -- 这个
PreparedRequest
被送来。stream -- (可选)是否传输请求内容。
timeout (float or tuple) -- (可选)在放弃之前等待服务器发送数据的时间(以浮点形式),或 (connect timeout, read timeout) 元组。
verify -- (可选)布尔值,在这种情况下,它控制是验证服务器的TLS证书,还是验证字符串,在这种情况下,它必须是要使用的CA束的路径
cert -- (可选)任何用户提供的要受信任的SSL证书。
proxies -- (可选)要应用于请求的代理字典。
- class requests.adapters.HTTPAdapter(pool_connections=10, pool_maxsize=10, max_retries=0, pool_block=False)[源代码]¶
URLLIB3的内置HTTP适配器。
通过实现传输适配器接口,为与HTTP和HTTPS URL联系的请求会话提供通用事例接口。此类通常由
Session
在封面下分类。- 参数:
pool_connections -- 要缓存的URLLIB3连接池数。
pool_maxsize -- 要在池中保存的最大连接数。
max_retries -- 每个连接应尝试的最大重试次数。注意,这只适用于失败的DNS查找、套接字连接和连接超时,而不适用于向服务器发送数据的请求。默认情况下,请求不会重试失败的连接。如果您需要对重试请求的条件进行粒度控制,请导入URLLIB3
Retry
然后通过它。pool_block -- 连接池是否应阻止连接。
用法:
>>> import requests >>> s = requests.Session() >>> a = requests.adapters.HTTPAdapter(max_retries=3) >>> s.mount('http://', a)
- add_headers(request, **kwargs)[源代码]¶
添加连接所需的任何头。从2.0版开始,默认情况下不执行任何操作,但由子类
HTTPAdapter
.这不应该从用户代码调用,并且只在子类化
HTTPAdapter
.- 参数:
request -- 这个
PreparedRequest
将标题添加到。kwargs -- 调用to send()的关键字参数。
- build_response(req, resp)[源代码]¶
建立一个
Response
来自URLLIB3响应的对象。这不应该从用户代码调用,并且只在子类化HTTPAdapter
- 参数:
req -- 这个
PreparedRequest
用于生成响应。resp -- URLLIB3响应对象。
- 返回类型:
- cert_verify(conn, url, verify, cert)[源代码]¶
验证SSL证书。不应从用户代码调用此方法,并且只在子类化
HTTPAdapter
.- 参数:
conn -- 与证书关联的URLLIB3连接对象。
url -- 请求的URL。
verify -- 布尔值,在这种情况下,它控制我们是验证服务器的TLS证书,还是验证字符串,在这种情况下,它必须是要使用的CA束的路径
cert -- 要验证的SSL证书。
- get_connection(url, proxies=None)[源代码]¶
返回给定URL的URLLIB3连接。这不应该从用户代码调用,并且只在子类化
HTTPAdapter
.- 参数:
url -- 要连接到的URL。
proxies -- (可选)用于此请求的请求样式代理字典。
- 返回类型:
urllib3.ConnectionPool
- init_poolmanager(connections, maxsize, block=False, **pool_kwargs)[源代码]¶
初始化URLLIB3池管理器。
不应从用户代码调用此方法,并且只在子类化
HTTPAdapter
.- 参数:
connections -- 要缓存的URLLIB3连接池数。
maxsize -- 要在池中保存的最大连接数。
block -- 当没有可用连接时阻塞。
pool_kwargs -- 用于初始化池管理器的额外关键字参数。
- proxy_headers(proxy)[源代码]¶
返回要添加到通过代理发送的任何请求中的头的字典。这与urllib3 magic一起工作,以确保它们正确地发送到代理,而不是在使用connect的情况下发送到隧道请求中。
这不应该从用户代码调用,并且只在子类化
HTTPAdapter
.- 参数:
proxy -- 用于此请求的代理的URL。
- 返回类型:
- proxy_manager_for(proxy, **proxy_kwargs)[源代码]¶
返回给定代理的URLLIB3代理管理器。
不应从用户代码调用此方法,并且只在子类化
HTTPAdapter
.- 参数:
proxy -- 要为其返回URLLIB3代理管理器的代理。
proxy_kwargs -- 用于配置代理管理器的额外关键字参数。
- 返回:
ProxyManager
- 返回类型:
- request_url(request, proxies)[源代码]¶
获取发出最终请求时要使用的URL。
如果消息是通过HTTP代理发送的,则必须使用完整的URL。否则,我们应该只使用URL的路径部分。
这不应该从用户代码调用,并且只在子类化
HTTPAdapter
.- 参数:
request -- 这个
PreparedRequest
被送来。proxies -- 方案或方案以及代理URL的主机的字典。
- 返回类型:
- send(request, stream=False, timeout=None, verify=True, cert=None, proxies=None)[源代码]¶
发送PreparedRequest对象。返回响应对象。
- 参数:
request -- 这个
PreparedRequest
被送来。stream -- (可选)是否传输请求内容。
timeout (float or tuple or urllib3 Timeout object) -- (可选)在放弃之前等待服务器发送数据的时间(以浮点形式),或 (connect timeout, read timeout) 元组。
verify -- (可选)布尔值,在这种情况下,它控制是验证服务器的TLS证书,还是验证字符串,在这种情况下,它必须是要使用的CA束的路径
cert -- (可选)任何用户提供的要受信任的SSL证书。
proxies -- (可选)要应用于请求的代理字典。
- 返回类型:
认证¶
编码¶
状态代码查找¶
- requests.codes¶
{} 的别名
这个 codes
对象定义从HTTP状态的公用名到其数字代码的映射,可以作为属性或字典项进行访问。
例子::
>>> import requests
>>> requests.codes['temporary_redirect']
307
>>> requests.codes.teapot
418
>>> requests.codes['\o/']
200
有些代码有多个名称,允许使用名称的大小写版本。例如, codes.ok
, codes.OK
和 codes.okay
所有这些都对应于HTTP状态代码200。
100:
continue
101:
switching_protocols
102:
processing
103:
checkpoint
122:
uri_too_long
,request_uri_too_long
200:
ok
,okay
,all_ok
,all_okay
,all_good
,\o/
,✓
201:
created
202:
accepted
203:
non_authoritative_info
,non_authoritative_information
204:
no_content
205:
reset_content
,reset
206:
partial_content
,partial
207:
multi_status
,multiple_status
,multi_stati
,multiple_stati
208:
already_reported
226:
im_used
300:
multiple_choices
301:
moved_permanently
,moved
,\o-
302:
found
303:
see_other
,other
304:
not_modified
305:
use_proxy
306:
switch_proxy
307:
temporary_redirect
,temporary_moved
,temporary
308:
permanent_redirect
,resume_incomplete
,resume
400:
bad_request
,bad
401:
unauthorized
402:
payment_required
,payment
403:
forbidden
404:
not_found
,-o-
405:
method_not_allowed
,not_allowed
406:
not_acceptable
407:
proxy_authentication_required
,proxy_auth
,proxy_authentication
408:
request_timeout
,timeout
409:
conflict
410:
gone
411:
length_required
412:
precondition_failed
,precondition
413:
request_entity_too_large
414:
request_uri_too_large
415:
unsupported_media_type
,unsupported_media
,media_type
416:
requested_range_not_satisfiable
,requested_range
,range_not_satisfiable
417:
expectation_failed
418:
im_a_teapot
,teapot
,i_am_a_teapot
421:
misdirected_request
422:
unprocessable_entity
,unprocessable
423:
locked
424:
failed_dependency
,dependency
425:
unordered_collection
,unordered
426:
upgrade_required
,upgrade
428:
precondition_required
,precondition
429:
too_many_requests
,too_many
431:
header_fields_too_large
,fields_too_large
444:
no_response
,none
449:
retry_with
,retry
450:
blocked_by_windows_parental_controls
,parental_controls
451:
unavailable_for_legal_reasons
,legal_reasons
499:
client_closed_request
500:
internal_server_error
,server_error
,/o\
,✗
501:
not_implemented
502:
bad_gateway
503:
service_unavailable
,unavailable
504:
gateway_timeout
505:
http_version_not_supported
,http_version
506:
variant_also_negotiates
507:
insufficient_storage
509:
bandwidth_limit_exceeded
,bandwidth
510:
not_extended
511:
network_authentication_required
,network_auth
,network_authentication
迁移到1.x¶
本节详细介绍0.x和1.x之间的主要区别,旨在减轻升级的痛苦。
API更改¶
Response.json
现在是可调用的,而不是响应的属性。import requests r = requests.get('https://api.github.com/events') r.json() # This *call* raises an exception if JSON decoding fails
这个
Session
API已更改。会话对象不再接受参数。Session
现在也是大写的,但仍然可以用小写字母实例化session
为了向后兼容。s = requests.Session() # formerly, session took parameters s.auth = auth s.headers.update(headers) r = s.get('https://httpbin.org/headers')
除“response”外,所有请求挂钩都已删除。
身份验证助手已被分成单独的模块。请参阅requests-oauthlib_u和requests-kerberos_u。
流请求的参数已从更改为
prefetch
到stream
逻辑被颠倒了。此外,stream
现在需要原始响应读取。# in 0.x, passing prefetch=False would accomplish the same thing r = requests.get('https://api.github.com/events', stream=True) for chunk in r.iter_content(8192): ...
这个
config
请求方法的参数已被删除。其中一些选项现在配置在Session
例如保持活动状态和最大重定向数。应通过配置日志记录来处理详细性选项。import requests import logging # Enabling debugging at http.client level (requests->urllib3->http.client) # you will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA. # the only thing missing will be the response.body which is not logged. try: # for Python 3 from http.client import HTTPConnection except ImportError: from httplib import HTTPConnection HTTPConnection.debuglevel = 1 logging.basicConfig() # you need to initialize logging, otherwise you will not see anything from requests logging.getLogger().setLevel(logging.DEBUG) requests_log = logging.getLogger("urllib3") requests_log.setLevel(logging.DEBUG) requests_log.propagate = True requests.get('https://httpbin.org/headers')
许可¶
与API无关的一个关键区别是许可证从isc_u许可证更改为 Apache 2.0 许可证。Apache2.0许可证确保对请求的贡献也包含在Apache2.0许可证中。
迁移到2.x¶
与1.0版本相比,向后不兼容的更改相对较少,但是对于这个主要版本仍然有一些问题需要注意。
有关此版本中更改的更多详细信息,包括新的API、指向相关GitHub问题的链接以及一些错误修复,请阅读Cory关于此主题的博客。
API更改¶
请求处理异常的方式发生了一些变化。
RequestException
现在是的子类IOError
而不是RuntimeError
因为这样更准确地分类了错误的类型。此外,一个无效的URL转义序列现在引发了RequestException
而不是ValueError
.requests.get('http://%zz/') # raises requests.exceptions.InvalidURL
最后,
httplib.IncompleteRead
错误的分块编码导致的异常现在将引发一个请求ChunkedEncodingError
相反。代理API略有变化。代理URL的方案现在是必需的。
proxies = { "http": "10.10.1.10:3128", # use http://10.10.1.10:3128 instead } # In requests 1.x, this was legal, in requests 2.x, # this raises requests.exceptions.MissingSchema requests.get("http://example.org", proxies=proxies)
行为改变¶
键在
headers
字典现在是所有python版本的本机字符串,即python 2上的bytestrings和python 3上的unicode。如果键不是本机字符串(python 2上的unicode或python 3上的bytestrings),它们将转换为采用utf-8编码的本机字符串类型。价值观
headers
字典应该始终是字符串。自1.0之前,这就是项目的立场,但最近的一次更改(自2.11.0版本以来)更严格地实施了这一点。建议尽可能避免以unicode形式传递头值。