作者:cao.dingzheng
post是常见的http请求方式之一,而post常见的http请求入参方式一般有文件入参、包含base64编码的json入参、普通入参。这里就针对这三种常见入参方式进行Python的requests库post请求展示。
在http协议中,post提交的数据必须放在消息主体中,但是协议中并没有规定必须使用什么编码方式,从而导致了提交方式的不同。服务端根据请求头中的content-type字段来获知请求中的消息主体是用何种方式进行编码,再对消息主体进行解析。这里主要针对于下面两种编码方式:
- application/json :以json串提交数据。
- multipart/form-data:上传文件。
第一种请求入参:普通入参。这里展示了文字入参方法,也有如果想要对展示的结果utf-8编码格式进行转换。
#coding=utf-8 import requests url = '请求地址' header = {'content-type':'application/json'} t = "心灵安顿了,平衡了,生命也就快乐了,无憾了,如眼前一幅静美的画卷,清幽,温馨与宁静。" data = {"text":t} #这里需要注意data和json的区别 response = requests.post(url=url,headers=header,json=data) #对请求结果进行编码转换,转换成汉字 request = response.text.encode('utf-8').decode('unicode_escape') #不转换返回的结果 print(response.text) #转换后返回的结果 print(request)
返回结果为:
{"value":{"u60c5u611fu503eu5411":"u6b63u5411","u6d88u6781u6982u7387":9.72836e-06,"u79efu6781u6982u7387":0.99999,"u8f93u5165u6587u672c":"u5fc3u7075u5b89u987fu4e86uff0cu5e73u8861u4e86uff0cu751fu547du4e5fu5c31u5febu4e50u4e86uff0cu65e0u61beu4e86uff0cu5982u773cu524du4e00u5e45u9759u7f8eu7684u753bu5377uff0cu6e05u5e7duff0cu6e29u99a8u4e0eu5b81u9759u3002"}} {"value":{"情感倾向":"正向","消极概率":9.72836e-06,"积极概率":0.99999,"输入文本":"心灵安顿了,平衡了,生命也就快乐了,无憾了,如眼前一幅静美的画卷,清幽,温馨与宁静。"}} Process finished with exit code 0
第二种请求入参:将图片转换成base64格式并且进行json入参。
# coding=utf-8 import requests,base64 photo = r'D: estwjj.jpg'#图片路径 with open(photo,'rb') as f: base64_data = base64.b64encode(f.read()) s = base64_data.decode() url = '请求url'#请求地址 data = {"imageBase64": s} header = {'Content-Type': 'application/json'} response = requests.post(url=url,headers=header,json=data) print(response.text)
第三种请求入参:带文件入参,如csv,txt,zip等。
# coding=utf-8 mport requests from requests_toolbelt.multipart.encoder import MultipartEncoder filename = r'D: estOLT_DEMO.csv' file = open(filename,'rb') url = '请求地址' data = MultipartEncoder( fields={ 'OLT_INFO': ('OLT_DEMO.csv', file, 'application/octet-stream') } ) header={} header['content-type'] = data.content_type response = requests.post(url=url,headers=header,data=data) print(response.text)