requests里的post方法遇到的问题
这两个问题都是关于json在python中的使用时遇到的.
第一天遇到的问题:
下午遇到个问题,在添加课程时需要有token,所以我在setup里面些的登录的方法,这样获得token,然后在添加课程的方法里,把获得的token加到header里面.发现依然提示“Token not provided”
这是我在send post方法时遇到的,
payload={
……省略若干值对……
}
headers = {'Content-Type': "application/json",
'Authorization': token
}
r = requests.request('POST',url=url, data=json.dumps(payload), headers=headers)
print(r.text)
上面是修改调整后的代码,开始的代码是
r = requests.request('POST',url=url, data=payload, headers=headers)
执行后报”{"message":"422 Unprocessable Entity","errors":{"title":["The \u6807\u9898 field is required."],"………………
422--百度解释如下:
请求格式正确,但是由于含有语义错误,无法响应。(RFC 4918 WebDAV)
后面跟同事聊起这,发现payload有时不用转化成json---于是第二天的时候又去掉了json那里的转化.
第二天遇到的问题
使用requests的方法post来测试接口,同时使用参数化以减少代码量.
遇到的问题:继续上文的思路,使用登录的token,加到新建课程中,拼成header,在验证title(仅title未填写)必填提示时,发现提示5个参数都是必填的.
报错:
{"message":"422 Unprocessable Entity","errors":{"title":["The \u6807\u9898 field is required."],"duration":["The \u6bcf\u8282\u8bfe\u65f6\u957f field is required."],"category":["The category field is required."],"teaching_method":["The teaching method field is required."],"cover":["The cover field is required."]},"status_code":422}
于是把我的参数化的代码先去掉,回归到第一天的状态,竟然还报错,(难道我昨天的解决是假解决么...)
报错信息:报
{"message":"Token Signature could not be
verified.","status_code":401}'
找来开发同事,说,你看,提示是有问题的(捂脸),尽管当时postman中验证是对的.当时依然觉得自己的代码是对的.
再看,是大意了,url没对.因为今天和昨天的测试链接变了,而且需要参考昨天的链接去修改,我忘了修改.....
链接修改完,发现依然有问题
再后面才发现,打印出payload,发现是这种格式的
payload = {
'title': title,
'title_en': title_en,
'description': description,
'description_en': description_en,
'duration': duration
}
图片.png
这种格式不符合python里的字典格式.当里面的单引号是双引号的时候不报错,验证正常.而且,这不是json串
后来想,既然不是json串那就转化成json格式的好了,于是修改代码:
r = requests.post(url=url2, data=json.dumps(payload), headers=headers)
再运行,ok.
参考资料1:# python对json的操作总结