本文主要介绍如何用Python编写接口和请求外部接口。请求库请求外部接口,根据请求方法分为get请求和post请求。让我们一起来看看边肖的文章,了解更多的细节。
一.请求库介绍。获取请求III。发布请求1。以表格2提交。以json字符串格式3提交。文件上传四。摘要
目录
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的方法。表单数据通常用于上传文件。
下面分别就这三种请求方式来编写请求代码
三、Post请求
请求方:
def post_form_urlencoded():
URL=' http://127 . 0 . 0 . 1:8080/v1/ls/voice/save '
data={ ' dst _ audio ':' 9d 62 ca 66-326 f-4070-9993-5f 89 f 790 DC 68 . wav ' }
res=requests.post(url,data)
content=RES . content . decode(' utf-8 ')
打印(内容)
表单形式提交的post请求只需要将请求参数封装到一个字典dict中并传入即可。这里传入了一个名为dst_audio的参数。不需要设置内容类型。
如果我们请求的接口的域名是https的地址,那么直接写的话就会报错SSLError: HTTPSConnectionPool的问题。
解决的方法是:
res=requests.post(url,data=data,verify=False)
将验证参数设置为False。也就是说,不检查SSL证书。
接收方:
@ma.route('/v1/ls/voice/save ',methods=['POST'])
定义保存():
group_uuid=uuid.uuid1()
dst _ audio=request . values . get(' dst _ audio ')
我的数据={
'视频标识':组标识
}
返回jsonify({'code': 0,' msg ':'成功保存',' data': json_data})
接收表单中的参数只需要通过request.values.get(参数名)获取即可。分别获得多个参数。Route定义接口的路由地址,methods属性指定接口的请求方法。jsonify函数将dict序列化为json字符串,这是flask框架的一个函数。
1.以form表单提交的方式
请求方:
def post_json():
URL=' http://127 . 0 . 0 . 1:8080/v1/ls/JSON '
x_header={
Content-Type“:”应用程序/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 ')
打印(内容)
对于application/json请求类型的接口,需要通过json.dumps方法将请求参数序列化为json字符串,然后在请求头中将Content-Type指定为application/Json;charset=utf-8 .
调用post方法requests.post (URL,data=body,headers=x _ header)。其中:data指定请求参数,headers指定请求头。超时是指定的10秒超时。
接收方:
@ma.route('/v1/ls/json ',methods=['POST'])
def post_json():
if request.method=='POST ':
json_data_str=request.get_data()。解码(“utf-8”)
JSON _ data=JSON . loads(JSON _ data _ str)
返回jsonify({'code': 0,' msg ':'请求成功',' data': json_data})
接收体中的参数只需要调用request.get _ data()。decode ('UTF-8 ')方法,这里必须解码,否则中文将被编码{'name':' \ U5F20 \ \ U4E09 ',' age': 12}。
2.以json字符串的格式来提交
请求方:
从requests _ tool belt . multipart . encoder导入MultipartEncoder
def post_form_data():
post _ URL=' http://127 . 0 . 0 . 1:8080/v1/ls/upload '
标题={}
多部分编码器=多部分编码器(
字段={
file ':(OS . path . basename(' D:\ \ test . txt ')、open('D:\\test.txt '、' rb ')、' application/octet-stream '),
文件名':'张三'
}
)
头[' 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 ')
打印(内容)
表单数据请求类型的接口通常是用于上传文件的接口。我们可以将参数封装到一个MultipartEncoder对象中,在字段中定义一个字典,并在这个字典中传递多个参数。file参数指定要上传的文件,文件的内容由open('D:\\test.txt ',' rb ')方法读取。并将请求类型指定为应用程序/八位字节流。是文件参数名,需要根据接口端的定义传入。
接收方:
@ma.route('/v1/ls/upload ',methods=['POST'])
def post_form_data():
temp _ file=request . files[' file ']
文件名=request.values.get('文件名')
file_path=os.path.abspath(' . '))'/' 'temp.txt '
临时文件保存(文件路径)
返回jsonify({'code': 0,' msg ':'请求成功',' data': file_path})
上传文件的接口通过request.files['file']的方式接收文件。
三个接口的请求结果如下图:
3.文件上传
详细介绍了如何在Python中通过requests库请求外部接口,根据请求方法分为get请求和post请求。根据请求类型,post可以分为application/x-www-form-urlencoded、application/json和form-data。这三种请求类似,只是参数不同。当请求类型为application/x-www-form-urlencoded时,请求参数封装在dict中并传入。当请求类型是application/json时,传入的请求参数需要一个json字符串。当请求类型是表单数据时,请求参数可以封装到MultipartEncoder对象中。
关于如何用Python编写接口和请求外部接口的这篇文章到此为止。关于用Python编写接口和请求外部接口的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。