视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
python笔记8:requests模块
2020-11-27 14:13:55 责编:小采
文档


简介:

requests是python的一个http客户端库,跟urlib、urlib2类似,requests模块是基于urlib模块开发的,代码实现更为简洁。

模块安装:

pip install requests ,使用requests模块时直接import requests即可。

简单使用requests:

http协议的接口,请求方式分为get和post,这2种最为常用。请求参数常用的形式有key-value、json、文件上传、接口添加cookies、headers等操作。

get请求-url拼接参数:

import requests
url = 'http://127.0.0.1:5000/gettest?username=abc'
#返回结果类型是字符串:{"msg": "pass"}
res = requests.get(url).text

也可以使用.json(),返回结果类型是字典 (注:接口请求的返回值类型 与接口的返回定义类型有关)

#返回结果类型是字典:{'msg': 'pass'}
res_dic = requests.get(url).json()

get请求- 请求参数类型是key-value形式:

import requests
url = 'http://127.0.0.1:5000/gettest'
#请传参类型是 name=xxx&pwd=123456
data = {"username": "abc"}
#返回结果类型是str:{"msg": "pass"}
res = requests.get(url, data).text

也可以使用.json(),返回结果类型是字典?(注:接口请求的返回值类型 与接口的返回定义类型有关)

#返回结果类型是字典:{"msg": "pass"}
res_dic = requests.get(url, data).json()
get请求调用的接口实现如下:
 1 import flask
 2 from flask import request
 3 from flask import jsonify
 4 
 5 server = flask.Flask(__name__)
 6 @server.route('/gettest', methods=['get'])
 7 def test1():
 8 name = request.values.get('username')
 9 if name == 'abc':
10 #接口返回值类型为字典
11 res = {"msg": "pass"}
12 return jsonify(res)
13 else:
14 res = {'msg': "fail"}
15 return jsonify(res)
16 server.run(debug=True)
View Code

post请求 - url拼接参数

import requests
import json
url = 'http://127.0.0.1:5000/gettest?username=abc'
#返回结果类型是str:{"msg": "pass"}
res = requests.post(url).text
#可以通过json.loads将字符串(json串)转换为字典类型,方便取值操作
res_dic = json.loads(res)

也可以使用.json(),返回结果类型是字典?(注:接口请求的返回值类型 与接口的返回定义类型有关)

#返回结果类型为字典:{'msg': 'pass'},字典取值操作比较方法
res_dic = requests.post(url).json()

post请求 - 传参类型是key-value形式

import requests
import json
url = 'http://127.0.0.1:5000/gettest?username=abc'
data = {"username": "abc"}
#返回结果类型是str:{"msg": "pass"}
res = requests.post(url, data).text
#可以通过json.loads将字符串(json串)转换为字典类型,方便取值操作
res_dic = json.loads(res)

也可以使用.json(),返回结果类型是字典?(注:接口请求的返回值类型 与接口的返回定义类型有关)

#返回结果类型为字典:{'msg': 'pass'},字典取值操作比较方法
res_dic = requests.post(url, data).json()
post请求调用的接口实现如下:
 1 import flask
 2 from flask import request
 3 from flask import jsonify
 4 
 5 server = flask.Flask(__name__)
 6 @server.route('/gettest', methods=['post'])
 7 def test1():
 8 #request.values.get('xxx') 这种获取请求参数的方式,可以通过url拼接参数和key-value形式访问接口。
 9 name = request.values.get('username')
10 if name == 'abc':
11 #接口返回值类型为字典
12 res = {"msg": "pass"}
13 return jsonify(res)
14 else:
15 res = {'msg': "fail"}
16 return jsonify(res)
17 server.run(debug=True)
View Code

?post请求- 传参类型是json

import requests
url = 'http://127.0.0.1:5000/register'
data = {
 "username": "admin",
 "pwd": "123456",
 "c_pwd": "123456"
}
#json类型传参,post接口请求时,需要指明下请求参数是json类型,返回结果是字典:{'msg': 'ok'}
res = requests.post(url, json=data).json()
print(type(res), res)

?post请求- 传参类型是json,多层json嵌套

