设为首页 收藏本站
查看: 880|回复: 0

[经验分享] Python——Requests库的开发者接口

[复制链接]

尚未签到

发表于 2015-11-30 12:24:11 | 显示全部楼层 |阅读模式
  本文介绍 Python Requests 库的开发者接口,主要内容包括:
  目录
  一、主要接口
  1. requests.request()
  2. requests.head()、get()、post()、put()、patch()、delete()
  二、异常
  三、Request对象
  四、PreparedRequest对象
  五、Response对象
  六、Session
  七、HTTPAdapter
  八、认证
  九、编码
  十、状态码查询
  
  一、主要接口
  1. requests.request(method, url, **kwargs)
  构造并发送一个Request对象,返回一个Response对象。
  参数:


  • method – 新建 Request 对象要使用的HTTP方法
  • url – 新建 Request 对象的URL
  • params – (可选) Request 对象的查询字符中要发送的字典或字节内容
  • data – (可选) Request 对象的 body 中要包括的字典、字节或类文件数据
  • json – (可选) Request 对象的 body 中要包括的 Json 数据
  • headers – (可选) Request 对象的字典格式的 HTTP 头
  • cookies – (可选) Request 对象的字典或 CookieJar 对象
  • files – (可选) 字典,'name': file-like-objects (或{'name': ('filename', fileobj)}) 用于上传含多个部分的(类)文件对象
  • auth – (可选) Auth tuple to enable Basic/Digest/Custom HTTP Auth.
  • timeout (浮点或元组) – (可选) 等待服务器数据的超时限制,是一个浮点数,或是一个(connect timeout, read timeout) 元组
  • allow_redirects (bool) – (可选) Boolean. True 表示允许跟踪 POST/PUT/DELETE 方法的重定向
  • proxies – (可选) 字典,用于将协议映射为代理的URL
  • verify – (可选) 为 True 时将会验证 SSL 证书,也可以提供一个 CA_BUNDLE 路径
  • stream – (可选) 如果为 False,将会立即下载响应内容
  • cert – (可选) 为字符串时应是 SSL 客户端证书文件的路径(.pem格式),如果是元组,就应该是一个(‘cert’, ‘key’) 二元值对
  示例:



>>> import requests
>>> req = requests.request('GET', 'http://httpbin.org/get')
<Response [200]>

  
  2.  requests.head(url, **kwargs)
  发送一个 HEAD 请求,返回一个 Response 对象
  参数:


  • url – 新建 Request 对象的URL
  • **kwargs – 见 request 方法接收的可选参数
  
  3.  requests.get(url, **kwargs)
  发送一个 GET 请求,返回一个 Response 对象
  参数:


  • url – 新建 Request 对象的URL
  • **kwargs – 见 request 方法接收的可选参数
  
  4.  requests.post(url, data=None, **kwargs)
  发送一个 POST 请求,返回一个 Response 对象
  参数:


  • url – 新建 Request 对象的URL
  • data – (可选) Request 对象的 body 中要包括的字典、字节或类文件数据
  • **kwargs – 见 request 方法接收的可选参数
  
  5.  requests.put(url, data=None, **kwargs)
  发送一个 PUT 请求,返回一个 Response 对象
  参数:


  • url – 新建 Request 对象的URL
  • data – (可选) Request 对象的 body 中要包括的字典、字节或类文件数据
  • **kwargs – 见 request 方法接收的可选参数
  
  
  6.  requests.patch(url, data=None, **kwargs)
  发送一个 PUT 请求,返回一个 Response 对象
  参数:


  • url – 新建 Request 对象的URL
  • data – (可选) Request 对象的 body 中要包括的字典、字节或类文件数据
  • **kwargs – 见 request 方法接收的可选参数
  
  7.  requests.delete(url, **kwargs)
  发送一个 PUT 请求,返回一个 Response 对象
  参数:


  • url – 新建 Request 对象的URL
  • **kwargs – 见 request 方法接收的可选参数
  
  二、异常
  exception requests.RequestException
  处理你的请求时出现了一个有歧义的异常
  
  exception requests.ConnectionError
  连接异常
  
  exception requests.HTTPError(*args, **kwargs)
  HTTP 错误
  
  exception requests.URLRequired
  无效的请求 URL
  
  exception requests.TooManyRedirects
  重定向过多
  
  exception requests.exceptions.ConnectTimeout(*args, **kwargs)
  The request timed out while trying to connect to the remote server.
  Requests that produced this error are safe to retry.
  
  exception requests.exceptions.ReadTimeout(*args, **kwargs)
  The server did not send any data in the allotted amount of time.
  
  exception requests.exceptions.Timeout(*args, **kwargs)
  请求超时限制,Catching this error will catch both ConnectTimeout and ReadTimeout errors.
  
  
  三、Request 对象



