Je souhaite collecter une liste de vidéos téléchargées sur une chaîne spécifique à l'aide de l'API de données YouTube. Cependant, avant d'implémenter en ligne, j'essaie de faire fonctionner mon code dans un environnement hors ligne (WAMPserver, PHP 5.5.12, Apache 2.4.9). J'utilise le code suivant:
require_once 'google-api-php-client-2.0.0-RC5/vendor/autoload.php';
$client = new Google_Client();
$client->setApplicationName("SRC_Thor");
$client->setDeveloperKey("xxxxxxxxxxx");
$youtube = new Google_Service_YouTube($client);
$channelResponse = $youtube->channels->listChannels('contentDetails', []);
var_dump($channelResponse);
Cependant, cela donne l'erreur suivante:
Erreur fatale: exception non capturée 'GuzzleHttp\Exception\RequestException' avec le message 'erreur cURL 60: problème de certificat SSL: impossible d'obtenir le certificat de l'émetteur local (voir
http://curl.haxx.se/libcurl/c/libcurl-errors.html
)'
J'ai essayé d'ajouter la dernière version de cacert.pem
car la plupart des sujets de SO sont une solution, mais en vain.
Si vous êtes sur Windows xampp. Je vole une meilleure réponse de ici , serait utile si Google vous montre cette première question.
téléchargez et extrayez pour cacert.pem ici (un format de fichier propre)
https://Gist.github.com/VersatilityWerks/5719158/download
MISE À JOUR: https://curl.haxx.se/docs/caextract.html
mettre dans :
C:\xampp\php\extras\ssl\cacert.pem
Ajouter cette ligne à votre php.ini
curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"
redémarrez votre serveur web/Apache
Voyant que j'utilise un environnement local, je peux désactiver en toute sécurité SSL, ce que j'ai fait en utilisant les éléments suivants:
$guzzleClient = new \GuzzleHttp\Client(array( 'curl' => array( CURLOPT_SSL_VERIFYPEER => false, ), ));
$client->setHttpClient($guzzleClient);
Où $client
est mon Google_Client ().
$guzzleClient = new \GuzzleHttp\Client(['verify' => false]);
Guzzle version 6
Vous pouvez vous référer à Guzzle Docs à
http://docs.guzzlephp.org/en/latest/request-options.html#verify
Je travaille avec xamps rien de ce qui précède n'a fonctionné pour moi
Je l'ai essayé et ça marche
vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php
et changer cela
$conf[CURLOPT_SSL_VERIFYHOST] = 2;
$conf[CURLOPT_SSL_VERIFYPEER] = true;
pour ça
$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = FALSE;
c'est une solution temporaire si vous avez mis à jour ce fichier, les modifications seront perdues
cela a également fonctionné pour moi en téléchargeant le certificat à partir du link https://Gist.github.com/VersatilityWerks/5719158/download puis sauvegardez-le dans C:\xampp\php\extras\ssl .__ puis éditez le fichier php.ini. Pour obtenir Php.ini rapidement, voyez la figure ci-dessous entrez la description de l'image ici
Puis, ARRETEZ et redémarrez votre Apache à nouveau. ça a bien fonctionné !!!
pour l'essentiel du développement et des tests, vous avez deux options pour une solution rapide
- Utilisation
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => false]); //where $url is your http address
- suivez la réponse de @Pham Huy Anh ci-dessus puis faites ceci
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => 'C:\xampp\php\extras\ssl\cacert.pem']);
J'espère que ça aide quelqu'un.
PCI-DSS 3.1 requiert que tous les protocoles SSL ne concernent que TLS 1.2, de sorte que de nombreux fournisseurs désactivent simplement tout sauf TLS 1.2. J'ai rencontré ce type de problème où CURL considérait que l'échec de la rétrogradation de la poignée de main était un échec de la vérification du certificat SSL. Essayez de trouver où votre code effectue l'appel CURL et ajoutez cette ligne (assurez-vous de remplacer $ch
par le type de CURL utilisé par votre code)
curl_setopt($ch, CURLOPT_SSLVERSION, 6); // Force TLS 1.2