前言
---------2021年12月8日---------
HTTP协议中POST请求有4种方式,这里介绍两种
application/json
与application/x-www-form-urlencoded
前者是将JSON数据作为载荷发送给服务器,后者是直接发送一般类型的数据给服务器
知道这个之后你就能理解为什么我之前会出错了
起因
我需要编写一个用Python制作的登录脚本,但是得获取服务器反馈的JSON数据否则不知道是否成功。
我先用常规方法试了一下,下面是我的代码
import requests
url="网址"
header={"Host":"网址","User-Agent":"信息",}
data={"uid":"****","token":"*****"}
r=requests.post(url,data=data,headers=header)
#这里我是将payload定为data类型的
print(r.json())
然后服务器给我的反馈就是
{'data': None, 'message': 'invalid input format: invalid json value', 'retcode': -502}
#错误无法输出
于是我在网上找了各种各样的教程,一个接一个的都试了一遍,发现全部没用,最后我改了个参数,好了,一切正常了。
解法
import requests
url="网址"
header={"Host":"网址","User-Agent":"信息",}
data={"uid":"****","token":"*****"}
r=requests.post(url,json=data,headers=header)
#这里我将payload改为了json类型
print(r.json())
服务器反馈成功,没有报错
{'retcode': 0,
'message': 'OK',
'data': {'account': {'uid': '****', 'name': '',
'email': '****',
'mobile': '****',
'is_email_verify': '****',
'realname': '****',
'identity_card': '****',
'token': '****',
'safe_mobile': '****', 'facebook_name': '',
'google_name': '',
'twitter_name': '',
'game_center_name': '',
'apple_name': '',
'sony_name': '',
'tap_name': '',
'country': ''},
'device_grant_required': False,
'safe_moblie_required': False,
'realperson_required': False}}
问题解决