今天快坑死我了,网上讲这个的特别少,难道大家都不用这个吗?废话不多说,上干货。
发送application/json数据
这个比较简单,我这里不需要什么headers 和cookie,需要的朋友去这里看:python requests 设置headers 和 post请求体x-www-form-urlencoded - 弃身锋刃 - 博客园
url_weather = "www.baidu.com/****" # 这就是你的请求路由
params = {
"a": {
"b":1
}
} # 这里就是你的json数据
data = requests.post(url_weather, json=params).text # 这样就可以发送给请求了,.text用来读取返回的数据的
发送application/x-www-form-urlencoded数据
url_weather = "http://" # 请求路由
requestdata = {"jsonString":'{"name":"%s","date":"%s","limit":%d}'%(city_name_dict[projectId],start_time,num)} # 关键都在这里了,一定要仔细看
data = requests.post(url_weather,data=requestdata).text
一定要仔细看这一段数据
{"jsonString":'{"name":"%s","date":"%s","limit":%d}'%(city_name_dict[projectId],start_time,num)}
1,这种类型的数据是form表单键和值都要变成字符串,值是字典的时候不能直接用str转字符串,虽然看上去是一样的
{"jsonString":str({"name":"%s","date":"%s","limit":%d})%(city_name_dict[projectId],start_time,num)}
2,这种可变参数的输入不能用format,因为这里的值是字典类型,本身就有一个{},会引起冲突。(这里懒得给format里的参数加key了,加了也不行)
{"jsonString":'{"name":"{}","date":"{}","limit":{}}'.format(city_name_dict[projectId],start_time,num)}
3,用requests.post请求的时候需要将数据传给data(上面的是传给json)
requests.post(url_weather,data=requestdata).text
2022-03-30补充说明
发现了一种发送application/x-www-form-urlencoded数据的另一种简介方便的方式
data_body_dict = {"a" :1, "b": 2}
requests.post(url, data=[("jsonString", json.dumps(data_body_dict))]) # data_body_dict就是请求所需字典数据