requests基础3

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了requests基础3相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

C#-WebForm-★内置对象简介★Request-获取请求对象Response相应请求对象Session全局变量(私有)Cookie全局变量(私有)Application全局公共变量Vi(代码片段

[未解决问题记录]python asyncio+aiohttp出现Exception ignored:RuntimeError('Event loop is closed')(代码片段

推进学说代码片段

JSP基础

[vscode]--HTML代码片段(基础版,reactvuejquery)

Motan在服务provider端用于处理request的线程池