requests.Request(method=None, url=None, headers=None, files=None, data={}, params={}, auth=None, cookies=None, hooks=None)
  由用户创建的 Request 对象,用来准备一个 PreparedRequest 对象,后者被发给服务器
  参数:


  • method – 要使用的 HTTP 方法
  • url – 目标 URL
  • headers – 字典,要发送的 HTTP header
  • files – 字典,形式为{filename: fileobject},表示要上传的多个部分
  • data – the body to attach the request. If a dictionary is provided, form-encoding will take place.
  • params – 字典,包含追加到 URL 后的 URL 参数
  • auth – Auth 句柄或 (user, pass) 元组
  • cookies – 附加到这个请求的字典或 CookieJar 对象的cookies
  • hooks – dictionary of callback hooks, for internal usage.
  示例:



>>> import requests
>>> req = requests.Request('GET', 'http://httpbin.org/get')
>>> req.prepare()
<PreparedRequest [GET]>
  方法:
  1.  register_hook(event, hook)
  注册一个事件钩子
  
  2.  deregister_hook(event, hook)
  撤销一个已经注册的 hook,如果 hook 存在则返回 True,否则返回 False
  
  3.  prepare()
  构造一个 PreparedRequest 对象用于传输,返回一个 PreparedRequest 对象
  
  四、PreparedRequest 对象
  class requests.PreparedRequest  
  完全可变的 PreparedRequest 对象,包含将会发送给服务器的字节,由 Request 或手动创建
  示例:



