关于 Charles 内置 Compose/Repeat 请求原理的问题

2019-08-06 18:45:00 +08:00
 NikoTiz

最近做一个爬虫项目

但是在遇到一个 https 接口的时候,用 python requests 或者类似 postman 直接请求的时候会报 403,

但如果在 charles 里面直接对这个请求 repeat 或者 compose 请求则可以直接通过

研究了很久都无法理解这部分问题在哪儿


PS:

1.因为是 repeat 请求 所以请求内容部分应该是完全一致的

2.https

猜测: charles 这边自签名证书相关问题


这方面知识比较薄弱 望指教 感谢

2601 次点击
所在节点    Python
11 条回复
napsterwu
2019-08-06 18:57:58 +08:00
Charles -> copy as curl 然后网上找个工具把 curl 转成 python request
HarryQu
2019-08-06 19:04:43 +08:00
postman -> 直接转 python 或者转 curl

我猜是 ua 的问题或者请求头中加了自定义的请求头
also24
2019-08-06 19:07:32 +08:00
如 2 楼所说,大概率是请求模仿的不够真,UA 或者 header 里少了东西
NikoTiz
2019-08-06 19:11:48 +08:00
@napsterwu curl request 没有任何区别,怀疑是 SSL 证书交换上可能有区别,所以导致的结果不同
NikoTiz
2019-08-06 19:13:30 +08:00
回楼上哦,这些都是有模拟到,
而且我的操作顺序是 repeat 我模拟的已经被 403 了的请求,
在 curl request 的内容上没有任何区别,
所以怀疑是 SSL 证书交换上导致的区别结果
yc8332
2019-08-06 19:47:28 +08:00
repeat 可以说明是可重复请求的,你自己直接请求不行很明显就是参数问题或者有登录状态之类的。。。charles 代理 ssl 其他所有请求等于都是 charles 发起的,所以没有什么 ssl 证书交换问题,就和你用其他客户端请求一样。。就如上面的同学说的,复制那个请求为 curl,再和你自己构造的请求对比一下就很清楚了。
NikoTiz
2019-08-07 11:38:30 +08:00
@yc8332 感谢回复 事实上是 curl 复制出来也没有任何不同。
可能我问题表述的不是很清楚,就是说对于同一个请求,在 curl 出来都是完全一样的情况下,server 层还有哪些地方可以区分出来,是否和 ssl 协议层交换秘钥有关系
NikoTiz
2019-08-07 12:08:23 +08:00
@yc8332
就是我直接用 curl request 跑了 3-4 次被 ban 了,这个时候我马上再用 Charles 去 compose 请求也是可以成功的
napsterwu
2019-08-08 16:29:52 +08:00
@NikoTiz Charles 是不是配了 client certificate?
NikoTiz
2019-08-09 12:31:37 +08:00
@napsterwu 我不确定你说的这个 client certificate 指的是啥,目前来说 Charles 只在本机上装了根证书以方便去抓 https 的包,其他没有任何多余的操作,客户端这边发起请求的时候也是把验证证书关闭了的
y996848950
2023-06-28 15:47:51 +08:00
过了这么多年,不知道楼主当时有找到方法吗?
我现在也遇到一模一样的问题,cloudflare bot managerment 太强了,就是不知道 charles 是如何绕过去的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/589598

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX