ssl — Curl не может получить сертификат локального эмитента с помощью Filckr API в переполнении стека

Поскольку Flickr API полностью поддерживает SSL, я сделал следующие шаги

  1. Скачать .pem файл с http://curl.haxx.se/ca/cacert.pem, переименуйте его в
    ca-bundle.crt и скопируйте в C: / xampp / php / (я использую XAMPP на Win8)

  2. Добавить место 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.

0

Решение

Я бы посоветовал вам включить пару дополнительных параметров в ваш вызов 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 );
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]