import requests
url = 'http://127.0.0.1:5000/register'
data = {
 "username": "admin",
 "pwd": "123456",
 "c_pwd": "123456",
 "items": {
 "id": 1,
 "age": 18,
 "sex": "man"
 }
}
#json类型传参,post接口请求时,需要指明下请求参数是json类型,返回结果是字典:{'msg': 'ok'}
res = requests.post(url, json=data).json()
post请求调用的接口,json传参,代码实现如下:
 1 import flask
 2 from flask import request
 3 from flask import jsonify
 4 
 5 server = flask.Flask(__name__)
 6 @server.route('/register', methods=['post'])
 7 def test1():
 8 #request.json,传参类型为json,返回结果类型为字典:{'pwd': '123456', 'username': 'asdf', 'c_pwd': '123456'}
 9 res_dic = request.json
10 username = res_dic.get('username')
11 pwd = res_dic.get('pwd')
12 c_pwd = res_dic.get('c_pwd')
13 if username and pwd and c_pwd:
14 if res_dic.get('username') == 'admin':
15 if res_dic.get('pwd') == res_dic.get('c_pwd'):
16 return jsonify({'msg': "ok"})
17 else:
18 return jsonify({'msg': "密码不一致"})
19 else:
20 return jsonify({'msg': "username不能注册"})
21 server.run(debug=True)
View Code

post请求 - 上传文件

import requests
url = 'http://127.0.0.1:5000/upload'
#上传接口请求数据,指定上传文件的路径
data = {"file_name": open('E:/python_workspace/base-code/asdf.txt', encoding='utf8')}
#post请求,请求参数类型是file,返回结果类型是字典
res = requests.post(url, files=data).json()
print(type(res), res)
post请求调用的上传接口,代码实现如下:
 1 import flask
 2 from flask import request
 3 from flask import jsonify
 4 import time, os
 5 from flask import send_from_directory
 6 #上传文件接口
 7 server = flask.Flask(__name__)
 8 @server.route('/upload', methods=['post'])
 9 def upload():
10 #获取请求参数,传参类型是file,返回结果类型是一个对象:<class 'werkzeug.datastructures.FileStorage'> <FileStorage: '新建文本文档.txt' ('text/plain')>
11 file = request.files.get('file_name', None)
12 #判断file是否为空,若为空则没有上传文件
13 if file:
14 cur_time = time.strftime('%Y%m%d%H%M%S') #获取当前时间
15 upload_name = file.filename #获取上传文件的名称
16 new_file_name = cur_time+upload_name #给文件重命名,防止有重复文件覆盖
17 # 保存文件,指定文件上传的路径
18 file.save('E:/python_workspace/base-code/'+new_file_name)
19 return jsonify({"code": "ok"})
20 else:
21 return jsonify({"code": "请上传文件"})
22 
23 if __name__ == '__main__':
24 server.run(debug=True)
View Code

post请求 - 添加cookies

import requests
url = 'http://127.0.0.1:5000/set_cookies'
data = {"username": "xiaobai", "monkey": "999"}
#请求cookie参数
cookie = {"token": "123456"}
#接口请求,返回结果类型是字典:{'msg': 'ok'}
res = requests.post(url, data=data, cookies=cookie).json()
print(type(res), res)
post请求调用的添加cookie接口,代码实现如下:
 1 import flask
 2 from flask import request
 3 from flask import jsonify
 4 server = flask.Flask(__name__)
 5 @server.route('/set_cookies', methods=['post'])
 6 def set_cookies():
 7 print('获取到的cookie:', request.cookies) #{'token': '123456'}
 8 print('获取到的请求数据:', request.values) # CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([('monkey', '999'), ('username', 'xiaobai')])])
 9 token = request.cookies.get('token')
10 if token:
11 return jsonify({"msg": "ok"})
12 else:
13 return jsonify({"msg": "没有添加cookie"})
14 
15 if __name__ == '__main__':
16 server.run(debug=True)
View Code

?post请求- 添加headers

import requests
header_url = 'http://127.0.0.1:5000/set_headers'
data = {"username": "123456", "monkey": "666"}
#添加header信息
header = {'Content-Type': "application/json"}
#接口请求
res = requests.post(header_url, data, headers=header).json()

欢迎评论~~~

?

下载本文
显示全文
专题