Python“请求”库-定义特定的DNS?

发布于 2021-01-29 19:35:49

在我的项目中,我正在使用pythonrequests处理所有HTTP请求。

现在,我需要使用特定的DNS查询http服务器-有两种环境,每种环境都使用自己的DNS,并且更改是独立进行的。

因此,当代码运行时,它应使用特定于环境的DNS,而不是在我的Internet连接中指定的DNS。

关注者
0
被浏览
60
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    urllib3.connection模块httplib.HTTPConnection以相同的名称子类化,已用.connect()调用的方法替换了该方法self._new_conn。反过来,这委托给urllib3.util.connection.create_connection()。修补
    功能可能是最简单的:

    from urllib3.util import connection
    
    
    _orig_create_connection = connection.create_connection
    
    
    def patched_create_connection(address, *args, **kwargs):
        """Wrap urllib3's create_connection to resolve the name elsewhere"""
        # resolve hostname to an ip address; use your own
        # resolver here, as otherwise the system resolver will be used.
        host, port = address
        hostname = your_dns_resolver(host)
    
        return _orig_create_connection((hostname, port), *args, **kwargs)
    
    
    connection.create_connection = patched_create_connection
    

    并且您将提供自己的代码来host将地址的一部分解析为ip地址,而不是依靠connection.create_connection()调用(自动包装socket.create_connection())为您解析主机名。

    像所有的monkeypatching一样,请注意,在以后的版本中代码没有显着更改;该补丁是针对urllib31.21.1版创建的。但应该适用于1.9之前的版本。


    请注意,此答案已重新编写以与较新的urllib3版本一起使用,这些新版本添加了更方便的修补位置。请参阅适用于版本<1.9的旧方法的编辑历史记录,以作为供应商urllib3版本的补丁程序,而不是独立安装。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看