requests.get突发'Temporary failure in name resolution'错误排查求助
问题解决思路及方案
核心问题定位
报错Temporary failure in name resolution明确指向DNS解析失败,结合你在WSL中连google.ca都无法通过requests访问,说明问题出在WSL的DNS配置上,而非目标网站ncode.syosetu.com的访问限制。另外,ping/tracert超时属于正常情况——多数网站会禁用ICMP请求,只要requests能正常访问即可,无需纠结这两个工具的结果。
解决方案
1. 修复WSL DNS配置
WSL默认会自动生成/etc/resolv.conf,但可能出现配置失效的情况,手动锁定DNS配置即可解决:
- 备份原配置文件:
sudo cp /etc/resolv.conf /etc/resolv.conf.bak - 编辑
/etc/resolv.conf,添加公共DNS服务器:
删除原有内容,写入:sudo nano /etc/resolv.confnameserver 8.8.8.8 nameserver 1.1.1.1 - 创建
/etc/wsl.conf防止WSL自动覆盖DNS配置:
写入以下内容:sudo nano /etc/wsl.conf[network] generateResolvConf = false - 重启WSL生效:在Windows命令提示符执行
之后重新打开WSL终端。wsl --shutdown
2. 验证修复效果
- 先测试DNS解析是否正常:
若能返回目标IP,说明DNS配置生效。nslookup ncode.syosetu.com - 再测试
requests访问:
返回import requests headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"} response = requests.get("https://ncode.syosetu.com/n6371es/", headers=headers) print(response.status_code)200即为访问成功。
3. 备用获取页面文本方法
若DNS配置修复后仍有问题,可直接通过目标IP访问(需先通过Chrome开发者工具/nslookup获取IP):
import requests headers = { "Host": "ncode.syosetu.com", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } # 替换为实际解析到的IP地址 response = requests.get("https://xxx.xxx.xxx.xxx/n6371es/", headers=headers, verify=False) print(response.text)
注:
verify=False用于跳过证书域名不匹配的验证,仅临时使用时推荐,若长期使用可配置本地证书信任。
关于ping通ncode.syosetu.com的说明
该网站禁用了ICMP请求,所以正常情况下无法ping通,你的工作电脑能通过requests访问但ping超时也验证了这一点,无需对此问题过度关注。
内容的提问来源于stack exchange,提问作者Zephyr
相关产品推荐
相关产品推荐

