Python之requests模块

Requests库

import requests

通过查看源码,可以发现,当我们import了requests后, requests会再去import很多方法和属性。

from . import utils

from . import packages

from .models import Request, Response, PreparedRequest

from .api import request, get, head, post, patch, put, delete, options

from .sessions import session, Session

from .status_codes import codes

from .exceptions import ( RequestException, Timeout, URLRequired, TooManyRedirects, HTTPError, ConnectionError, FileModeWarning, ConnectTimeout, ReadTimeout)

请求

通过session.Session()获得一个request对象,进而通过调用request对象的方法,发送请求。

requests.request(method, url, params, data, json, headers, cookies, files, auth, timeout, allow_redirects, proxies, stream, verify, cert)

通用请求方法。其他具体请求方法(get()、post ()等)本质上是调用这个方法。返回一个Repsonse对象

  • method

    http请求方法的字符串

  • url

    要请求的url地址

  • params

    (可选)传入一个字典。用于提供get方法的url参数

  • data

    (可选)用于POST方法的请求pody: 1.传入字典或二元组列表,作为HTML表单。 2.传入字符串,直接发送字符串数据。

  • json

    (可选)传入一个字典。可以直接转换成json字符串。自动添加请求头’Content-Type’: ‘application/json’

  • headers

    (可选)传入一个字典,设置http请求头

  • cookies

    (可选)设置http请求的cookies 可传入字典 可传入cookieJar对象

  • files

    (可选)实现http文件上传请求。传入一个特定格式的字典。可以进一步了解。

  • auth

    (可选)用于http认证。传入二元组(username,password)或auth对象。

  • timeout

    (可选)传入浮点型或者二元组(connect time,read time)设置http等待响应超时时间。单位为秒。

  • allow_redirects

    (可选)传入一个布尔值,设置允许http重定向。默认为True。

  • proxies

    (可选)设置http代理。参考http://cn.python-requests.org/zh_CN/latest/user/advanced.html#proxies

  • stream

    (可选)传入一个布尔值,默认为False。如果设置为True,可以流式获取http响应。参考http://cn.python-requests.org/zh_CN/latest/user/advanced.html#body-content-workflow

  • verify

    (可选)用于https证书验证

  • cert

    (可选)设置https的ssl证书。

requests.get()

requests.post()

requests.put()

requests.delete()

requests.options()

requests.head()

requests.patch()

响应

请求完成会获得一个Response对象。可以通过使用这个对象获得http响应的信息,还可以获得http请求的信息。

属性

  • status_code

    int类型。http响应码

  • reason

    string类型。http的响应状态(OK、Not Found等)

  • headers

    字典类型。http响应头。

  • url

    string类型。响应的最终URL

  • history

    一个Response对象的list。存放所有重定向的历史响应内容。

  • cookies

    cookieJar对象类型,类似字典。存放相应的cookies。

  • elapsed

    datetime.timedelta对象。记录发送到响应到达需要的时间。

  • encoding

    string类型。设置response.text的编码方式。

  • raw

    以流式获取响应内容。使用raw属性需要在请求时设置stream=True。

  • request

    响应对应的request。本质上是PreparedRequest对象。

    • method

      http请求方法。

    • url

      请求的url地址。

    • headers

      http请求头的字典。

    • body

      http请求的body字符串。

    • hooks

属性方法

  • ok

    判断请求状态。如果响应码<400,则返回True。否则返回False。

  • is_redirect

    返回布尔值,判断本次请求是否被重定向。

  • is_permanent_redirect

    判断本次请求是否被永久重定向。

  • content

    bytes类型。http响应的body。

  • text

    string 类型。 经过encoding的content。request会使用chardet库,猜测encode方式。

  • apparent_encoding

    string类型。request猜测的encode方式。

  • links

    http响应头中的link。

  • next

    如果存在重定向请求,则为重定向链中的下一个请求返回PreparedRequest对象。

方法

  • json()

    将json格式的响应body解析成字典。可以传入json.loads函数中的参数,底层调用json.loads()。

  • raise_for_status()

    判断响应码,如果不小于400,抛出HTTPError。

  • iter_content(chunk_size, decode_unicode)
  • iter_lines(chunk_size, decode_unicode, delimiter)
  • close()

    释放http连接。执行后,无法通过raw流式获取响应body。该函数通常不用显示调用。

会话

使用一个Session实例对象,创建多个request请求。可以实现跨请求保持参数(headers、cookies等)。

设置默认参数

requests.Session()获得一个session对象。通过给对象的属性赋值,可以设置默认参数。

  • headers
  • auth
  • proxies
  • hooks
  • params
  • stream
  • verify
  • cert
  • max_redirects
  • cookies

发送请求

和直接发送request请求的方法相同。requests.request()函数,本质上就是调用Session对象中的方法。

  • request()
  • get()
  • post()
  • delete()
  • options()
  • head()
  • patch()
  • put()

其他的方法

  • prepare_request(request)

    在正式发起请求前做一些准备工作。传入一个request对象。返回一个PreparedRequest对象。

  • send(preparedrequest)

    正式发送请求。传入一个PreparedRequest对象。返回Response对象。

响应码

Requests附带了一个内置的状态码查询对象:requests.codes.xxx。

异常

requests库实现了一些http相关的异常类型。包括错误和警告。

RequestException

  • HTTPError
  • ConnectionError

    • ProxyError
    • SSLError
  • Timeout

    • ConnectTimeout
    • ReadTimeout
  • URLRequired
  • TooManyRedirects
  • MissingSchema
  • InvalidSchema
  • InvalidURL
  • InvalidHeader
  • ChunkedEncodingError
  • ContentDecodingError
  • StreamConsumedError
  • RetryError
  • UnrewindableBodyError

RequestsWarning

  • FileModeWarning
  • RequestsDependencyWarning