-
python中能构造HTTP请求的库很多,如:
内置库:httplib、urllib2、http
第三方库:urllib3、requests、pyCutl -
requests库特点
简单易用、功能强大、可读性强 -
requestku安装
安装命令:pip install requests
或者从github上下载源码进行安装
或者用集成工具,如pycharm进行安装,也是可以的。 -
requests库帮助文档
网址http://cn.python-requests.org/zh_CN/latest/ -
请求方法对应的参数
| 参数\函数 | Get | Post | Put | Delete |
|---|---|---|---|---|
| url | 有 | 有 | 有 | 有 |
| params | 有 | |||
| data | 有 | 有 | 有 | |
| json | 有 | |||
| headers | 有 | 有 | 有 | 有 |
| cookies | 有 | 有 | 有 | 有 |
-
如何构造请求体数据
策略
参数|选择方法
-|-
params参数|如果传入的是字典,自动编码表单。---针对的是get方法
data参数| 如果传入的是字典,自动编码为表单。---针对的是post/put方法
data参数|如果传入的是字符串,按原格式直接发布出去。---针对的是post/put方法
json参数|如果传入的是字典,自动编码为json字符串。---针对的是post方法
json参数|如果传入的是字符串,按源哥是基础上添加双引号发布出去。---针对的是post方法
headers参数|传递的是字典格式---针对的是所有方法 -
根据接口文档囊怎么构造请求
1.如果是get请求,因为它只有一个params参数,所以根据口诀1构造请求就ok
2.如果似乎post或者put请求,口诀为:1看2找3构。
1看=看清楚接口文档content-type要求消息体为啥格式。表单格式还是json格式?
2找=根据1看,用看到的格式来找策略,策略主要是2、3(或6),找到对应的策略
3构=根据2找,找到的口诀来构造请求参数。
⚠️值得注意的是,注意字典中嵌套的字典,被嵌套的字典也可能被转换成表单
- 请求代码
import requests
r = requests.get('http://www.baidu.com/')
r.encoding="utf-8"
print(r.text)
import requests
# action=list_course&pagenum=1&pagesize=20
payload = {
'action':'list_course',
'pagenum':1,
'pagesize':20
}
# params会把字典中的参数变成表单格式放在url后面
r = requests.get('http://localhost:80/api/mgr/sq_mgr/',params=payload)
print(r.text)
import requests
header = {
"Content-Type":"application/x-www-form-urlencoded"
}
payload = {
'action':'add_course',
'data':{"name":"初中化学","desc":"初中化学课程","display_idx":"100"}
}
r = requests.post('http://localhost:80/api/mgr/sq_mgr/',headers=header,data=payload)
print(r.text)
#排错方式:
#如果报错可以使用fiddler抓包进行排错,将请求提复制到url解码器进行解码,然后到json格式化,进行格式化看是否会出错。第二种方式在网页发起请求,使用fiddler抓包
#然后逐项对比,将错误的头和正确的请求体,在fiddler中发起请求,看是否有错误。
import requests
header = {'Content-Type':'application/json'}
payload="""
{
"action" : "add_course_json",
"data": {
"name":"初中化学1",
"desc":"初中化学课程",
"display_idx":"98"
}
}
"""
r = requests.post('http://localhost:80/apijson/mgr/sq_mgr/',data=payload.encode('utf8'),headers=header)
print(r.text)
import requests
header = {'Content-Type':'application/json'}
payload={
"action" : "add_course_json",
"data": {
"name":"初中化学2",
"desc":"初中化学课程",
"display_idx":"98"
}
}
r = requests.post('http://localhost:80/apijson/mgr/sq_mgr/',json=payload,headers=header)
print(r.text)#文本相应内容获取网页html文档的时候用
#二进制的格式
print(r.content)#字节响应内容 下载图片或文件的时候用
print(r.raw)#原始格式
#如果r返回的不是json会报异常
#接口文档中写了,返回json格式的消息体,才能用json
print(r.json())#字典格式
- requests库响应消息体四种格式:
| 四种返回格式 | 说明 | 用处 |
|---|---|---|
| r.text:文本响应内容 | 返回字符串类型 | 获取网页html时用 |
| r.content:字节响应内容 | 返回字节类型 | 下载图片或文件时用 |
| r.json():Json 解码响应内容 | 返回字典格式 | 明确服务器返回json数据才能用 |
| r.raw:原始响应内容 | 返回原始格式 |














网友评论