请求服务器显示非法请求,请求被服务器识别为非法请求, 但使用 postman/curl 可以正常通过...

请求被服务器识别为非法请求, 但使用 postman/curl 可以正常通过

背景: 有一个接口通过 postman/curl 测试正常.

问题: 但我用 python 的 requests 库构造了一个 GET 请求, 请求的 headers 完全和 postman 发出的一样,

但是被服务器识别为非法请求(返回的 http status 为 200, body 的错误描述为非法请求). 1. 它是怎么知道这个请求不是来自于浏览器

/postman/curl 的? 2. postman/curl 是否做了些其他我不知道的逻辑或添加了我不知道的请求参数吗?

lolizeppelin

抓包看区别啊

danielmiao

UA

LukeChien

把请求发给 httpbin.org 看看区别

sadddhu

@lolizeppelin 问题已经解决了.

requests.get('http://example.com?A=1&B=2') 和

requests.get('http://example.com, params={'A': 1, 'B': 2})有区别吗?

WizardMeow

@sadddhu 有。[相关源码](

https://github.com/requests/requests/blob/master/requests/models.py#L350-L434)

坑一定在编码和一些非标准字符,构建 URL 的时候出现了错误,你可以看看它构建的是什么

WizardMeow

也不能说是错误,它是严格遵守标准的……错误的是那边服务器非标……

lolizeppelin

有字典无序 标准是无序但是服务端不一定按照无序解析

无序最坑的是加密 的时候 这种时候要用有序字典

sadddhu

@WizardMeow 感谢.

根本原因找到了. 我在使用上述我提到的第二种方式的时候, 其中有个参数我已经做了 url encode, 但 requests 对已经 encode

的内容再次 encode, 导致了构造的 url 不一样.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值