Python中如何编写接口,以及如何请求外部接口
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python中如何编写接口,以及如何请求外部接口,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4978字,纯文字阅读大概需要8分钟。
内容图文
您好,我是码农飞哥,感谢您阅读本文!本文主要介绍在Python中如何请求外部接口。
文章目录
引入requests库
Python是通过requests库来请求接口的,所以,首先需要通过pip安装requests库。
pip install requests==2.21.0
#文件上传才会用
pip install requests-toolbelt==0.9.1
说明:本文编写的接口用到的是Flask框架
Get请求
这里以微信授权的接口为例。接口文档如下;
这是一个通过Get方式请求的接口,返回类型是application/json
,所以请求的代码是:
# 引入库
import requests,json
url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + conf.WECHAT_APPID + "&secret=" + conf.WECHAT_APP_SECRET
# 请求接口
res = requests.get(url)
#对返回的内容进行编码
content = res.content.decode('utf-8')
#将json字符串反序列化
tokenJson = json.loads(content)
access_token = tokenJson['access_token']
代码解释:
res = requests.get(url)
就是发起Get请求,获取响应值。content = res.content.decode('utf-8')
因为res.content
默认的类型是bytes类型的,所以需要进行解码转成str类型。只有转化之后才能被正确的反序列化。tokenJson = json.loads(content)
就是将Json字符串反序列了成字典,这个对象是一个dictaccess_token = tokenJson['access_token']
获取key为access_token的token值。
Post请求
Post请求同样是一个非常常用的请求。Post请求。Post请求的编码方式有三种:
application/x-www-form-urlencoded
这是以form表单的方式来提交post请求。application/json;charset=utf-8
这是以json字符串的格式,将请求参数放在RequestBody中的方式。form-data
这种方式一般是用来上传文件用的。
下面分别就这三种请求方式来编写请求代码:
以form表单提交的方式
请求方
def post_form_urlencoded():
url = "http://127.0.0.1:8080/v1/ls/voice/save"
data = {"dst_audio": "9d62ca66-326f-4070-9993-5f89f790dc68.wav"}
res = requests.post(url, data)
content = res.content.decode('utf-8')
print(content)
以form表单提交的post请求,只需要把参数封装到一个字典dict中就可以了。不需要设置Content-Type。
接收方
@ma.route('/v1/ls/voice/save', methods=['POST'])
def save():
group_uuid = uuid.uuid1()
dst_audio = request.values.get('dst_audio') # 发音人
my_data = {
"video_id": group_uuid
}
return jsonify({'code': 0, 'msg': "保存成功", 'data': json_data})
接收Form表单中的参数只需要通过request.values.get(参数名) 来获取。多个参数分别获取。route表示接口的路由地址,
methods指定接口的请求方法。其中jsonify函数是将dict序列化成json字符串,是flask框架的一个函数。
以json字符串的格式来提交
请求方
def post_json():
url = "http://127.0.0.1:8080/v1/ls/json"
x_header = {
'Content-Type': 'application/json; charset=utf-8',
}
body = json.dumps({"name": "张三", "age": 12})
res = requests.post(url, data=body, headers=x_header)
content = res.content.decode('utf-8')
print(content)
以application/json方式请求的接口,需要将参数通过json.dumps
函数序列化成一个Json字符串,然后,在请求头中指定Content-Type为application/json; charset=utf-8
。
调用post方法requests.post(url, data=body, headers=x_header)
。其中,data 指定请求参数,headers指定请求头。
接收方
@ma.route('/v1/ls/json', methods=['POST'])
def post_json():
if request.method == 'POST':
json_data_str = request.get_data().decode('utf-8')
json_data = json.loads(json_data_str)
return jsonify({'code': 0, 'msg': "请求成功", 'data': json_data})
接收请求体中参数只需要调用request.get_data().decode('utf-8')
方法,这里必须要将其解码,不然,中文会被编码{"name": "\\u5f20\\u4e09", "age": 12}
文件上传
请求方
from requests_toolbelt.multipart.encoder import MultipartEncoder
def post_form_data():
post_url = "http://127.0.0.1:8080/v1/ls/upload"
headers = {}
multipart_encoder = MultipartEncoder(
fields={
'file': (open('D:\\test.txt', 'rb'), 'application/octet-stream'),
'file_name': '张三'
}
)
headers['Content-Type'] = multipart_encoder.content_type
post_response = requests.post(post_url, data=multipart_encoder, headers=headers, verify=False)
content = post_response.content.decode('utf-8')
print(content)
以form-data方式请求的接口,一般是文件上传的接口,我们可以将参数封装到MultipartEncoder对象中,在fields中定义一个字典,在这个字典中传入多个参数。其中 file 参数指定需要上传的文件,通过open('D:\\test.txt', 'rb')
方法读取文件的内容。并指定请求类型为application/octet-stream
。file是参数名称,需要按照接口方的定义传入。
接收方
@ma.route('/v1/ls/upload', methods=['POST'])
def post_form_data():
temp_file = request.files['file']
file_name = request.values.get('file_name')
file_path = os.path.abspath('.') + "/" + "temp.txt"
temp_file.save(file_path)
return jsonify({'code': 0, 'msg': "请求成功", 'data': file_path})
文件上传的接口接收文件是通过request.files['file']
方式来接收的。
三个接口的请求结果如下图:
总结
本文详细介绍了Python中通过requests库来请求外部接口,按照请求方法分为get请求和post请求。post请求的按照请求类型又分为application/x-www-form-urlencoded
,application/json
以及form-data
这三种。这三种的请求大同小异,只是传参不同而已,当请求类型是application/x-www-form-urlencoded
时请求参数封装到dict中传入,当请求类型是application/json
时传入的请求参数需要时一个json字符串。当请求类型是form-data
时,可以将请求参数封装到MultipartEncoder对象中。
内容总结
以上是互联网集市为您收集整理的Python中如何编写接口,以及如何请求外部接口全部内容,希望文章能够帮你解决Python中如何编写接口,以及如何请求外部接口所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。