Python发送post请求的三种入参-文件、base64、普通入参

作者: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)
原文地址:https://www.cnblogs.com/ustcinfo-qc/p/13879335.html