В запросе Curl HTTPS указано: «Узел SSL не ожидал полученного сообщения о рукопожатии».

1

У меня есть этот простой код cURL, который отлично работает на одной машине (PHP 5.2.17), но не работает на другом (PHP 5.6.13). В более новой версии вызов cURL вызывает исключение с

SSL-партнер не ожидал получения сообщения об установлении связи.

код выглядит следующим образом:

private function postRequest($url, $request) {
    $curl = curl_init($url);

    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,  FALSE);
    curl_setopt($curl, CURLOPT_CAINFO,          "certificate.der");
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,  2);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,  1);
    curl_setopt($curl, CURLOPT_POST,            1);
    curl_setopt($curl, CURLOPT_POSTFIELDS,      $request);
    curl_setopt($curl, CURLOPT_HTTPHEADER,      array('Content-Type: text/xml'));

    $r = curl_exec($curl);
    if ($r == false) {
        $r = curl_error($curl);
    }

    return $r;
}
  • 0
    Значение $url одинаково?
  • 0
    @ Да, да. Я скопировал самодостаточный тестовый код с одного компьютера на другой, и он работал нормально.
Показать ещё 2 комментария
Теги:
curl
https

1 ответ

2
Лучший ответ

Вы можете использовать:

curl_setopt($curl, CURLOPT_SSLVERSION,  CURL_SSLVERSION_SSLv3);

Возможные варианты:

CURL_SSLVERSION_DEFAULT

CURL_SSLVERSION_TLSv1

TLSv1.x

CURL_SSLVERSION_SSLv2

SSLv2

CURL_SSLVERSION_SSLv3

SSLv3

CURL_SSLVERSION_TLSv1_0

TLSv1.0 (Added in 7.34.0)

CURL_SSLVERSION_TLSv1_1

TLSv1.1 (Added in 7.34.0)

CURL_SSLVERSION_TLSv1_2

TLSv1.2 (Added in 7.34.0) 

http://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html

  • 1
    Это сработало, хотя curl_easy_setopt не существует в моей системе. Попытка проверки на сертификате работает также лучше, дает мне лучшее сообщение об ошибке. Спасибо!
  • 0
    Я обновил ответ с правильным кодом PHP.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню