WAMP: PHP Curl «работает», но возвращает пустую строку, работает file_get_contents

Я использую PHP Wampserver 3.2.6 под Windows 11 с бесплатной версией Avast Antirus.

И версия PHP 8.1.0.

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

Я попытался запустить все это под почтальоном. А там нормально работает.

private function __curl($url, $decode = true){
    // * create curl resource
    $ch = curl_init();
    // * set url
    curl_setopt($ch, CURLOPT_URL, $this->api_url.$url);

    // * return the transfer as a string
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    // * set headers
    $headers = array('X-IM-API-KEY: '.$this->api_key);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_HEADER, true);


    // * if any postdata set
    if (!empty($this->postdata)){
        // * initialize post
        $this->__post();

        // * set postdata
        curl_setopt($ch,    CURLOPT_POST,       count($this->postdata));
        curl_setopt($ch,    CURLOPT_POSTFIELDS, $this->postfieldstr);
    }


    // $output contains the output string
    $output = curl_exec($ch);

    // close curl resource to free up system resources
    curl_close($ch);

    // * if no decode
    if (!$decode) return $output;

    // * return result
    return json_decode($output, true);
    }

Когда я просто использую file_get_contents, он отлично работает.

file_get_contents($this->api_url.$url);

Результат :

{"успех":ложь,"ошибка":истина,"сообщение":"поля отсутствует","данные":{"электронная почта":"не задана","пароль":"не установить","версия_приложения":"1.1"}}

Конечно, он выдаст ошибку, потому что ожидает POST-параметров с именем пользователя и паролем.

У меня есть следующая конфигурация, видимая в PHPinfo :

Я надеюсь, что кто-то может сказать мне, в чем была бы моя ошибка.

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

Когда я добавляю:

curl_error($ch);

Я получаю следующую ошибку:

Проблема с сертификатом SSL: невозможно получить сертификат локального эмитента

Но при просмотре адреса в FireFox я вообще не получаю никакой ошибки. (летскрипт)

Обновлено: Ответ добавлен: @codenathan


Добавление следующего кода для отключения проверки хоста и узла на самом деле помогает.

Я думаю, что в сочетании с локальным брандмауэром сертификат letscrypt просто не прошел так, как должен был.

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

Поскольку мне это нужно для целей разработки, это действительно помогает мне.

Пробегите var_dump(curl_getinfo($ch)); между исполнением и закрытием.

Alex Howansky 10.01.2023 18:07

Попробуйте добавить: curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);

codenathan 10.01.2023 18:25

Хотя мой ответ выше будет работать, отключать его не идеально: saotn.org/…

codenathan 10.01.2023 18:31

@codenathan На самом деле это действительно работает! Спасибо! Я думаю, что в сочетании со средой Windows + брандмауэром сертификат letscrypt не проходит.

Alex 10.01.2023 19:16

Звучит как проблема CURLOPT_CAPATH/openssl.cafile/curl.se/docs/caextract.html

hanshenrik 11.01.2023 01:18

@codenathan, вы можете добавить свой комментарий в качестве поста? Чтобы я мог пометить это как ответ?

Alex 11.01.2023 13:40
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Laravel - это мощный PHP-фреймворк, используемый для создания масштабируемых и надежных веб-приложений. Одним из преимуществ Laravel является его...
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Laravel с Turbo JS
Laravel с Turbo JS
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием...
Аутсорсинг разработки PHP для индивидуальных веб-решений
Аутсорсинг разработки PHP для индивидуальных веб-решений
Услуги PHP-разработки могут быть экономически эффективным решением для компаний, которые ищут высококачественные услуги веб-разработки по доступным...
Еще один бенчмарк PHP
Еще один бенчмарк PHP
Сегодня я наткнулся на забавный пост на r/ProgrammerHumor, который заставил меня задуматься об одной вещи, которая меня всегда интересовала....
Преобразование данных с помощью красноречивых аксессоров и мутаторов в Laravel
Преобразование данных с помощью красноречивых аксессоров и мутаторов в Laravel
Laravel поставляется с мощной функцией под названием "Eloquent Accessors and Mutators".
0
6
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);

Однако не рекомендуется отключать это: https://www.saotn.org/dont-turn-off-curlopt_ssl_verifypeer-fix-php-configuration/

Другие вопросы по теме