>>> import requests
>>> req = requests.Request('GET', 'http://httpbin.org/get')
>>> r = req.prepare()
<PreparedRequest [GET]>
>>> s = requests.Session()
>>> s.send(r)
<Response [200]>
  属性与方法:
  1.  body = None
  发送给服务器的请求 body
  
  2.  deregister_hook(event, hook)
  撤销一个已经注册的 hook,如果 hook 存在则返回 True,否则返回 False
  
  3.  headers = None
  由HTTP headers构成的字典  
  
  4.  hooks = None
  dictionary of callback hooks, 仅供内部使用
  
  5.  method = None
  HTTP 方法
  
  6.  path_url
  构造要使用的路径URL
  
  7.  prepare(method=None, url=None, headers=None, files=None, data=None, params=None, auth=None, cookies=None, hooks=None, json=None)
  用给定的参数准备整个请求
  
  8.  prepare_auth(auth, url='')
  准备给定的 HTTP 认证数据
  
  9.  prepare_body(data, files, json=None)
  准备给定的 HTTP body 数据
  
  10.  prepare_cookies(cookies)
  准备给定的 HTTP cookie 数据
  
  11.  prepare_headers(headers)
  准备给定的 HTTP headers
  
  12.  prepare_hooks(hooks)
  准备给定的 hooks
  
  13.  prepare_method(method)
  准备给定的 HTTP 方法
  
  14.  prepare_url(url, params)
  准备给定的 HTTP URL
  
  15.  register_hook(event, hook)
  适当地注册一个 hook
  
  16.  url = None
  将请求发往的 HTTP URL
  
  五、Response对象
  requests.Response
  Response 对象,包含一个服务器对与 HTTP 请求的响应
  
  属性与方法:
  1.  apparent_encoding
  The apparent encoding, provided by the lovely Charade library (Thanks, Ian!).
  
  2.  content
  以字节表示的响应内容
  
  3.  cookies = None
  一个服务器发回的 cookie 的 CookieJar
  
  4.  elapsed = None
  发出请求和接收到响应之间的时间间隔 (一个 timedelta)
  
  5.  encoding = None
  访问r.text时要以何种编码方式解码
  
  6.  headers = None
  大小写无关的响应头组成的字典,例如: headers['content-encoding'] 将会返回 'Content-Encoding' 响应头的值
  
  7.  history = None
  A list of Response objects from the history of the Request. Any redirect responses will end up here. The list is sorted from the oldest to the most recent request.
  
  8.  iter_content(chunk_size=1, decode_unicode=False)
  Iterates over the response data. This avoids reading the content at once into memory for large responses. The chunk size is the number of bytes it should read into memory. This is not necessarily the length of each item returned as decoding can take place.
  
  9.  iter_lines(chunk_size=512, decode_unicode=None)
  Iterates over the response data, one line at a time. This avoids reading the content at once into memory for large responses.
  
  10.  json(**kwargs)
  如果存在,返回JSON格式编码的响应内容
  参数:


  • **kwargs –  json.loads接受的可选参数
  
  11.  links
  Returns the parsed header links of the response, if any.
  
  12.  raise_for_status()
  Raises stored HTTPError, if one occurred.
  
  13.  raw = None
  File-like object representation of response (for advanced usage). Requires that ``stream=True` on the request.
  
  14.  status_code = None
  Integer Code of responded HTTP Status.
  
  15.  text
  uncode格式的响应内容
  如果 Response.encoding 是 None 且 chardet 模块可用,将会猜测响应的编码格式
  
  16.  url = None
  响应的最终URL地址
  
  六、Session 对象
  requests.Session
  一个 Requests 会话对象,提供 cookie 的存储,连接池和配置
  示例:



>>> import requests
>>> s = requests.Session()
>>> s.get('http://httpbin.org/get')
200
  
  属性与方法:
  1.  auth = None
  附加到 Request 对象上的默认认证元组或对象
  
  2. cert = None
  SSL 证书的缺省值
  
  3.  close()
  关闭所有的 adapters 和 session
  
  4.  delete(url, **kwargs)
  发送一个 DELETE 请求,返回 Response 对象
  参数:


  • url – URL for the new Request object.
  • **kwargs – 可选 arguments that request takes
  
  5.  get(url, **kwargs)
  发送一个 GET 请求,返回 Response 对象
  参数:


  • url – URL for the new Request object.
  • **kwargs – 可选 arguments that request takes.
  
  6.  get_adapter(url)
  返回给定URL的适当连接适配器
  
  7.  head(url, **kwargs)
  发送一个 HEAD 请求,返回 Response 对象
  参数:


  • url – 新 Request 对象的URL
  • **kwargs – 请求需要的可选参数
  
  8.  headers = None
  一个大小写不敏感的字典,包含了这个 Session 发出的所有 Request 对象都包含的 headers
  
  9.  hooks = None
  事件处理 hook
  
  10.  max_redirects = None
  最大重定向次数
  
  11.  mount(prefix, adapter)
  将一个连接适配器注册到一个前缀上
  
  12.  options(url, **kwargs)
  发送一个 OPTIONS 请求,返回 Response 对象
  参数:


  • url – URL for the new Request object.
  • **kwargs – 可选 arguments that request takes.
  
  13.  params = None
  Dictionary of querystring data to attach to each Request. The dictionary values may be lists for representing multivalued query parameters.
  
  14.  patch(url, data=None, **kwargs)
  发送一个 PATCH 请求,返回 Response 对象
  参数:


  • url – URL for the new Request object.
  • data – (可选) Dictionary, bytes, or file-like object to send in the body of the Request.
  • **kwargs – 可选 arguments that request takes.
  
  15.  post(url, data=None, **kwargs)
  发送一个 POST 请求,返回 Response 对象
  参数:


  • url – URL for the new Request object.
  • data – (可选) Dictionary, bytes, or file-like object to send in the body of the Request.
  • **kwargs – 可选 arguments that request takes.
  
  16.  proxies = None
  字典,将协议映射为每个Request使用的代理URL地址(例如: {‘http’: ‘foo.bar:3128’})
  
  17.  put(url, data=None, **kwargs)
  发送一个 PUT 请求,返回 Response 对象
  参数:


  • url – 新 Request 对象的 URL
  • data – (可选) Dictionary, bytes, or file-like object to send in the body of the Request.
  • **kwargs – 可选 arguments that request takes.
  
  18.  resolve_redirects(resp, req, stream=False, timeout=None, verify=True, cert=None, proxies=None)
  接受一个 Response,返回一个 Responses 的 generator
  
19.  send(request, **kwargs)
  发送一个给定的 PreparedRequest 对象
  
  20.  stream = None
  流式响应内容
  
  21.  trust_env = None
  是否信任环境
  
  22. verify = None
  SSL 验证的默认值
  
  七、HTTPAdapter
  class requests.adapters.HTTPAdapter(pool_connections=10, pool_maxsize=10, max_retries=0, pool_block=False)
  针对 urllib3 的内置 HTTP Adapter,通过实现传输适配器接口,为 session 和 HTTP、 HTTPS连接提供了一个通用的接口。该类的实例通常由内部包裹下的Session类创建。
  参数:


  • pool_connections – 缓存的 urllib3 连接池个数
  • pool_maxsize – 连接池中保存的最大连接数
  • max_retries (int) – 每次连接的最大失败重试次数,只用于 DNS 查询失败,socket 连接或连接超时,默认情况下 Requests 不会重试失败的连接,如果你需要对请求重试的条件进行细粒度的控制,可以引入 urllib3 的 Retry 类
  • pool_block – 连接池是否应该为连接阻塞
  示例:



>>> import requests
>>> s = requests.Session()
>>> a = requests.adapters.HTTPAdapter(max_retries=3)
>>> s.mount('http://', a)

  
  方法:
  1. add_headers(request, **kwargs)
  添加需要的 header,用户代码中不应该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
  参数:


  • request – 要添加 header 的 PreparedRequest 对象
  • kwargs – 同于调用 send() 时的关键字参数
  
  2. build_response(req, resp)
  从一个 urllib3 响应构建一个Response对象,用户代码中不该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
  参数:


  • req – 用于产生响应的 PreparedRequest 对象
  • resp – urllib3 响应对象
  
  3. cert_verify(conn, url, verify, cert)
  验证一个 SSL 证书,用户代码中不该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
  参数:


  • conn – 与证书相关的 urllib3 connection 对象
  • url – 被请求的 URL.
  • verify – 是否真的验证证书
  • cert – 要验证的 SSL 证书
  
  4.  close()
  处理掉所有的内部状态
  当前该方法仅仅关闭 PoolManager 进而断开池中的连接
  
  5.  get_connection(url, proxies=None)
  对于给定的URL,返回一个 urllib3 连接。 用户代码中不该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
  参数:
  url – 要连接的URL
  proxies – (可选) 一个 Requests 风格的字典,内容是此次请求使用的代理
  
  6.  init_poolmanager(connections, maxsize, block=False, **pool_kwargs)
  初始化一个 urllib3 PoolManager 实例
  用户代码中不该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
  参数:


  • connections – 要缓存的 urllib3 连接池的个数
  • maxsize – 连接池可容纳的最大连接数
  • block – 没有可用连接时就阻塞
  • pool_kwargs – 初始化 Pool Manager 的其他关键字参数
  
  7.  proxy_headers(proxy)
  Returns a dictionary of the headers to add to any request sent through a proxy. This works with urllib3 magic to ensure that they are correctly sent to the proxy, rather than in a tunnelled request if CONNECT is being used.
  用户代码中不该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
  参数:


  • proxies – 该请求使用的代理URL
  • kwargs – 可选的关键字参数
  
  8.  proxy_manager_for(proxy, **proxy_kwargs)
  返回给定代理的 urllib3 ProxyManager 对象,用户代码中不该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
  参数:


  • proxy – 要返回 urllib3 ProxyManager 的代理
  • proxy_kwargs – 用来配置Proxy Manager 的额外的关键字参数
  返回:
  ProxyManager
  
  9.  request_url(request, proxies)
  获取最后一个请求的url,如果消息是由HTTP代理发送的,则必须使用完整的URL,否则只需要使用URL的路径部分
  用户代码中不该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
  参数:


  • request – 要发送的 PreparedRequest 对象
  • proxies – A dictionary of schemes to proxy URLs.
  
  10.  send(request, stream=False, timeout=None, verify=True, cert=None, proxies=None)
  发送 PreparedRequest 对象,返回 Response 对象
  参数:


  • request – 要发送的 PreparedRequest 对象
  • stream – (可选) 是否 stream 请求的内容
  • timeout (float 或 tuple) –(可选) How long to wait for the server to send data before giving up, as a float, or a (connect timeout, read timeout) tuple.
  • verify – (可选) 是否验证 SSL 证书
  • cert – (可选) 可信任的用户提供的 SSL 证书
  • proxies – (可选) The proxies dictionary to apply to the request.
  
  八、认证
  class requests.auth.AuthBase
  所有认证的基类
  
  class requests.auth.HTTPBasicAuth(username, password)
  将 HTTP Basic Authentication 附加到给定的 Request 对象
  
  class requests.auth.HTTPProxyAuth(username, password)
  将 HTTP Proxy Authentication 附加到给定的 Request 对象
  
  class requests.auth.HTTPDigestAuth(username, password)
  将 HTTP Digest Authentication 附加到给定的 Request 对象
  
  九、编码
  requests.utils.get_encodings_from_content(content)
  返回给定内容的编码格式
  参数:


  • content – 要从中提取编码格式的 bytestring
  
  requests.utils.get_encoding_from_headers(headers)
  根据给定的 HTTP Header 字典返回编码格式
  参数:


  • headers – 要从中提取编码格式的字典
  
  requests.utils.get_unicode_from_response(r)
  以 unicode 返回响应内容
  参数:


  • r –  要从中提取编码格式的 Response 对象
  尝试:


  • content-type 里的字符集
  • fall back and replace all unicode characters
  
  十、状态码查询
  requests.codes()
  查询状态码字典中对应的键/值



>>> requests.codes['temporary_redirect']
307
>>> requests.codes.teapot
418
>>> requests.codes['\o/']
200

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145358-1-1.html 上篇帖子: python 判断操作系统类型 下篇帖子: 高级正则表达式技术(Python版)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表