通过代理地址发送以多部分表单数据格式(它要求post的消息体分多个部分(fields)发送,每个fields之间用自定义的且唯一的随机字符串boundary进行分割。)请求到远程服务器,并获取请求响应报文。建议先沟通开发确认分哪几个部分发送。该请求消息头中"Content-Type"字段为 "multipart/form-data; boundary=------HBmtFbelYio71LqQCanw3zfZAvs5U9c6"。用户可以根据需要新增请求头字段,只需传入请求头中待新增的除了'Content-Type'字段外的其他字段数据。
def client_post_mutipart_formdata_proxy_requests(self,request_url,requestdict,headerdict={},**kwargs):
#功能说明:通过代理地址发送以多部分表单数据格式(它要求post的消息体分多个部分(fields)发送,每个fields之间用自定义的且唯一的随机字符串boundary进行分割。)请求到远程服务器,并获取请求响应报文。建议先沟通开发确认分哪几个部分发送。该请求消息头要求为:{"Content-Type": "multipart/form-data; boundary=------HBmtFbelYio71LqQCanw3zfZAvs5U9c6"}。
#输入参数说明:接收请求的URL;多部分表单数据(字典的形式表示),例如:{'xmlhead':'123456','xmlbody':'123456'},对于不清楚数据名称的,建议先沟通开发人员进行确认;待添加到请求头中的字段值组成的字典,默认为{},表示不新增字段;http或者https请求代理地址组成的字典,格式例如为{'http': 'http://192.168.111.222:8888', 'https': 'http://192.168.333.444:8888'}。
#输出参数:请求响应报文
#by xiaocc[20180709]
m = MultipartEncoder(
fields=requestdict,
boundary='--'+''.join(random.sample(string.ascii_letters + string.digits, 32))
)
#从构造的请求报文文件中获取请求报文数据,请求报文格式商户前置系统要求"xmldata=报文数据"
head={'Content-Type': m.content_type}
print u'请求头待更新的数据:',headerdict,u'该数据类型为:',type(headerdict)
#比对输入的header与默认的head,根据输入要求更新请求头
if headerdict=='{}':#若未传入更新的请求头数据,则选择默认请求头
pass
elif type(headerdict) in (dict,): #若传入的更新的请求头数据为字典格式,则更新到默认请求头
for key in headerdict: #判断待添加到默认head中的键值对
head[key]=headerdict[key] #根据输入更新默认head数据
else:
logging.error(u'请确保输入的请求头更新数据格式为字典格式!' )
raise Exception
print '服务器接收请求报文的地址为:',request_url
print '客户端请求报文为(客户端 --> 服务器):
',m
proxyurl= kwargs['proxyurl']
print u'请求代理地址为:',proxyurl
#发送请求报文到服务端
r = requests.post(request_url,data=m,headers=head,proxies=proxyurl,verify=False)
print '请求headers为: ',r.request.headers
#获取请求响应报文数据
responsedata=r.text
print "get the status: ",r.status_code
print '服务器响应报文为(客户端 <-- 服务器): ',responsedata
#返回请求响应报文
return responsedata