方法一:直接连接到 IP 地址并设置 Host 请求头
这是最直接、最常用的方式,适用于 HTTP 和 HTTPS(需谨慎处理 SSL 证书)。
将请求的 URL 替换为指定的 IP 圾址。
在请求头中设置 Host 字段为原始域名。
示例代码(HTTP):
import requests domain = "example.com" ip = "93.184.216.34" headers = { "Host": domain } response = requests.get(f"http://{ip}", headers=headers) print(response.text)
示例代码(HTTPS,需处理证书):
import requests domain = "example.com" ip = "93.184.216.34" headers = { "Host": domain } response = requests.get(f"https://{ip}", headers=headers, verify=False) print(response.text)注意:verify=False 会跳过 SSL 证书验证,存在安全风险,仅用于测试环境 。生产环境中应确保证书与目标 IP 匹配。
方法二:使用猴子补丁(Monkey Patch)修改 DNS 解析
通过修改 socket.getaddrinfo 的行为,让特定域名始终解析为指定的 IP 地址。
替换 socket.getaddrinfo 函数。在函数中判断请求的域名,若匹配则返回指定 IP。示例代码:import socket import requests domain = "example.com" ip = "93.184.216.34" # 保存原始的 getaddrinfo 函数 _original_getaddrinfo = socket.getaddrinfo def _getaddrinfo(host, port, *args, **kwargs): if host == domain: return [(socket.AF_INET, socket.SOCK_STREAM, 6, '', (ip, port))] else: return _original_getaddrinfo(host, port, *args, **kwargs) # 打猴子补丁 socket.getaddrinfo = _getaddrinfo # 发起请求,域名会解析到指定 IP response = requests.get(f"http://{domain}") print(response.text)
该方法适用于所有基于 socket 的 DNS 解析(包括 requests)。
可以精确控制哪些域名被重定向。
适用于 HTTP 和 HTTPS,但 HTTPS 仍需注意证书问题(同方法一)。
不推荐的方法:修改系统 hosts 文件
虽然可行,但存在以下问题:需要管理员权限。
影响全局网络请求,不够灵活。
不适合自动化脚本或部署。
网友回复
如何编写一个chrome插件实现多线程高速下载大文件?
cdn版本的vue在网页中出现typeerror错误无法找到错误代码位置怎么办?
pywebview能否使用webrtc远程控制共享桌面和摄像头?
pywebview6.0如何让窗体接受拖拽文件获取真实的文件路径?
如何在linux系统中同时能安装运行apk的安卓应用?
python有没有离线验证码识别ocr库?
各家的ai图生视频及文生视频的api价格谁最便宜?
openai、gemini、qwen3-vl、Doubao-Seed-1.6在ui截图视觉定位这款哪家更强更准?
如何在linux上创建一个沙箱隔离的目录让python使用?
pywebview如何使用浏览器自带语音识别与webspeech 的api?