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

2021-05-16 21:56:29 +08:00
 keyword233

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

2290 次点击
所在节点    Python
6 条回复
ch2
2021-05-16 22:27:57 +08:00
host 是由你的 url 决定的,你自己覆盖无效
chenyu0x00
2021-05-17 00:43:24 +08:00
@ch2 我测试没有问题,可以使用 headers 覆盖 Host
chenyu0x00
2021-05-17 00:45:55 +08:00
我把 IP 地址换成 182.61.200.7,楼主的代码就能正常访问了。
chenyu0x00
2021-05-17 00:49:04 +08:00
我好像不能放图,代码基本上是这样的:

```
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
2021-05-17 03:13:49 +08:00
同,win 平台测试下返回值是正常的百度首页。不过原理上来说,如果你期望以指定 IP 来获得不同的路由,那么封包和直接发送肯定有某种区别,记得以前看过一些引擎开发的说法是(在讨论 host 序列化攻击时),引擎要识别目标访问的 host 实际是一件困难的事,意指其不可靠性,所以如果对方没有按照你期望的方法识别,不识别也是正常的。我手头没有抓包工具,具体封包区别还请楼上老哥解惑了
keyword233
2021-05-17 08:51:00 +08:00
谢谢各位,同样的代码换了台电脑解决了,似乎只有这台电脑遇到了这个问题 :(

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

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

@LeeReamond 虽然没有明白你在说什么...不过还是谢谢了!

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

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

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

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

© 2021 V2EX