python使用requests POST提交一个键多个值方式

python使用requests POST提交一个键多个值方式

目录

使用requests POST提交一个键多个值

问题

解决方法

requests库的post请求4种类型参数

1、application/x-www-form-urlencoded数据格式

2、application/json数据格式 

3、text/xml数据格式

4、multipart/form-data数据格式

使用requests POST提交一个键多个值 问题

在使用POST提交数据时,想实现下面这种情况:

requests.post(url, data={'interests':'football','interests':'basketball'})

用这种方式肯定是错误的,因为字典中的key是唯一的。

解决方法

使用元组列表

代码如下:

import requests url = 'http://httpbin.org/post' r = requests.post(url, data=[('interests', 'football'), ('interests', 'basketball')]) r.json()['form'] requests库的post请求4种类型参数

用python来验证接口正确性,主要流程有:

1 设置url

2 设置消息头

3 设置消息体

4 获取响应

5 解析相应

6 验证数据

Content-Type的格式有四种:分别是application/x-www-form-urlencoded(这也是默认格式)、application/json、text/xml以及multipart/form-data格式。

1、application/x-www-form-urlencoded数据格式

请看代码:

datas = {'parameter1':'12345','parameter2':'23456'} r = requests.post('http://example.com',data=datas) print(r.content) print(r.status_code)

解说:Reqeusts支持以application/x-www-form-urlencoded数据格式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数即可。

2、application/json数据格式 


application/json格式的请求头是指用来告诉服务端post过去的消息主体是序列化后的 JSON 字符串。

请看带代码:

url = 'http://www.example/post' s = json.dumps({'key1': 'value1', 'key2': 'value2'}) r = requests.post(url, data=s) print (r.text)

区别:

这里我们可以发现Requests模拟post请求时,请求头格式为application/x-www-form-urlencoded与application/json的主要差别在于请求主体的构造格式(前者是键值对,后者是JSON串),前者直接用字典传入,后者用json.dumps()函数将字典转为JSON串即可。

3、text/xml数据格式

请看代码:

xml = """my xml""" headers = {'Content-Type': 'application/xml'} requests.post('http://www.example.com', data=xml, headers=headers)

或者把xml作为一个文件来传输:

import requests def request_ws(request): with open(archivo_request,"r") as archivo:     request_data = archivo.read() target_url = "http://127.0.0.1:8000/?wsdl" headers = {'Content-type':'text/xml'} data_response = requests.post(target_url, data=request_data, headers=headers) 4、multipart/form-data数据格式

除了传统的application/x-www-form-urlencoded表单,我们另一个经常用到的是上传文件用的表单,这种表单的类型为multipart/form-data,multipart/form-data主要用于文件上传,当我们使用它时,必须让 form表单的enctype 等于 multipart/form-data

直接来看一个请求示例,主要:

请看代码(实现上传本地的test.txt文件):

import requests  files = {"file": open("C:/Users/Administrator/Desktop/test.txt", "rb")} r = requests.post("http://httpbin.org/post", files=files)  print(r.text)

具体请看实际例子:

import requests import json # 设置URL url = "http://demo.9meikf.cn/usystem/auto/getAnswer.do" # 设置消息头 headers = {     "Cookie":"JSESSIONID=EA01FF2B025861F39E29712C97F7DF69;CASTGC=TGT-136-bLQMf0CAikK4BGaydOfIeKd6tWpZQEznJ2ZWdcVl9ofI4LiaQb-cas01.example.org",     "Content-Type":"application/json"     } # 设置消息体 data = {"companyId":"48622",         "nodeId":6,         "question":"不需要",         "templateId":"c6f5ad67fc2c11e8a11800163e086942"} # 获取相应 response=requests.post(url,headers=headers,data=json.dumps(data)) print("Status code:",response.status_code) print(response.text) # 解析相应 info=response.json() # 验证数据 assert str(info['answer'])=='reject'

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易知道(ezd.cc)。

推荐阅读

    opporeno8参数配置及价格

    opporeno8参数配置及价格,面部,亿元,Oppo的荣誉2020年1月4日,接近屏幕关闭传感器是否支持双卡:支持oppor11splus什么时候上市的Oppo R11S P

    魅蓝note6性能参数有哪些

    魅蓝note6性能参数有哪些,摄像头,蓝牙,魅蓝note6性能参数有哪些魅力蓝色Note6最好拍照。电池寿命更长。蓝色Note6使用高通 snapdragon 625

    设置总账参数|用友u8设置总账参数

    设置总账参数|用友u8设置总账参数,,1. 用友u8设置总账参数1、首先要点开数据权限控制设置;2、选择想要设置控制的单据;3、打开后看到左上角

    新闻人人网将提交IPO上市在今年六月

    新闻人人网将提交IPO上市在今年六月,,根据汤姆逊路透社IFR,中国社会娱乐网站千年橡互动计划在今年上半年在美国上市,募资5亿美元。 据了解,

    csgo参数设置|csgo怎么保存

    csgo参数设置|csgo怎么保存,,csgo怎么保存第一步下载csgo的官方版本。然后再下载一个5e对战平台,PS:5e的账号和csgo的账号不是一个账号。第

    移动apn设置|移动apn设置参数

    移动apn设置|移动apn设置参数,,移动apn设置参数1、打开手机系统设置界面应用,点击页面中的“移动网络”设置选项。2、进入移动网络设置页面

    均线最佳设置|均线最佳参数设置

    均线最佳设置|均线最佳参数设置,,1. 均线最佳参数设置所有指标包括kd macd均线,是根据已有价格计算得出,看指标落后于看价格分析,也就是k线。

    viv0nex参数配置|viv0x60参数

    viv0nex参数配置|viv0x60参数,,1. viv0nex参数配置运行内存:6GB机身容量:128GB电池类型:锂聚合物电池2. viv0x60参数没有15+256,所谓的15是内存