在python中,能构造HTTP请求的库有很多,比如:
内置库:httplib,urllib2,http
第三方库:urllib3,requests,pyCurl
request库帮助文档:https://requests.readthedocs.io/zh_CN/latest/
get(url,params=,headers=,cookies=)
post(url,data/json=,headers,cookies=)
delete(url,headers=,cookies=,)
put(url,data=,headers,cookies=)
怎么构造请求体数据(HTTP协议第四部分的内容)
口诀1:params参数,如果传入的是字典,自动编码为表单。—一般get请求需要
口诀2:data参数,如果传入的是字典,自动编码为表单。
口诀3:data参数,如果传入的是字符串,按原格式直接发布出去。
口诀4:json参数,如果传入的是字典,自动编码为json字符串。
口诀5:json参数,如果传入的是字符串,按原格式基础上添加双引号发布出去。
口诀6:headers参数,传递的是字典格式
data=json.dumps(dictPayload) 等同于 json=dictPayload
requests 库响应消息体四种格式:
四种返回格式 说明 用处
r.text:文本响应内容 返回字符串类型 获取网页html时用
r.content:字节响应内容 返回字节类型 下载图片或文件时用
r.json():Json解码响应内容 返回字典格式 明确服务器返回json数据才能用
r.raw:原始响应内容 返回原始格式
有些同学(大约2%)可能requests发出的请求,fiddler抓不到,可以为请求方法添加proxies参数,它的值是一个字典。里面的value是fiddler代理和端口。
proxies = {
‘http’: ‘http://127.0.0.1:8888’,
‘https’: ‘http://127.0.0.1:8888’,
}
requests.你的请求方法(‘你的请求’,data=你的payload, proxies=proxies)
import requests
#1--访问百度首页
r1 = requests.get('http://www.baidu.com')
r1.encoding = 'utf-8' # 防止乱码
#print(r.text)
#2--教管系统(列出课程)
payload = {
'action':'list_course',
'pagenum':'1',
'pagesize':20
}
#r2 = requests.get('http://localhost:80/api/mgr/sq_mgr/?action=list_course&pagenum=1&pagesize=20 HTTP/1.1')
r2 = requests.get('http://localhost:80/api/mgr/sq_mgr/',params=payload)
#print(r2.text)
#3--教管系统(新增课程)
dict1 = {
'Content-Type':'application/x-www-form-urlencoded'
}
payload1 = {
'action':'add_course',
'data':'{ "name":"初中化学","desc":"初中化学课程","display_idx":"4"}'
}
r3 = requests.post('http://localhost:80/api/mgr/sq_mgr/ '
,headers = dict1,data = payload1
)
print(r3.text)