Налаштування curl для роботи на https

Модуль libcurl призначений для відправки http запитів веб серверів і отримання на них відповідей. Фактично він робить теж що і браузер при переході на сторінку якого-небудь сайту. Щоб скористатися наданими їм принадами, підключимо його.

Після перезавантаження служби сервера цей модуль буде працювати. Для перевірки достатньо написати простий скрипт:

В даному прикладі був виконаний звичайним GET запит на сайт "example.com". Щоб виконати POST запит, потрібно додати відповідні опції.

curl_setopt ($ ch, CURLOPT_POST, 1); $ Encoded = urlencode (.); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ encoded);

Тут $ encoded містить рядок параметрів виду "urlencode (ім'я) = urlencode (значення)", з'єднаних "". Параметри запиту передаються в точно такому ж вигляді, як і при GET запиті, з різниці лише в тому, що передаються не в URL запиту, а в тілі POST запиту. Трохи пограти з серверами, які працюють на звичайному http протоколі, спробуємо зробити теж з https протоколом.

І тут нас чекає розчарування. Виникає помилка. Справа в тому, що для установки https з'єднання потрібна перевірка сертифіката сервера. А наш curl поки цього не вміє робити :-(. Можна звичайно примусово відключити перевірку, але це не річ, не для того створювався протокол із захистом, щоб відключати захист.

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

Проблема полягає в тому, що у вашого curl відсутній сертифікат, яким здійснюється перевірка сертифіката сайту. Якщо коротко, сертифікати містять ключі для шифрування, відкритий і закритий, відкритий ключ доступний всім, закритий - нікому. Одним ключем зашифрована, іншим розшифровується. Перевірка полягає в тому що, обидві сторони обмінюються зашифрованою інформацією, оскільки у вас немає ніяких ключів, то ця процедура стає неможливою. Звідси і помилка. (Для тих хто хоче розібратися детально з ключами, шифруванням, сертифікатами та ін. - дорога в гугл або яндекс)

Тепер залишилося перезапустити службу сервера, і переконатися що curl заробив з протоколом https. У всякому разі у мене все запрацювало. Я намагався на локальному сервері налаштувати реєстрацію в MODx. На формі реєстрації встановив гугловських reCaptchav2, і спочатку реєстрація скоєно не працювала. Після відключення каптчі реєстрація заробила, але мені потрібен був захист від спаму, а переробляти реєстрацію під іншу капчу не було бажання. Після недовгого розслідування було виявлено винуватець - модуль curl, а через деякий час знайдено рішення проблеми. І гугловський капча успішно запрацювала на локальному сервері.

Схожі статті