测试小组-一步步提升测试技能我的技术博客

requests里的post方法遇到的问题

2018-05-14  本文已影响11人  卜了了

这两个问题都是关于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的操作总结

上一篇下一篇

猜你喜欢

热点阅读