[关闭]
@songying 2017-12-20T22:58:51.000000Z 字数 2654 阅读 1205

requests库

python库


安装

  1. pip install requests

导入requests

  1. import requests

发送Http请求

  1. r = requests.get('url')
  2. r = requests.post('url')
  3. r = requests.put('url')
  4. r = requests.delete("url")
  5. r = requests.head("url")
  6. r = requests.options("url")

响应对象:Response

  1. r.text #
  2. r.encoding # 响应内容的编码,可以修改
  3. r.status_code # 查看响应报文的状态码
  4. r.url
  5. r.headers # 查看响应头
  6. r.headers['Content-Type']
  7. r.headers.get('content-type')

二进制响应内容

对于非文本请求,例如图片,视频等,你可以以字节的方式访问请求响应内容。

Requests 会自动为你解码 gzipdeflate 传输编码的响应数据。

  1. r.content # 以二进制的响应输出内容,适合图片,视频

JSON响应内容

有时我们请求的是一个JSON文件,这个时候我们需要使用解析文件

  1. r.json() # 如果 JSON 解码失败, r.json() 就会抛出一个异常。

原始响应内容?

  1. r = requests.get('https://github.com/timeline.json', stream=True)
  2. r.raw # 获取来自服务器的原始套接字响应,请你确保在初始请求中设置了 stream=True

HTTP GET

基本的Get请求

  1. r = requests.get("url")

url中添加请求参数

GET请求中添加请求头部

  1. headers = {'content-type': 'application/json'}
  2. r = requests.get("http://httpbin.org/get", params=payload, headers=headers)

注意: 所有的 header 值必须是 string、bytestring 或者 unicode。


HTTP POST

基本POST请求:发送表单形式数据

注意,在POST请求中,我们是一定要有请求参数的,二Get中是不一定需要请求参数的。

  1. payload = {'key1': 'value1', 'key2': 'value2'}
  2. payload = (('key1', 'value1'), ('key1', 'value2'))
  3. response = requests.post("http://httpbin.org/post", data=payload)

传送JSON形式数据

  1. payload = {'some': 'data'}
  2. r = requests.post(url, data=json.dumps(payload))

传送文件

  1. files = {'file': open('filename', 'rb')}
  2. r = requests.post(url, files=files)

状态码

  1. r.status_code # 查看响应状态吗
  2. r.status_code = requests.codes.ok #查看状态码是否ok

如果请求失败(返回的状态码不是202),则可以用r.raise_for_status()来抛出异常。

  1. r.raise_for_status()
  2. Traceback (most recent call last):
  3. File "requests/models.py", line 832, in raise_for_status
  4. raise http_error
  5. requests.exceptions.HTTPError: 404 Client Error
  6. # 当返回状态码为200时,该函数返回为None

1. 发送Cookie

  1. cookies = dict(cookies_are='working')
  2. response = requests.get(url, cookies=cookies)

2.查看响应报文中的Cookie

  1. response.cookies['cookie_name']

重定向和请求历史

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

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

  1. response.history
  2. # 禁用重定向处理
  3. response = requests.get('http://github.com', allow_redirects=False)
  4. # 对HEAD启用重定向
  5. response = requests.head('http://github.com', allow_redirects=True)

超时

所有的生产代码都应该使用这一参数。如果不使用,你的程序可能会永远失去响应:

  1. requests.get('http://github.com', timeout=0.001)

timeout 并不是整个下载响应的时间限制,而是如果服务器在 timeout 秒内没有应答,将会引发一个异常.

错误和异常

  • 遇到网络问题(如:DNS 查询失败、拒绝连接等)时,Requests 会抛出一个 ConnectionError 异常。
  • HTTP 请求返回了不成功的状态码, Response.raise_for_status() 会抛出一个 HTTPError 异常。
  • 请求超时,则抛出一个 Timeout 异常。
  • 请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。
  • Requests显式抛出的异常都继承自 requests.exceptions.RequestException
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注