一、请求类型
requests支持restful规范的常用请求方式
restful规范的常用请求方式:
GET:读取
POST:新建
PUT:更新,通常是全部更新某资源
PATCH:更新(Update),通常是对资源的部分更新
DELETE:删除(Delete)
HEAD:获取某个资源的元数据(metadata)
OPTIONS:获取某个资源所支持的Request类型,
requests分别提供了相对应请求的调用方式:
import requests
if __name__ == '__main__':
# GET请求
r1 = requests.get('http://httpbin.org/get')
# POST请求
r2 = requests.post('http://httpbin.org/post')
# PUT请求
r3 = requests.put('http://httpbin.org/put')
# PATCH请求
r4 = requests.patch('http://httpbin.org/patch')
# DELETE请求
r5 = requests.delete('http://httpbin.org/delete')
# HEAD请求
r6 = requests.head('http://httpbin.org/head')
# OPTIONS请求
r7 = requests.options('http://httpbin.org/options')
二、请求参数
URL参数
如果想要在url后追加请求参数,如:在https://www.baidu.com/s
后追加wd=keyword&ie=utf-8
。可使用requests提供的params
关键字参数,该参数接收dict类型数据:
import requests
if __name__ == '__main__':
payload = {'wd': 'keyword', 'ie': 'utf-8'}
r = requests.get('https://www.baidu.com/s', params=payload)
print(r.url)
执行后,打印出:
https://www.baidu.com/s?wd=keyword&ie=utf-8
Process finished with exit code 0
如果某个url参数有多个值,可以使用dict属性赋予list类型的值:
import requests
if __name__ == '__main__':
payload = {'wd': ['keyword', 'sss'], 'ie': 'utf-8'}
r = requests.get('https://www.baidu.com/s', params=payload)
print(r.url)
输出:
https://www.baidu.com/s?wd=keyword&wd=sss&ie=utf-8
Process finished with exit code 0
值得注意的是,当dict字典某属性值为
None
时,组成的url会忽略该项参数。
例如,ie属性值为None
:
import requests
if __name__ == '__main__':
payload = {'wd': ['keyword', 'sss'], 'ie': None}
r = requests.get('https://www.baidu.com/s', params=payload)
print(r.url)
输出为:
https://www.baidu.com/s?wd=keyword&wd=sss
Process finished with exit code 0
可以看到,如果dict某属性值为None
,生成的url会自动忽略该项参数。
请求体参数
data关键字参数
上面介绍了附加在URL上的参数,此外还有放在请求体中发送的参数(该类型参数请求方式不可以为 GET
类型),requests提供了data关键字参数用于向请求体中填充请求数据。data取值可以为dict类型、元组类型、或者字符串类型。当data为dict类型时,会将dict解析为 key1=value1&key2=value2
的形式。若data为字符串类型,requests会向请求体中直接传入该串,省去了解析的过程。元组类型与dict不同的是可以传入多个相同的key,经常在表单中多个元素使用同一 key 的时候使用。
下面分别演示这三种形式。
- data关键字参数传入dict数据:
import requests
if __name__ == '__main__':
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)
执行后,通过fiddler拦截到该请求:
- data关键字参数传入字符串:
import requests
if __name__ == '__main__':
r = requests.post("http://httpbin.org/post", data='key1=value1&key2=value2')
执行后,通过fiddler拦截到该请求:
3.data关键字参数传入元组:
import requests
if __name__ == '__main__':
payload = (('key', 'value1'), ('key', 'value2'))
r = requests.post("http://httpbin.org/post", data=payload)
执行后,拦截到的请求:
json关键字参数
json关键字参数用法和data关键字参数用法类似,通过传入dict类型值。但不同的是,1、通过json关键字形式的请求在header头里会多出一个Content-Type: application/json
,用于表明这次请求的请求体内容是json形式;2、请求的请求体被处理为json格式。
import requests
if __name__ == '__main__':
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", json=payload)
执行后可以拦截到该请求信息: