gpt4 book ai didi

python - 如何使用 HTTP "Host" header (使用 GoLang)定位特定的应用程序服务器

转载 作者:数据小太阳 更新时间:2023-10-29 03:07:41 24 4
gpt4 key购买 nike

问题:

为什么我不能使用 Go 语言在请求 URL 中使用它的 IP 地址并将主机名作为“主机” header 来定位服务器?为什么使用 python 可以做同样的事情? (2.7.6 - urllib2)

背景:

我正在编写一个系统测试,它会将 HTTP 请求发送到我正在测试的几个特定应用程序服务器,并检查结果的正确性。每个应用服务器具有相同的功能,应该返回相同的响应数据。这些服务器分组在负载平衡器后面。这些负载均衡器随后由 DNS 解析,并将流量转发到适当的后端服务器。为了独立地定位每个服务器(用于测试),我在 URL 中使用每个服务器的 IP 地址而不是通常的主机名,并且我将“主机”HTTP header 设置为通常在 url 中出现的主机名。这是为了确保 SSL 证书可以解码安全 (HTTPS) 请求。

现状:

我已经有一个发送这些测试请求的 python 脚本。这是该脚本的基本思想:

headers = {"Host": "<hostname>"} # this <hostname> is usually what would go in the URL on the next line
request = urllib2.Request('https://<ip-address>/path?query=123', headers=headers)
response = urllib2.urlopen(request)
# etc...

此代码几个月来一直运行良好。我已根据 IP 地址验证它确实以正确的服务器为目标。

目标:

我想在 golang 中复制此脚本以利用 go 的并发功能。我使用 go 的原因是我想一次发送更多请求(使用 goroutines)。

问题:

使用与上面所示相同的技术(但在 Go 中)我得到以下错误:

Get https://<ip-address>/path?query=123: x509: cannot validate certificate for <ip-address> because it doesn't contain any IP SANs

这是我编写的此类代码的示例:

request, _ := http.NewRequest("GET", "https://<ip-address>/path?query=123", nil)
request.Header.Set("Host", "<hostname>")

client := &http.Client{}
response, err := client.Do(request)
// etc...

同样,为什么 python 代码可以工作而 GoLang 代码返回错误?

最佳答案

根据 python documentation :

Warning: HTTPS requests do not do any verification of the server’s certificate.

要在 Go 中复制此行为,请参阅:https://stackoverflow.com/a/12122718/216488

关于python - 如何使用 HTTP "Host" header (使用 GoLang)定位特定的应用程序服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20711542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com