使用Requests、Urllib和Pandas调用URL时遇dns_unresolved_hostname网络错误
解决Python请求局域网服务器时的dns_unresolved_hostname错误
问题场景
浏览器可正常加载http://fc12rp01:8000/bin/ReportCall.py?rule=N2,但Python的Requests、URLLIB、Pandas调用该URL时,返回Network Error (dns_unresolved_hostname)。已尝试修改hosts文件、调整代理设置、ping通服务器、替换服务器名为IP/移除端口等操作,问题仍未解决。
可行解决方案
强制请求不使用代理
即使系统代理设置已调整,Python可能仍会继承代理配置。手动在请求中指定空代理字典,强制不走代理:import requests proxies = {'http': '', 'https': ''} r = requests.get('http://fc12rp01:8000/bin/ReportCall.py?rule=N2', proxies=proxies) print(r.content)验证Python的DNS解析能力
先确认Python能否正确解析服务器主机名,运行以下代码:import socket print(socket.gethostbyname('fc12rp01'))如果返回错误,说明Python未读取到正确的hosts配置:
- 检查hosts文件格式:IP与主机名之间需用制表符或空格分隔,确保无多余符号;
- 确认hosts文件权限:Windows下需管理员权限修改
C:\Windows\System32\drivers\etc\hosts,Linux/macOS需修改/etc/hosts并保存; - 重启Python环境,确保配置生效。
指定IP+Host头请求
若直接用IP访问仍失败,可能是服务器要求请求头中的Host字段匹配主机名,手动添加Host头:import requests url = 'http://192.168.x.x:8000/bin/ReportCall.py?rule=N2' # 替换为服务器实际IP headers = {'Host': 'fc12rp01'} r = requests.get(url, headers=headers, proxies={'http': '', 'https': ''}) print(r.content)检查环境变量与安全软件
- 清理代理环境变量:系统的
HTTP_PROXY/HTTPS_PROXY变量可能干扰请求,在代码中先移除:import os os.environ.pop('HTTP_PROXY', None) os.environ.pop('HTTPS_PROXY', None) import requests r = requests.get('http://fc12rp01:8000/bin/ReportCall.py?rule=N2') print(r.content) - 临时关闭防火墙/杀毒软件:部分安全软件会拦截Python的网络请求,关闭后测试是否恢复正常。
- 清理代理环境变量:系统的
内容的提问来源于stack exchange,提问作者Bobby Python
相关产品推荐
相关产品推荐

