python如何调用接口,python怎么写接口给别人调用
本文主要介绍如何用Python编写接口和请求外部接口。请求库请求外部接口,根据请求方法分为get请求和post请求。让我们和边肖一起走进这篇文章,了解更多的具体内容。
00-1010 I .介绍请求库II。获取请求III。以表格形式提交。用json字符串III提交。上传文件。总结
目录
Python通过请求库请求接口,因此您需要首先通过pip安装请求库。
pip安装请求==2.21.0
#仅使用文件上传。
pip安装请求-工具带==0.9.1
说明:写的界面使用Flask框架。请参考烧瓶框架的使用。
一、引入requests库
以微信授权的接口为例。
接口文档如下:
这是Get请求的接口,返回类型是application/json。
所以请求的代码是:
#导入库
导入请求,json
URL= https://API . weixin . QQ.com/CGI-bin/token? grant _ type=client _ credential appid=123 secret=345
#请求接口
res=requests.get(url)
#编码返回的内容
content=RES . content . decode( utf-8 )
#反序列化json字符串
tokenJson=json.loads(内容)
access _ token=token JSON[ access _ token ]
代码解释:
Res=请求。Get(url)是发起一个Get请求,得到响应值。content=res.content . decode( UTF-8 )因为RES . content的默认类型是字节,所以需要解码并转换为str类型。只有转换后才能正确反序列化。TokenJson=json.loads(content)是Json字符串到字典的反向序列。这个对象是一个字典,Python与JSON的数据类型对应关系如下图所示:.
4.access_token=Token JSON[ Access _ Token ]获取密钥为Access _ Token的令牌值。
二、Get请求
Post请求方法也是一种很常见的请求方法。
Post请求的请求类型有三种:
application/x-www-form-urlencoded这是以表单形式提交post请求。应用/
json;charset=utf-8 这是以json字符串的格式,将请求参数放在RequestBody
中的方式。
form-data
这种方式一般是用来上传文件用的。下面分别就这三种请求方式来编写请求代码
1.以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中进行传入就可以了。这里传入了一个名为dst_audio的参数。不需要设置Content-Type
。
如果我们的请求的接口的域名是https的地址的话,直接这样写的话会报SSLError: HTTPSConnectionPool
的问题。
解决的方法是:
res = requests.post(url, data=data, verify=False)
将verify
参数设置为False
。也就是不检查SSL证书。
接收方:
@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框架的一个函数。
2.以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, timeout=10)
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
指定请求头。timeout 是指定超时时间是10秒
接收方:
@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}。
3.文件上传
请求方:
from requests_toolbelt.multipart.encoder import MultipartEncoderdef post_form_data():
post_url = "http://127.0.0.1:8080/v1/ls/upload"
headers = {}
multipart_encoder = MultipartEncoder(
fields={
file: (os.path.basename(D:\\test.txt), 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中编写接口和请求外部接口内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。