Вызовите API с curl для определенного порта - PullRequest
0 голосов
/ 18 февраля 2019

Я использую Symfony под портом 8000. Но HTTP-протокол curl находится на 80-м порту.

Это означает, что мой запрос curl не работает, так как я думаю, что порт не в порядке.

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

Я уже проверил эту проблему: Невозможно сделать запрос php curlс номером порта

Мой $ url похож на http://127.0.0.1/app_dev.php/api/someapi

здесь $result = $this->lib->CallAPI('POST', $url, $postfields);

При запуске в Symfony для поиска URL, у меня должно быть 127.0.0.1:8000Но либо я попытался установить порт в URL с не установленным параметром curl для порта.Либо я пытаюсь использовать URL без порта, но устанавливая параметр curl для порта.Это всегда не удавалось.

Вот функция совершения вызова

function CallAPI($method, $url, $data = false)
{
    $curl = curl_init();

    switch ($method)
    {
        case "POST":
            curl_setopt($curl, CURLOPT_POST, 1);

            if ($data)
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            break;
        case "PUT":
            curl_setopt($curl, CURLOPT_PUT, 1);
            break;
        default:
            if ($data)
                $url = sprintf("%s?%s", $url, http_build_query($data));
    }

    curl_setopt($curl,CURLOPT_PORT, 8000);
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($curl);

    curl_close($curl);

    return $result;
}

}

Строка curl_setopt($curl,CURLOPT_PORT, 8000);, кажется, отвечает за выполнение моего запроса ожидающим.

Обратите внимание, что вызов API от Почтальона работает, поэтому проблема действительно в том, как я называю его curl.

Спасибо за вашу помощь.

РЕДАКТИРОВАТЬ:

Я использовал небольшую хитрость, чтобы увидеть, что не так.

вместо возврата $ result в callApi () я возвращаю $ curl.он возвращает мне некоторый HTML-код внутри этого

<h1 class="break-long-words exception-message">Whoops, looks like something went wrong.</h1>
<p class="break-long-words trace-message">An instance of Symfony\Bundle\FrameworkBundle\Templating\EngineInterface must be injected in FOS\RestBundle\View\ViewHandler to render templates.</p>

Но я не понимаю, почему определение переменной $ curl делает эту ошибку, учитывая, что вызываемый API работает с почтальоном

EDIT2: ВНа самом деле эта ошибка возникла из-за попытки конвертировать объект curl в json с помощью json_decode ... так что делать нечего.Сожалею.Проблема все еще там тогда.

...