Как решить ошибку запроса CURL «Не удалось разрешить хост: ...» PHP? - PullRequest
1 голос
/ 20 июня 2019

Я сталкиваюсь с этой очень странной ошибкой. Я не могу отправить запрос cURL больше после того, как ничего не изменилось. Внезапно я получаю:

'Не удалось разрешить хост: имя хоста'

Я знаю, что в стеке потока есть примерно 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 Ответ

1 голос
/ 22 июня 2019

У меня была эта проблема раньше.В чате я вижу, что вы сказали, что у вас есть бэкэнд и фронтенд, который вы подключаете к одной сети и используете Docker.Я думаю, что проблема происходит, потому что что-то пошло не так с виртуальной сетью между вашим фронтом и бэкэндом.Попробуйте выполнить следующее:

1- Убедитесь, что оба контейнера - передний и внутренний - открыты.

2 - Убедитесь, что они находятся в одной сети, используя следующие команды:

  • Создайте сеть 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 (если вы не знаете имя вашего бэкэнд-веб-сервера, используйте docker ps для его просмотра.
  • Добавление внешнего интерфейса в сеть docker network connect some-network-name-or-the-name-you-already-had your-frontend-webserver-name.

Теперь я не уверен в этом, но всякий раз, когда контейнер внешнего интерфейса или бэкэнда останавливается, вы получаете (после запуска контейнера с помощью docker-compose up -d) каждый раз, чтобы добавить его в сеть. Может быть способ обойти это, но я не знаю об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...