urrlib2.urlopen:启动没有互联网连接的脚本时,“名称或服务未知”仍然存在

urrlib2.urlopen:启动没有互联网连接的脚本时,“名称或服务未知”仍然存在,第1张

urrlib2.urlopen:启动没有互联网连接的脚本时,“名称或服务未知”仍然存在

发生这种情况是因为无法解析DNS名称“ www.google.com”。如果没有互联网连接,则可能无法访问DNS服务器来解析此条目。

看来我是第一次误读你的问题。在Linux上,您描述的行为是glibc的特性。加载时,它仅读取一次“
/etc/resolv.conf”。可以通过

res_init()
函数强制glibc重新读取“ /etc/resolv.conf” 。

一种解决方案是包装

res_init()
函数并在调用之前调用
getaddrinfo()
它(间接使用
urllib2.urlopen()

您可以尝试以下 *** 作(仍然假设您使用的是Linux):

import ctypeslibc = ctypes.cdll.LoadLibrary('libc.so.6')res_init = libc.__res_init# ...res_init()response = urllib2.urlopen('http://www.google.com')

当然,可以通过在调用之前等待“ /etc/resolv.conf”被修改来优化此方法

res_init()

另一个解决方案是安装例如nscd(名称服务缓存守护程序)。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5654877.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存