这个 Python requests 错误是什么意思?

17
这个Python请求错误的意思是什么?这是否意味着它尝试连接服务器但失败了?"[Errno 8] nodename nor servname provided, or not known"是什么意思?
这段代码生成了以下内容:http://github.com...
class RestConnection(object):
    def __init__(self, serverInfo):
        #serverInfo can be a json object
        if isinstance(serverInfo, dict):
            self.ip = serverInfo["ip"]
            self.username = serverInfo["username"]
            self.password = serverInfo["password"]
            self.port = serverInfo["port"]
            self.couch_api_base = serverInfo.get("couchApiBase")
        else:
            self.ip = serverInfo.ip
            self.username = serverInfo.rest_username
            self.password = serverInfo.rest_password
            self.port = serverInfo.port
            self.couch_api_base = None

        self.base_url = "http://{0}:{1}".format(self.ip, self.port)
        server_config_uri = ''.join([self.base_url, '/pools/default'])
        self.config = requests.get(server_config_uri).json()
        # if couchApiBase is not set earlier, let's look it up
        if self.couch_api_base is None:
            #couchApiBase is not in node config before Couchbase Server 2.0
            self.couch_api_base = self.config["nodes"][0].get("couchApiBase")

这个错误是由Couchbase Python客户端生成的。


1
你能贴一些相关的代码吗?以便我们找出触发它的原因。 - Ivo
5个回答

10
为那些将来可能会遇到这个问题的人添加我的经验。
事实证明,这是因为我在系统上达到了最大打开文件数。它和连接失败没有任何关系,甚至与所指示的DNS错误也无关。

你是怎么解决这个问题的?我觉得我也遇到了同样的问题。 - safetymonkey
老实说,我记不清了。我可能会像“增加Linux打开文件数量”这样谷歌一些东西,然后按照那些指示去做。 - Oded

9

这意味着您尝试访问的主机名的DNS查找失败。例如,如果我尝试查找一个无效的主机名,我会得到相同的错误:

>>> import requests
>>> requests.get('http://apsoapsodjaopisjdaoij.com')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/api.py", line 65, in get
    return request('get', url, **kwargs)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/safe_mode.py", line 39, in wrapped
    return function(method, url, **kwargs)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/api.py", line 51, in request
    return session.request(method=method, url=url, **kwargs)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/sessions.py", line 241, in request
    r.send(prefetch=prefetch)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/models.py", line 631, in send
    raise ConnectionError(sockerr)
requests.exceptions.ConnectionError: [Errno 8] nodename nor servname provided, or not known

请检查 serverInfo["ip"] 的值,确保它被正确设置。


1

当我尝试连接 .onion 网站时,出现了这个错误。后来发现,我只需要在我的socks代理名称前面加上“h”就可以解决问题,像这样:

proxies = {
    'http':  'socks5h://127.0.0.1:9050',
    'https': 'socks5h://127.0.0.1:9050'
    }

这可能不是你的解决方案,但我在这里发布这个答案,以防有人遇到和我一样的问题来寻找解决方案


0

错误的 DNS,例如在使用 docker 服务并调用 http://host.docker.internal:8000 而不是 http://localhost:8000 时,你不在 docker 服务本身上。


0

如果您在这里是因为 Twitter API 给出了此错误,请尝试重新生成您的 Bearer Token,它将正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接