在我的项目中,我使用python^{
现在,我需要使用特定的DNS查询http服务器-有两个环境,每个环境都使用自己的DNS,并且更改是独立进行的。
所以,当代码运行时,它应该使用特定于环境的DNS,而不是在我的internet连接中指定的DNS。
有人用python请求尝试过吗?我只找到了urllib2的解决方案:
https://stackoverflow.com/questions/4623090/python-set-custom-dns-server-for-urllib-requests
您应该查看TransportAdapters,包括源代码。关于它们的文档不是很好,但是它们提供了对RFC 2818和RFC 6125中描述的许多功能的低级访问。特别是,这些文件鼓励(要求?)客户端代码,用于支持特定于应用程序的DNS,以检查证书的CommonName和SubjectAltName。这些调用中需要的关键字参数是“assert_hostname”。以下是如何使用请求库设置它:
我使用
common_name
表示证书上预期的名称,以及代码将如何引用所需的计算机。我使用host
作为外部世界识别的名称-FQDN、IP、DNS条目。。。当然,SSL_选项字典(在我的示例中)必须在您的计算机上列出适当的证书/密钥文件名。(另外,名称和密码应该解析为正确的字符串。)一个定制的HTTPAdapter可以做到这一点。
别忘了将
server_hostname
设置为启用SNI。requests
使用了urllib3
,最终也使用了httplib.HTTPConnection
,因此在一定程度上,来自^{s>https://stackoverflow.com/questions/4623090/python-set-custom-dns-server-for-urllib-requests的技术(现在已经删除,它仅仅链接到Tell urllib2 to use custom DNS)仍然适用。同名的
urllib3.connection
模块子类httplib.HTTPConnection
,用调用self._new_conn
的方法替换了.connect()
方法。反过来,这个委托给urllib3.util.connection.create_connection()
。可能最容易修补的功能:您可以提供自己的代码来将地址的
host
部分解析为一个ip地址,而不是依赖connection.create_connection()
调用(它包装socket.create_connection()
)来为您解析主机名。像所有的monkeypatching一样,要注意代码在以后的版本中没有明显的变化;这里的补丁是针对
urllib3
版本1.21.1创建的。但最早应该在1.9版本中使用。请注意,重新编写此答案是为了与较新的
urllib3
版本一起使用,这些版本添加了更方便的修补位置。请参阅适用于<;1.9版的旧方法的编辑历史记录,该方法是对所提供的urllib3
版本的修补程序,而不是独立安装。相关问题 更多 >
编程相关推荐