繁体   English   中英

为什么我从Python HTTPLib获取socket.gaierror:[Errno -2]

[英]Why am I getting socket.gaierror: [Errno -2] from Python HTTPLib

我的Python代码非常简单,在ArduinoYún上创建的网页上发出GET请求。

import httplib
conn = httplib.HTTPConnection("yun.local")
conn.request("GET", "/arduino/read/temp/0")
r1 = conn.getresponse()
print r1.status, r1.reason, r1.read()

当我在ArduinoYún的Linux端运行它时,以下错误显示socket.gaierror:[Errno -2]名称或服务未知 但是,当我在Mac上运行相同的脚本时,它运行正常。

我通过将HTTPConnection参数更改为httplib.HTTPConnection(“192.168.240.1”)来解决此问题, httplib.HTTPConnection是来自Arduino Yun的IP。

那么,为什么这个错误出现在Arduino的Linux端而不是我的Mac?

谢谢。

socket.gaierror来自Python无法运行getaddrinfo()getnameinfo() 在你的情况下,它可能是第一个。 该函数接受主机和端口,并返回元组列表,其中包含有关如何连接到主机的信息。 如果您为该功能提供主机名,则会尝试在下面更深入地解析IP地址。

因此,错误应该来自Python无法将您编写的地址( yun.local )解析为有效的IP地址。 我建议你查看设备上的/etc/hosts ,看看它是否在那里定义。 您也可以尝试使用命令行工具(如hosttelnet )来检查解析:

例如:

[pugo@q-bert ~]$ telnet localhost 80
Trying ::1...
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

它设法将我的localhost解析为::1 (IPv6)和127.0.0.1 (IPv4),因为它存在于/etc/resolv.conf 如果我改为尝试与您的主人:

[pugo@q-bert ~]$ telnet yun.local 80
telnet: could not resolve yun.local/80: Name or service not known

就我而言,我更改了主机名。 所以我意识到/ etc / hosts仍然是旧的主机名,我刚刚更新到/ etc / hosts文件中的新主机名,这对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM