Не получаю ответ на HTTP запрос запущенный в php скрипте через curl но получаю ответ в браузере, как исправить?

Ссылка скопирована
1 ответ

Доброго времени суток! Перед полноценной работой с основным скриптом пытаюсь протестировать обработку входящих GET и POST запросов, для проверки GET использую простой вывод целевого параметра subid:

<?php echo $_GET['subid'];

<?php echo $_GET['subid'];

При обращении использую URL: https://{сервер}/?subid=42 и открывая данный адрес в браузере получаю вывод 42, все хорошо. Но к скрипту будет обращаться не браузер а php скрипт с другого веб-сервиса который посылает хук на мой эндпоинт. Запросы реализуются через curl и пример подобного GET запроса выглядит так:

<?php $get = [ 	'subid'  => '42' ];   $ch = curl_init('https://{сервер}?' . http_build_query($get)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $out = curl_exec($ch); curl_close($ch);   echo $out;

<?php $get = [ 'subid' => '42' ]; $ch = curl_init('https://{сервер}?' . http_build_query($get)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $out = curl_exec($ch); curl_close($ch); echo $out;

В результате приходит код 0, что по сути и не код а просто отсутствие ответа. При этом этот же скрипт проверен на другой ссылке, например публичный API (https://catfact.ninja/fact) который возвращает код 200 и JSON строку. Получается ситуация что один и тот же адрес в браузере отдает ответ а в php скрипте нет. Сам сервер на Apache, дефолтные настройки, .htaccess отсутствует на данный момент, так что пока не вижу что могло бы ограничивать работу с запросом.

Подскажите пожалуйста как можно добиться ответа на запрос из скрипта в данном случае? IDE для написания обоих скриптов PhpStorm.

Дополнительно:

У curl есть функция, возвращающая статус ответа.
Вангую, что там 301, и браузеры ваши по нему переходят, а курл - нет.

  • Adamos, это же вроде она?
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); echo ('HTTP CODE ' . $code);

    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); echo ('HTTP CODE ' . $code);

    Возвращает HTTP CODE 0

  • danilapon, если это стоит после запроса и возвращает 0, значит, запрос вовсе никуда не уходит.
    Функции получения ошибки у curl тоже есть...
  • Adamos, ага, SSL certificate problem: unable to get local issuer certificate
    Вот где собака зарыта. Будем разбираться, спасибо большое!
  • Может второй строчки не хватает ?
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

    В броузере редиректов в сетевой консоли не видно ?

  • Может быть CORS. Заголовки позволяют получать ответ на другие домены?
  • Ответы:

    Оказалось что проблема в SSL certificate problem: unable to get local issuer certificate
    Выставление CURLOPT_SSL_VERIFYPEER на 0 помогает но как решить проблему без отключения проверки сертификата?

    • Курл не видит локальный сертификат.
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Андрей PHP Ответ

    Для начала, давайте убедимся, что ваш PHP скрипт правильно настроен для отправки запросов с помощью cURL.

    1. Убедитесь, что расширение cURL установлено и включено в вашем PHP. Вы можете проверить это, создав файл phpinfo.php и вставив в него следующий код:

     

    Откройте этот файл в браузере и найдите информацию о cURL. Если расширение не установлено, вам нужно будет его установить.

    2. Проверьте ваш код cURL. Убедитесь, что вы правильно настроили параметры запроса, включая URL, метод запроса, заголовки и тело запроса (если необходимо).

    Пример кода для отправки GET запроса с помощью cURL:

     

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

    4. Попробуйте добавить дополнительные параметры CURLOPT_SSL_VERIFYPEER и CURLOPT_SSL_VERIFYHOST для обхода проблем с SSL:

     

    Если после применения этих шагов проблема остается, попробуйте проверить логи сервера на наличие ошибок cURL или обратитесь к вашему хостинг-провайдеру для получения дополнительной помощи.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно