当前位置: > > > Python - 第三方HTTP库Requests使用详解2(添加请求头、超时、Cookie)

Python - 第三方HTTP库Requests使用详解2(添加请求头、超时、Cookie)

四、定制请求头

1,基本用法

(1)如果我们想为请求添加 HTTP 请求头(Request Header),只要简单地传递一个 dictheaders 参数就可以了。
import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
    'Token': '123456'
}
r = requests.get('http://httpbin.org/get?name=hangge', headers=headers)
print(r.text)

(2)运行程序可以看到请求头已经添加成功了:

2,注意事项

(1)定制 header 的优先级低于某些特定的信息源,例如:
  • 如果在 .netrc 中设置了用户认证信息,使用 headers= 设置的授权就不会生效。而如果设置了 auth= 参数,``.netrc`` 的设置就无效了。
  • 如果被重定向到别的主机,授权 header 就会被删除。
  • 代理授权 header 会被 URL 中提供的代理身份覆盖掉。
  • 在我们能判断内容长度的情况下,header Content-Length 会被改写。

(2)简单来说,Requests 不会基于定制 header 的具体情况改变自己的行为。只不过在最后的请求中,所有的 header 信息都会被传递进去。

五、超时设置

1,timeout 参数

(1)默认情况下,requests 是没有超时时长限制的,如果请求没有响应,我们的程序就会一直等待下去。
(2)我们可以使用 timeout 参数设置个时长(单位:秒),告诉 requests 在经过多长时间之后停止等待响应。
注意:timeout 仅对连接过程有效,与响应体的下载无关。
timeout 并不是整个下载响应的时间限制,而是如果服务器在 timeout 秒内没有应答,将会引发一个异常(更精确地说,是在 timeout 秒内没有从基础套接字上接收到任何字节的数据时)

2,使用样例

(1)下面将超时时间设为 0.001 秒(这样肯定超时)
import requests

response = requests.get('http://httpbin.org/get', timeout=0.001)
print(response.text)

(2)运行是可以发现抛出了个超时异常:

六、Cookie

1,获取 Cookie

如果某个响应中包含一些 cookie,我们可以通过如下方式快速访问它们:
import requests

r = requests.get('http://www.baidu.com')
print(r.cookies)
print(r.cookies['BDORZ'])

2,添加 Cookie

(1)如果希望在发送请求时添加某些 cookie,可以使用 cookies 参数传递一个字典:
import requests

cookies = {"hangge": "8888"}
r = requests.get('http://www.baidu.com', cookies=cookies)

(2)更专业的方式是先实例化一个 RequestCookieJar 的类,然后把值 set 进去,最后使用 cookies 参数传递:
RequestsCookieJar 的行为和字典类似,但接口更为完整,适合跨域名跨路径使用
import requests
from requests.cookies import RequestsCookieJar

jar = RequestsCookieJar()
jar.set("BAIDUID", "4EDT7A5263775F:FG=1", domain="httpbin.org")
jar.set("TOKEN", "1234567890", domain="httpbin.org")
r = requests.get('http://httpbin.org/cookies', cookies=jar)
print(r.cookies)
评论0