Поскольку Flickr API полностью поддерживает SSL, я сделал следующие шаги
Скачать .pem файл с http://curl.haxx.se/ca/cacert.pem, переименуйте его в
ca-bundle.crt и скопируйте в C: / xampp / php / (я использую XAMPP на Win8)
Добавить место cacert в мой код
curl_setopt($ch, CURLOPT_CAINFO, "C:/xampp/php/curl-ca-bundle.crt");
Вот весь мой PHP-код
<?php
$url = 'https://api.flickr.com/services/rest/
?method=flickr.people.findByUsername
&api_key=38f6b424cbcaeb07967dc7732ddb3f32
&username=Sami';
$ca = 'C:/xampp/php/curl-ca-bundle.crt';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_CAINFO, $ca);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
curl_close($ch);
echo $result;
?>
И тогда я получил
Curl error: SSL certificate problem: unable to get local issuer certificate
Пожалуйста, дайте мне несколько советов или другой способ решить проблему с локальным сертификатом.
на Flickr API.
Я бы посоветовал вам включить пару дополнительных параметров в ваш вызов curl при получении из источника https, а именно:
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 1 );
и, возможно, также useragent, так как я обнаружил, что многие вызовы API блокируются из-за отсутствия useragent
curl_setopt( $ch, CURLOPT_USERAGENT, 'flickr-curl-fetcher' );
Также я заметил (после прочтения вашего поста), что cacert.pem нужно переименовать? Это не кажется правильным — я использую следующее, и это работает.
curl_setopt( $ch, CURLOPT_CAINFO, realpath( 'c:/wwwroot/cacert.pem' ) );
/* Full code that does return XML */
$url = 'https://api.flickr.com/services/rest/?method=flickr.people.findByUsername&api_key=38f6b424cbcaeb07967dc7732ddb3f32&username=Sami';
$ca = 'C:/xampp/php/cacert.pem';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_HEADER, 0 );
curl_setopt($ch, CURLOPT_CAINFO, realpath($ca) );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 1 );
curl_setopt( $ch, CURLOPT_USERAGENT, 'flickr-curl-fetcher' );
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
curl_close( $ch );
print_r( $result );
Других решений пока нет …