如何解决CURL请求错误“无法解析主机:...” PHP?

时间:2019-06-19 21:16:03

标签: php docker curl

我正面临着这个非常奇怪的错误。进行任何更改后,我无法再发送cURL请求。突然我得到了:

  

“无法解析主机:主机名”

我知道在stackoverflow上有大约1000个此问题的实例,但在过去的5个小时中,我尝试了所有建议的答案/评论,但似乎没有任何效果。这是我的请求代码:

<?php

class APIService
{
    private $host;
    private $key;

    function __construct($host, $key)
    {
        $this->host = $host;
        $this->key = $key;
    }

    function curlRequest($config)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('api:'.$this->key));
        curl_setopt($ch, CURLOPT_URL, $this->host.$config);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $curlSession = curl_exec($ch);

        return $this->decodeJSON($curlSession);
    }

    function getSomeList()
    {
        return $this->curlRequest('/folder/list');
    }

    private function decodeJSON($someList)
    {
        return json_decode($someList, true);
    }
}

主机是本地主机,使用docker ps可以看到主机正在运行。几天前一切正常,我对此没有做出任何更改,也没有对可能对其产生影响的任何组件进行任何更改,但并非突然生效。有谁知道为什么会发生这种情况以及我该如何解决?

1 个答案:

答案 0 :(得分:1)

我以前有这个问题。在聊天中,我看到您说您有一个后端和一个前端,您将它们放在同一网络上并正在使用Docker。我认为出现问题是因为您的前端和后端之间的虚拟网络发生了问题。请尝试以下操作:

1-确保前端和后端的容器都向上。

2-使用以下命令确保它们位于同一netwrok中:

  • 建立网络docker network create some-network-name-or-the-name-you-already-had
  • 将后端添加到网络docker network connect some-network-name-or-the-name-you-already-had your-backend-webserver-name(如果您不知道后端Web服务器的名称,请使用docker ps进行查看。
  • 将前端添加到网络docker network connect some-network-name-or-the-name-you-already-had your-frontend-webserver-name

现在我不确定,但是无论何时前端或后端的容器停止,您都必须(在使用docker-compose up -d启动容器之后)将其添加到网络中。可能有办法解决,但我不知道。