码迷,mamicode.com
首页 > 其他好文 > 详细

requests基础3

时间:2017-09-27 23:13:13      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:any   back   path   oss   div   sts   logs   注意   some   

Cookie

如果某个响应中包含一些 cookie,你可以快速访问它们:

>>> url = http://example.com/some/cookie/setting/url
>>> r = requests.get(url)

>>> r.cookies[example_cookie_name]
example_cookie_value

要想发送你的cookies到服务器,可以使用 cookies 参数:

>>> url = http://httpbin.org/cookies
>>> cookies = dict(cookies_are=working)

>>> r = requests.get(url, cookies=cookies)
>>> r.text
{"cookies": {"cookies_are": "working"}}

Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但界面更为完整,适合跨域名跨路径使用。你还可以把 Cookie Jar 传到 Requests 中:

>>> jar = requests.cookies.RequestsCookieJar()
>>> jar.set(tasty_cookie, yum, domain=httpbin.org, path=/cookies)
>>> jar.set(gross_cookie, blech, domain=httpbin.org, path=/elsewhere)
>>> url = http://httpbin.org/cookies
>>> r = requests.get(url, cookies=jar)
>>> r.text
{"cookies": {"tasty_cookie": "yum"}}

重定向与请求历史

默认情况下,除了 HEAD, Requests 会自动处理所有重定向。

可以使用响应对象的 history 方法来追踪重定向。

Response.history 是一个 Response 对象的列表,为了完成请求而创建了这些对象。这个对象列表按照从最老到最近的请求进行排序。

例如,Github 将所有的 HTTP 请求重定向到 HTTPS:

>>> r = requests.get(http://github.com)

>>> r.url
https://github.com/

>>> r.status_code
200

>>> r.history
[<Response [301]>]

如果你使用的是GET、OPTIONS、POST、PUT、PATCH 或者 DELETE,那么你可以通过 allow_redirects 参数禁用重定向处理:

>>> r = requests.get(http://github.com, allow_redirects=False)
>>> r.status_code
301
>>> r.history
[]

如果你使用了 HEAD,你也可以启用重定向:

>>> r = requests.head(http://github.com, allow_redirects=True)
>>> r.url
https://github.com/
>>> r.history
[<Response [301]>]

超时

你可以告诉 requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。基本上所有的生产代码都应该使用这一参数。如果不使用,你的程序可能会永远失去响应:

>>> requests.get(http://github.com, timeout=0.001)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
requests.exceptions.Timeout: HTTPConnectionPool(host=github.com, port=80): Request timed out. (timeout=0.001)

注意

timeout 仅对连接过程有效,与响应体的下载无关。 timeout 并不是整个下载响应的时间限制,而是如果服务器在 timeout 秒内没有应答,将会引发一个异常(更精确地说,是在timeout 秒内没有从基础套接字上接收到任何字节的数据时)If no timeout is specified explicitly, requests do not time out.

错误与异常

遇到网络问题(如:DNS 查询失败、拒绝连接等)时,Requests 会抛出一个 ConnectionError 异常。

如果 HTTP 请求返回了不成功的状态码, Response.raise_for_status() 会抛出一个 HTTPError异常。

若请求超时,则抛出一个 Timeout 异常。

若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。

所有Requests显式抛出的异常都继承自 requests.exceptions.RequestException 。

requests基础3

标签:any   back   path   oss   div   sts   logs   注意   some   

原文地址:http://www.cnblogs.com/StaYWARM/p/7604286.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!