您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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版本的补丁程序,而不是独立安装。

python 2022/1/1 18:35:03 有454人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