【问题标题】:gaierror: [Errno 11004] getaddrinfo failedgaierror: [Errno 11004] getaddrinfo 失败
【发布时间】:2016-05-27 05:04:33
【问题描述】:

我希望从以下网址访问文本文件:

http://www.pythonlearn.com/code/intro-short.txt

我的代码是

import socket

socket.getaddrinfo('127.0.0.1', 8080)
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('http://www.pythonlearn.com', 80))
mysock.send('GET http://www.pythonlearn.com/code/intro-short.txt HTTP/1.0\n\n')

我不断收到错误消息:gaierror: [Errno 11004] getaddrinfo failed

你能帮我解决这个问题吗?

谢谢。

【问题讨论】:

  • 检查您的互联网连接并检查您的 DNS 服务器是否正常工作。该错误意味着python无法解析地址

标签: python sockets


【解决方案1】:

mysock.connect(('http://www.pythonlearn.com', 80)) 中,元组中的第一个元素应该只是主机名(或地址),没有'http://'。

所以mysock.connect(('www.pythonlearn.com', 80)) 应该可以工作。

顺便说一句,socket.getaddrinfo('127.0.0.1', 8080) 将获取您本地主机的地址信息,而不是您要联系的服务器;所以这个说法似乎没有必要。

【讨论】:

  • 我试过这个,我得到一个新错误:TypeError: a bytes-like object is required, not 'str'
  • 您的新错误来自最后一条语句。您使用的是 Python 3,因此通过网络发送或接收的任何数据都必须是字节,而不是字符串。这可以通过在字符串文字前面放置一个字母 b 来解决:mysock.send(b'GET http://www.pythonlearn.com/code/intro-short.txt HTTP/1.0\n\n')
  • 很高兴能帮上忙。
  • 我在连接方法中也尝试了没有 HTTP 的代码,但仍然得到相同的错误。有什么帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多