405可能造成的原因如下:
- 接口不支持。比如需要使用post请求的地方使用了get,这个使用postman就可以看出来,会提示
Method \"GET\" not allowed
。 - url问题。在抓取的包中往往有这么几个url,一个是HOST,主机没什么好说的,然后url应该就是这个【主机名+路径】。往往像一些软件,库函数等都可以根据url自动提取hearder中的host,看好位置再复制即可。此外,还有两个其它url,一个是Origin Header ,存在于请求中,用于指明当前请求来自于哪个站点,很多站点需要校验,需要注意这个字段仅包含站点,而非路径。referer表示你是从哪个网页来到这个网页的,这个字段一半不会进行校验,而是用于数据统计。
400可能造成的原因:
- header问题
- json问题:先检查一下json格式是否可解析,很多时候抓包软件为了方便把所有的大小写统一成了小写,就会出现
false
无法解析这种情况,需要改成程序可以理解的False
,诸如此类。另外一个比较难注意的点是,【究竟发的是json文本还是json对象】,一般有这三种形式:- params形式:这种只有在一些比较老旧的网页中会见到,即路径中自带了参数
- form-data形式:也就是最常见的,当指定内容类型为
application/json
时,往往可以直接通过form-data的body形式发送。代码如下:
logData = { 'account_name': account_name, 'user_pwd': user_pwd, 'remember_me': 'Y' } logRES = session.post(logURL, headers=logHeader, data=logData)
- json对象形式:这种形式的data好像无法使用postman发送(存疑,我没有找到),而且很难发现问题。其实就是需要把上面的封装成一个对象,代码如下:
logRES = session.post(logURL, headers=logHeader, data=json.dumps(logData))