Ich möchte mithilfe der YouTube-Daten-API eine Liste von Videos sammeln, die auf einem bestimmten Kanal hochgeladen wurden. Bevor ich jedoch online implementiere, versuche ich, meinen Code in einer Offline-Umgebung (WAMPserver, PHP 5.5.12, Apache 2.4.9) zum Laufen zu bringen. Ich verwende den folgenden Code:
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);
Es gibt jedoch den folgenden Fehler:
Schwerwiegender Fehler: Nicht erfasste Ausnahme 'GuzzleHttp\Exception\RequestException' mit der Nachricht 'cURL-Fehler 60: Problem mit SSL-Zertifikat: Kein lokales Ausstellerzertifikat abrufbar (siehe
http://curl.haxx.se/libcurl/c/libcurl-errors.html
)'
Ich habe versucht, die neueste Version von cacert.pem
hinzuzufügen, da die meisten Themen auf SO als Lösung anbieten, jedoch ohne Erfolg.
Wenn Sie Windows Xampp verwenden. Ich klaue eine bessere Antwort aus hier , wäre hilfreich, wenn Google Ihnen diese Frage zuerst zeigt.
download und Extrahieren für cacert.pem hier (sauberes Dateiformat/Daten)
steck es in:
C:\xampp\php\extras\ssl\cacert.pem
Fügen Sie diese Zeile Ihrer php.ini hinzu
curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"
starten Sie Ihren Webserver/Apache neu
Da ich eine lokale Umgebung verwende, kann ich SSL sicher deaktivieren. Dazu habe ich Folgendes verwendet:
$guzzleClient = new \GuzzleHttp\Client(array( 'curl' => array( CURLOPT_SSL_VERIFYPEER => false, ), ));
$client->setHttpClient($guzzleClient);
Wo $client
ist mein Google_Client ().
$guzzleClient = new \GuzzleHttp\Client(['verify' => false]);
Guzzle Version 6
Sie können sich auf Guzzle Docs unter beziehen
http://docs.guzzlephp.org/de/latest/request-options.html#verify
Ich arbeite mit xamps nichts von dem, was für mich gearbeitet hat
Ich habe es versucht und es hat funktioniert
vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php
öffnenund ändern Sie dies
$conf[CURLOPT_SSL_VERIFYHOST] = 2;
$conf[CURLOPT_SSL_VERIFYPEER] = true;
zu diesem
$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = FALSE;
wenn Sie diese Datei aktualisieren, gehen die Änderungen verloren
$guzzleClient = new \GuzzleHttp\Client(['verify' => false]);
es hat auch für mich funktioniert, indem ich das cert aus der link https://Gist.github.com/VersatilityWerks/5719158/download dann Speichern Sie es in C:\xampp\php\extras\ssl .__ und bearbeiten Sie dann php.ini. Um schnell Php.ini zu erhalten, sehen Sie die Abbildung unten Geben Sie hier die Bildbeschreibung ein
Dann STOPPEN und den Apache erneut starten. es hat gut funktioniert !!!
für das Wesentliche der Entwicklung und des Testens haben Sie zwei Möglichkeiten zur schnellen Behebung
- Benutzen
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => false]); //where $url is your http address
- folgen Sie @Pham Huy. Anh Antwort oben, dann tun Sie dies
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => 'C:\xampp\php\extras\ssl\cacert.pem']);
Hoffe es hilft jemandem.
Für PCI-DSS 3.1 ist alles SSL nur für TLS 1.2 erforderlich, sodass viele Anbieter einfach alles außer TLS 1.2 deaktivieren. Ich bin auf ein Problem dieser Art gestoßen, bei dem CURL den Fehler beim Downgrade von Handshakes als Fehler beim Überprüfen des SSL-Zertifikats sah. Versuchen Sie herauszufinden, wo Ihr Code den CURL-Aufruf ausführt, und fügen Sie diese Zeile hinzu (ersetzen Sie unbedingt $ch
mit dem von Ihnen verwendeten CURL-Code).
curl_setopt($ch, CURLOPT_SSLVERSION, 6); // Force TLS 1.2