PHP CURL & HTTPS

Я нашел эту функцию, которая выполняет AWESOME работу (IMHO): http://nadeausoftware.com/articles/2007/06/php_tip_how_get_web_page_using_curl

/** * Get a web file (HTML, XHTML, XML, image, etc.) from a URL. Return an * array containing the HTTP server response header fields and content. */ function get_web_page( $url ) { $options = array( CURLOPT_RETURNTRANSFER => true, // return web page CURLOPT_HEADER => false, // don't return headers CURLOPT_FOLLOWLOCATION => true, // follow redirects CURLOPT_ENCODING => "", // handle all encodings CURLOPT_USERAGENT => "spider", // who am i CURLOPT_AUTOREFERER => true, // set referer on redirect CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect CURLOPT_TIMEOUT => 120, // timeout on response CURLOPT_MAXREDIRS => 10, // stop after 10 redirects ); $ch = curl_init( $url ); curl_setopt_array( $ch, $options ); $content = curl_exec( $ch ); $err = curl_errno( $ch ); $errmsg = curl_error( $ch ); $header = curl_getinfo( $ch ); curl_close( $ch ); $header['errno'] = $err; $header['errmsg'] = $errmsg; $header['content'] = $content; return $header; } 

Единственная проблема, с которой я столкнулся, это то, что она не работает для https: //. Anny идеи, что мне нужно сделать, чтобы сделать эту работу для https? Благодаря!

Solutions Collecting From Web of "PHP CURL & HTTPS"

Быстрое исправление, добавьте это в свои варианты:

 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false) 

или просто добавьте его в текущую функцию:

 /** * Get a web file (HTML, XHTML, XML, image, etc.) from a URL. Return an * array containing the HTTP server response header fields and content. */ function get_web_page( $url ) { $options = array( CURLOPT_RETURNTRANSFER => true, // return web page CURLOPT_HEADER => false, // don't return headers CURLOPT_FOLLOWLOCATION => true, // follow redirects CURLOPT_ENCODING => "", // handle all encodings CURLOPT_USERAGENT => "spider", // who am i CURLOPT_AUTOREFERER => true, // set referer on redirect CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect CURLOPT_TIMEOUT => 120, // timeout on response CURLOPT_MAXREDIRS => 10, // stop after 10 redirects CURLOPT_SSL_VERIFYPEER => false // Disabled SSL Cert checks ); $ch = curl_init( $url ); curl_setopt_array( $ch, $options ); $content = curl_exec( $ch ); $err = curl_errno( $ch ); $errmsg = curl_error( $ch ); $header = curl_getinfo( $ch ); curl_close( $ch ); $header['errno'] = $err; $header['errmsg'] = $errmsg; $header['content'] = $content; return $header; } 

Я пытался использовать CURL для выполнения некоторых вызовов API https с помощью php и столкнулся с этой проблемой. Я заметил рекомендацию на сайте php, которая запустила меня и запущена: http://php.net/manual/en/function.curl-setopt.php#110457

Пожалуйста, всем, прекратите настройку CURLOPT_SSL_VERIFYPEER на false или 0. Если ваша установка PHP не имеет обновленного набора корневых сертификатов CA, загрузите ее на сайт curl и сохраните на своем сервере:

http://curl.haxx.se/docs/caextract.html

Затем установите путь к нему в файле php.ini, например, в Windows:

curl.cainfo = C: \ PHP \ cacert.pem

Отключение CURLOPT_SSL_VERIFYPEER позволяет людям посередине (MITM) атаковать, которых вы не хотите!

другой вариант, такой как ответ Гэвина Палмера, заключается в использовании файла .pem но с параметром curl

1- загрузите последний обновленный .pem файл из https://curl.haxx.se/docs/caextract.html и сохраните его где-нибудь на своем сервере (вне .pem папки)

2- установите параметр в коде вместо файла php.ini

 curl_setopt($ch, CURLOPT_CAINFO, $_SERVER['DOCUMENT_ROOT'] . "/../cacert-2017-09-20.pem");