Request使用方法快速介绍
Request是第三方库,需要手动安装:
pip install requests
需要导入requests模块
import requests
Requests中文文档:http://docs.python-requests.org/zh_CN/latest/
这个文档看的话从哪看起呢,大家要有技巧,下面有目录(用户指南)这个地方,安装完成的话,这里有个快速上手。
大家如果以后看文档,有什么快速上手,通常可以先看它,像这种章节都是让你快速的了解下这个库的一些功能。常用的方法都卸载快速上手里面,怎么发送请求、传递URL参数、响应内容、定制请求头等等,下面介绍下怎么使用requests
库构建请求,接收响应
构建各种http请求
- http.get请求
requests.get('https://api.github.com/events')
比如列出课程的请求代码
import requests
host = 'localhost'
requests.get(f'http://{host}/api/mgr/sq_mgr/?action=list_course&pagenum=1&pagesize=20 ')
我们打开抓包工具Fiddler,然后运行代码,包就被Fiddler抓到了
image.png我们用python代码一样可以发请求。
- http.post请求
requests.post('http://httpbin.org/post', data = {'key':'value'})
- http.put请求
requests.put('http://httpbin.org/put', data = {'key':'value'})
- http.delete请求
requests.delete('http://httpbin.org/delete')
构建URL参数
有一点我们要注意的是URL参数,我们可以直接这样。
image.png直接写在里面没有关系。如果你觉得这种写法不是很清晰的话,你可以参照这种写法:
语法
payload = {'key1': 'value1', 'key2': 'value2'}
requests.get("http://httpbin.org/get", params=payload)
params参数接收的是一个字典,把URL参数去掉,把他定义在一个字典一样的数据结构里面。
比如说
import requests
host = 'localhost'
p1 = {
'action':'list_course',
'pagenum':'1',
'pagesize':'20'
}
requests.get(f'http://{host}/api/mgr/sq_mgr/',params=p1)
这样就可以了。
构建请求头
如果你想为请求添加 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)
假如说我们上面的请求还要有请求头的话,就是在底下再添加一个headers
参数
然后里面填上你所要带进去的请求头所对应的字典,比如例子里面就多了个user-agent
值是my-app/0.0.1
。
假如我想消息体头里面带上这两个参数'username':quanlei
和'password':111111
这两个参数,要怎么带上去?就根据例子写吧,就像这样子
import requests
host = 'localhost'
p1 = {
'action':'list_course',
'pagenum':'1',
'pagesize':'20'
}
h1 = {
'username':'quanlei',
'password':'111111'
}
requests.get(f'http://{host}/api/mgr/sq_mgr/',params=p1,headers=h1)
我们发送看一下请求消息是否带上这个消息头了。
image.png是不是就可以了,是不是很方便。
定制请求体
请求体类型:Content-Type: application/x-www-form-urlencoded
只需简单地传递一个字典给 data 参数
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print(r.text)
{
...
"form": {
"key2": "value2",
"key1": "value1"
},
...
}
我们以添加课程为例,因为他也是Content-Type: application/x-www-form-urlencoded(表单格式)
我们先看去以前的文章看下添加课程的接口文档:https://www.jianshu.com/p/b7125f62dd52
大家注意一下data
这个参数值
data 必填 存储创建课程的信息,包括名称、描述、显示次序。
为json格式。例如:{"name":"初中化学", "desc":"初中化学课程","display_idx":"4"
}
大家会说{"name":"初中化学", "desc":"初中化学课程","display_idx":"4" }
这不是json吗?json其实就是一个json格式的字符串。大家注意这里只是符合json格式的字符串。直接把内容传进去就行。
代码:
import requests
host = 'localhost'
h1 = {
'username':'quanlei',
'password':'111111'
}
payload = {
'action':'add_course',
'data':'''
{
"name":"万圣节",
"desc":"初中化学课程",
"display_idx":"4"
}'''
}
requests.post(f'http://{host}/api/mgr/sq_mgr/',headers=h1,data=payload)
抓包看一下,请求成功了
image.png这里我们可以看到抓包的内容POST
请求,url是http://localhost/api/mgr/sq_mgr/
这个,这里我们并没有指定消息头是www-form-urlencoded
,但是只要你有data
参数传入了一个字典,他就认为你消息体是www-form-urlencoded
格式。大家看下消息体
这就是www-form-urlencoded
格式中间用&
隔开,这里面的内容因为已经做了编码,如果想看里面的内容,点一下WebForms
因为你是form格式,他就会变成这种容易看的格式。
如果有请求的消息不是www-form-urlencoded
,比如是Json
格式呢,比如我们这里有个Json
格式添加课程的接口如下
请求语法
POST /apijson/mgr/sq_mgr/ HTTP/1.1
Content-Type: application/json
url请求参数
无url请求参数
请求体内容
{
"action" : "add_course_json",
"data" : {
"name":"初中化学",
"desc":"初中化学课程",
"display_idx":"4"
}
}
响应语法
HTTP/1.1 200 OK
Content-Type: application/json
头部信息
Content-Type 必填 正常情况下该值将被设为application/json,表示返回 JSON 格式的文本信息。
响应内容
如果请求成功,返回json格式的消息体,如下所示,retcode值为0表示添加成功
{
"retcode": 0
}
说明
增加课程的名称如果已经存在,则会创建失败返回结果为
{
"retcode": 2,
"reason": "同名课程已经存在"
}
请求体类型:Content-Type: application/json
可以将字典直接传递给json参数
payload2={
"action" : "add_course_json",
"data" : {
"name":"初中化学",
"desc":"初中化学课程",
"display_idx":"4"
}
}
resp=requests.post("http://localhost/apijson/mgr/sq_mgr/", json=payload2)
网友评论