首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

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

  •  
  •   NikoTiz · 70 天前 · 754 次点击
    这是一个创建于 70 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近做一个爬虫项目

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

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

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


    PS:

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

    2.https

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


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

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

    我猜是 ua 的问题或者请求头中加了自定义的请求头
        3
    also24   70 天前 via Android
    如 2 楼所说,大概率是请求模仿的不够真,UA 或者 header 里少了东西
        4
    NikoTiz   70 天前
    @napsterwu curl request 没有任何区别,怀疑是 SSL 证书交换上可能有区别,所以导致的结果不同
        5
    NikoTiz   70 天前
    回楼上哦,这些都是有模拟到,
    而且我的操作顺序是 repeat 我模拟的已经被 403 了的请求,
    在 curl request 的内容上没有任何区别,
    所以怀疑是 SSL 证书交换上导致的区别结果
        6
    yc8332   70 天前
    repeat 可以说明是可重复请求的,你自己直接请求不行很明显就是参数问题或者有登录状态之类的。。。charles 代理 ssl 其他所有请求等于都是 charles 发起的,所以没有什么 ssl 证书交换问题,就和你用其他客户端请求一样。。就如上面的同学说的,复制那个请求为 curl,再和你自己构造的请求对比一下就很清楚了。
        7
    NikoTiz   69 天前
    @yc8332 感谢回复 事实上是 curl 复制出来也没有任何不同。
    可能我问题表述的不是很清楚,就是说对于同一个请求,在 curl 出来都是完全一样的情况下,server 层还有哪些地方可以区分出来,是否和 ssl 协议层交换秘钥有关系
        8
    NikoTiz   69 天前
    @yc8332
    就是我直接用 curl request 跑了 3-4 次被 ban 了,这个时候我马上再用 Charles 去 compose 请求也是可以成功的
        9
    napsterwu   68 天前 via iPhone
    @NikoTiz Charles 是不是配了 client certificate?
        10
    NikoTiz   67 天前
    @napsterwu 我不确定你说的这个 client certificate 指的是啥,目前来说 Charles 只在本机上装了根证书以方便去抓 https 的包,其他没有任何多余的操作,客户端这边发起请求的时候也是把验证证书关闭了的
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4445 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 02:40 · PVG 10:40 · LAX 19:40 · JFK 22:40
    ♥ Do have faith in what you're doing.