一、requests

1、GET   url带参数请求

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get("http://httpbin.org/get", params=payload)

2、定制请求头

如果你想为请求添加 HTTP 头部,只要简单地传递一个 dict 给 headers 参数就可以了。

例如,在前一个示例中我们没有指定 content-type:

>>> url = 'https://api.github.com/some/endpoint'
>>> headers = {'user-agent': 'my-app/0.0.1'}>>> r = requests.get(url, headers=headers)

3、更加复杂的POST请求

通常,你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式:

>>> payload = {'key1': 'value1', 'key2': 'value2'}>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print(r.text)
{..."form": {"key2": "value2","key1": "value1"},...
}

你还可以为 data 参数传入一个元组列表。在表单中多个元素使用同一 key 的时候,这种方式尤其有效:

>>> payload = (('key1', 'value1'), ('key1', 'value2'))
>>> r = requests.post('http://httpbin.org/post', data=payload)
>>> print(r.text)
{..."form": {"key1": ["value1","value2"]},...
}

很多时候你想要发送的数据并非编码为表单形式的。如果你传递一个 string 而不是一个 dict,那么数据会被直接发布出去。

例如,Github API v3 接受编码为 JSON 的 POST/PATCH 数据:

>>> import json>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}>>> r = requests.post(url, data=json.dumps(payload))

>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}>>> r = requests.post(url, json=payload)

二、响应

1、相应内容

>>> import requests
>>> r = requests.get('https://api.github.com/events')
>>> r.text
u'[{"repository":{"open_issues":0,"url":"https://github.com/...

Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。

你可以找出 Requests 使用了什么编码,并且能够使用r.encoding 属性来改变它:

>>> r.encoding
'utf-8'
>>> r.encoding = 'ISO-8859-1'

2、二进制相应内容

你也能以字节的方式访问请求响应体,对于非文本请求:
>>> r.content
b'[{"repository":{"open_issues":0,"url":"https://github.com/...

3、Json相应内容

Requests 中也有一个内置的 JSON 解码器,助你处理 JSON 数据:

>>> import requests>>> r = requests.get('https://api.github.com/events')
>>> r.json()
[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...

如果 JSON 解码失败, r.json() 就会抛出一个异常。例如,响应内容是 401 (Unauthorized),尝试访问 r.json() 将会抛出 ValueError: No JSON object could be decoded 异常。

需要注意的是,成功调用 r.json() 并不意味着响应的成功。有的服务器会在失败的响应中包含一个 JSON 对象(比如 HTTP 500 的错误细节)。这种 JSON 会被解码返回。要检查请求是否成功,请使用 r.raise_for_status() 或者检查 r.status_code 是否和你的期望相同。

4、响应状态码

我们可以检测响应状态码:

>>> r = requests.get('http://httpbin.org/get')
>>> r.status_code
200

>>> r.status_code == requests.codes.ok
True

5、响应头

我们可以查看以一个 Python 字典形式展示的服务器响应头

>>> r.headers
{'content-encoding': 'gzip','transfer-encoding': 'chunked','connection': 'close','server': 'nginx/1.0.4','x-runtime': '148ms','etag': '"e1ca502697e5c9317743dc078f67693f"','content-type': 'application/json'
}

三、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"}}'

四、错误与异常

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

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

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

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

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

转载于:https://www.cnblogs.com/jiahuifeng/p/10244741.html

python常用模块之requests相关推荐

  1. Python 常用模块大全

    Python 常用模块大全(整理) OS 模块 #os模块就是对操作系统进行操作,使用该模块必须先导入模块: import os #getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在 ...

  2. 实战篇一 python常用模块和库介绍

    # -_-@ coding: utf-8 -_-@ -- Python 常用模块和库介绍 第一部分:json模块介绍 import json 将一个Python数据结构转换为JSON: dict_ = ...

  3. python常用模块大全总结-常用python模块

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. python常用模块什么是模块? 常见的场景:一个模块就是一个包含了py ...

  4. 对于python来说、一个模块就是一个文件-python常用模块

    python常用模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用pyt ...

  5. python常用模块之shelve模块

    python常用模块之shelve模块 shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型 我们在上面讲json.pickle ...

  6. Python常用模块——目录

    Python常用模块学习 Python模块和包 Python常用模块time & datetime &random 模块 Python常用模块os & sys & sh ...

  7. Python常用模块集锦

    常用模块主要分为以下几类(缺失的后续再补充): 时间转换 时间计算 序列化和反序列化:json,pickle 编解码:unicode,base64 加解密:md5,sha1,hmac_sha1,aes ...

  8. Python+常用模块(2).md

    Python 常用模块 1. random模块 1.1 导入模块 import random 1.2 random.random() 生成一个从0到1的随机浮点数 1.3 random.uniform ...

  9. python用什么来写模块-Python常用模块——模块介绍与导入

    Python常用模块--模块介绍与导入 一.什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分 ...

最新文章

  1. Mac系统的JDK8默认安装路径
  2. 触摸屏中文软件_八招轻松搞定西门子软件安装!
  3. MCU VR班會(06)記錄
  4. (软件工程复习核心重点)第五章详细设计-第三节:过程设计工具
  5. 【官方搭建入门】JEEWX 捷微开发环境搭建必读
  6. 数字图像处理 阈值分割 MATLAB实验
  7. python实时监控文件目录_c#教程之c#使用filesystemwatcher实时监控文件目录的
  8. [转]Mac OS X 下部分Android手机无法连接adb问题之解决方案
  9. 一道快手面试题,击败了100%用户
  10. 谈谈一些有趣的CSS题目(十一)-- reset.css 知多少?
  11. hibernate 批量插入数据
  12. Macbook变速播放视频
  13. 多商户Saas模式云进销存系统,源码分享
  14. PING用一生诠释了TCP/IP(4)------二三层转发为PING劈荆斩棘
  15. 从排序数组中删除重复项-Python-LeetCode
  16. Python_RuntimeError问题的解决
  17. iPad越狱失败 越狱恢复
  18. IAP15F2K61S2芯片引脚图
  19. SpringBoot中“Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datas
  20. SQL Server 管理套件(SSMS)

热门文章

  1. GoF--服务定位器模式
  2. BZOJ3057 圣主的考验
  3. Silverlight 数据库 - Silverlight Database
  4. 【新书推荐】机器学习算法竞赛实战,Kaggle Grandmaster倾力打造,涵盖Kaggle、天池等赛题...
  5. 720P实时超分和强悍的恢复效果:全知视频超分OVSR
  6. android滑屏设计规范,安卓设计如何实现滑动屏幕出现如图的效果
  7. jsp为什么不加虚拟路径都能访问_JavaWeb学习笔记一(环境配置/jsp基本介绍)
  8. Python中的实用小技巧,可以省下不是事情,喜欢记得收下
  9. 最多开启多少个线程_中国到底有多少个海岛?全球海岛最多国家,我国排第几?...
  10. 图机器学习有多大神力?一文带你回顾2020,展望2021