簡體   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