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
keyword233
V2EX  ›  Python

关于 Python requests 库自定义 Host 的问题。

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

    如图,似乎设置的 Host 并没有生效,想问问各位大佬问题出在哪里?

    6 条回复    2021-05-17 08:51:00 +08:00
    ch2
        1
    ch2  
       248 天前
    host 是由你的 url 决定的,你自己覆盖无效
    chenyu0x00
        2
    chenyu0x00  
       247 天前
    @ch2 我测试没有问题,可以使用 headers 覆盖 Host
    chenyu0x00
        3
    chenyu0x00  
       247 天前
    我把 IP 地址换成 182.61.200.7,楼主的代码就能正常访问了。
    chenyu0x00
        4
    chenyu0x00  
       247 天前
    我好像不能放图,代码基本上是这样的:

    ```
    r = requests.get('http://182.61.200.7', headers={'Host': 'www.baidu.com'})
    r.encoding = 'utf-8'
    print(r.text)
    ```

    我用 wireshark 抓包,发送的 HTTP 请求中的 Host 字段被正确修改为了 www.baidu.com
    我的测试环境是 Ubuntu,Python 3.6.9 。
    LeeReamond
        5
    LeeReamond  
       247 天前
    同,win 平台测试下返回值是正常的百度首页。不过原理上来说,如果你期望以指定 IP 来获得不同的路由,那么封包和直接发送肯定有某种区别,记得以前看过一些引擎开发的说法是(在讨论 host 序列化攻击时),引擎要识别目标访问的 host 实际是一件困难的事,意指其不可靠性,所以如果对方没有按照你期望的方法识别,不识别也是正常的。我手头没有抓包工具,具体封包区别还请楼上老哥解惑了
    keyword233
        6
    keyword233  
    OP
       247 天前
    谢谢各位,同样的代码换了台电脑解决了,似乎只有这台电脑遇到了这个问题 :(

    @ch2 在其他设备上测试过,这是的确是有效的。

    @chenyu0x00 谢谢实践!这俩都是百度的 ip,应该没有区别;问题主要在于 Host 字段不能正确被重写。(但是 headers 指定的其它参数又是正常的,有点迷)

    @LeeReamond 虽然没有明白你在说什么...不过还是谢谢了!
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2673 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:47 · PVG 22:47 · LAX 06:47 · JFK 09:47
    ♥ Do have faith in what you're doing.