除了requests.request()外,其余7个方法与http协议中的请求方法一一对应。阅读源码后,不难发现,这7个方法其实都是在调用requests.request()方法
参数 | 解释 |
method | 各种方法,比如get、options、head、post、put、patch、delete,当然也支持自定义扩展 |
url | 请求的url |
params | 请求携带的params |
data | 请求body中的data |
json | 请求body中的json格式的data |
headers | 请求携带的headers |
cookies | 请求携带的cookies |
files | 上传文件时使用 |
auth | 身份认证时使用 |
timeout | 设置请求的超时时间,可以设置连接超时和读取超时 |
allow_redirects | 是否允许重定向,默认True,即允许重定向 |
proxies | 设置请求的代理,支持http代理以及socks代理(需要安装第三方库"pip install requests[socks]") |
verify | 用于https请求时的ssl证书验证,默认是开启的,如果不需要则设置为False即可 |
stream | 是否立即下载响应内容,默认是False,即立即下载响应内容 |
cert | 用于指定本地文件用作客户端证书 |
属性或属性方法 | 解释 |
r.status_code | 响应的http状态码,比如404和200 |
r.headers | 响应头,可单独取出某个字段的值,比如(r.headers)['content-type'] |
r.raw | 原始响应,表示urllib3.response.HTTPResponse对象。使用raw时,要求在请求时设置“stream=True” |
r.url | 请求的最终地址 |
r.encoding | 要解码的r.text的编码方式 |
r.history | 请求的历史记录,可以用于查看重定向信息,以列表形式展示,排序方式是从最旧到最新的请求 |
r.reason | 响应状态的描述,比如 "Not Found" or "OK" |
r.cookies | 服务器发回的cookies,RequestsCookieJar类型 |
r.elapsed | 从发送请求到响应到达之间经过的时间量,可以用于测试响应速度。比如r.elapsed.microseconds表示响应到达需要多少微秒 |
r.request | PreparedRequest对象,可以用于查看发送请求时的信息,比如r.request.headers查看请求头 |
r.ok | 检查”status_code“的值,如果小于400,则返回True,如果不小于400,则返回False |
r.is_redirect | 判断是否重定向,返回True or False |
r.is_permanent_redirect | 判断是否永久重定向,返回True or False |
r.next | 返回重定向链中下一个请求的PreparedRequest对象 |
r.apparent_encoding | 用chardet库判断出的编码方式 |
r.content | 响应的内容,byte类型 |
r.text | 响应的内容,unicode类型 |
r.links | 响应的解析头链接 |
session对象能够让我们跨http请求保持某些参数,即让同一个session对象发送的请求头携带某个指定的参数
import requests
s = requests.Session()
# 第一步:发送一个请求,用于设置请求中的cookies
# tips: http://httpbin.org能够用于测试http请求和响应
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
# 第二步:再发送一个请求,用于查看当前请求中的cookies
r = s.get("http://httpbin.org/cookies")
print(r.text)
import requests
s = requests.Session()
//每次请求都会携带
s.headers.update({'x-test': 'true'})
# both 'x-test' and 'x-test2' are sent
#headers参数仅本次请求携带
r1 = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
print(r1.text)
# 'x-test' is sent
r2 = s.get('http://httpbin.org/headers')
print(r2.text)
import requests
s = requests.session()
#每次请求都携带cookie
s.cookies.update({'cookies_are': 'cookie'})
r = s.get(url='http://httpbin.org/cookies')
print(r.text)
import 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)
print(r.text)
requests还提供了RequestsCookieJar对象供我们使用,它的行为类似字典,但接口更为完整,适合跨域名跨路径使用
hook机制,让我们能够在请求得到响应之后去做一些自定义的操作
import requests
# 钩子函数1
def print_url(r, *args, **kwargs):
print("raw_url "+r.url)
# 钩子函数2
def change_url(r, *args, **kwargs):
r.url = 'http://change.url'
print("changed_url "+r.url)
return r # 其实没有这句话,也可以修改r.url,因为r是response对象而非普通数值,但requests官方似乎误认为回调函数一定要有return才能替换传入的数据
# tips: http://httpbin.org能够用于测试http请求和响应
url = 'http://httpbin.org/cookies'
response = requests.get(url, hooks=dict(response=[print_url, change_url]))
print("result_url "+response.url)