V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
NikoTiz
V2EX  ›  Python

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

  •  
  •   NikoTiz · 2019-08-06 18:45:00 +08:00 · 2607 次点击
    这是一个创建于 1969 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近做一个爬虫项目

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

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

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


    PS:

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

    2.https

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


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

    第 1 条附言  ·  2019-08-07 19:54:29 +08:00
    仔细分析了下,目前有了些眉目,大概找出俩个 request 唯一的区别就是
    tls 协议中 cipher suite 客户端支持的不一样,虽然最终服务器选择的加密方式没有不同,但是不排除从这个层面上导致的不同结果
    另外 tls extension 扩展内容也不一样
    11 条回复    2023-06-28 15:47:51 +08:00
    napsterwu
        1
    napsterwu  
       2019-08-06 18:57:58 +08:00 via iPhone
    Charles -> copy as curl 然后网上找个工具把 curl 转成 python request
    HarryQu
        2
    HarryQu  
       2019-08-06 19:04:43 +08:00 via Android
    postman -> 直接转 python 或者转 curl

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