为什么我不能使用GoLang中请求URL中的IP地址和主机名作为“主机”标头来定位服务器?为什么使用python可以正常工作?(2.7.6-urllib2)
我正在编写一个系统测试,该测试会将HTTP请求发送到正在测试的多个特定应用服务器,并检查结果的正确性。每个应用程序服务器具有相同的功能,并且应返回相同的响应数据。这些服务器分组在负载均衡器后面。然后,这些负载平衡器由DNS解析,并将流量转发到适当的后端服务器。为了独立地定位每个服务器(用于测试),我在URL中使用每个服务器的IP地址,而不是通常的主机名,并且将“ Host” HTTP标头设置为通常在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...
同样,为什么GoLang代码返回错误时python代码仍然有效?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句