YouTube Data APIを使用して、特定のチャンネルにアップロードされた動画のリストを収集したい。ただし、オンラインで実装する前に、コードをオフライン環境で実行しようとしています(WAMPserver、PHP 5.5.12、Apache 2.4.9)。次のコードを使用しています。
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);
ただし、次のエラーが発生します。
致命的エラー:メッセージ「cURLエラー60:SSL証明書の問題:ローカル発行者証明書を取得できません(
http://curl.haxx.se/libcurl/c/libcurl-errors.html
」を参照)を含むキャッチされない例外 'GuzzleHttp\Exception\RequestException'
SOソリューションとして提供していますが、役に立たない)のほとんどのトピックとして、cacert.pem
の最新バージョンを追加しようとしました。
Xamppを使用してWindowsを使用している場合、 here からより良い答えを盗んでいます。Googleが最初にこの質問を示してくれると助かります。
ここからcacert.pemをダウンロードして抽出します(クリーンなファイル形式/データ)
中に入れて :
C:\ xampp\php\extras\ssl\cacert.pem
この行をphp.iniに追加します
curl.cainfo = "C:\ xampp\php\extras\ssl\cacert.pem"
ウェブサーバー/ Apacheを再起動します
ローカル環境を使用しているのを見て、SSLを安全に無効にできます。これは次の方法で行いました。
$guzzleClient = new \GuzzleHttp\Client(array( 'curl' => array( CURLOPT_SSL_VERIFYPEER => false, ), ));
$client->setHttpClient($guzzleClient);
どこ $client
は私のGoogle_Client()です。
$guzzleClient = new \GuzzleHttp\Client(['verify' => false]);
Guzzleバージョン6
Guzzle Docsを参照できます
http://docs.guzzlephp.org/en/latest/request-options.html#verify
私はxampsで作業します
私はこれを試してみたが、うまくいった
vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php
これを変える
$conf[CURLOPT_SSL_VERIFYHOST] = 2;
$conf[CURLOPT_SSL_VERIFYPEER] = true;
これに
$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = FALSE;
このファイルを更新した場合、変更は失われます一時的なソリューションです
$guzzleClient = new \GuzzleHttp\Client(['verify' => false]);
リンクから証明書をダウンロードすることでも機能しました https://Gist.github.com/VersatilityWerks/5719158/download 次にC:\ xampp\php\extras\sslに保存して編集php.ini。 Php.iniをすばやく取得するには、下の図を参照してください ここに画像の説明を入力してください
次に、Apacheを停止して再起動します。それはうまくいきました!!!
開発とテストの本質については、迅速な修正のための2つのオプションがあります
- つかいます
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => false]); //where $url is your http address
- 上記の@Pham Huy Anhの回答に従ってください。
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => 'C:\xampp\php\extras\ssl\cacert.pem']);
それが誰かを助けることを願っています。
PCI-DSS 3.1はすべてのSSLにTLS 1.2のみを要求するため、多くのプロバイダーは単にTLS 1.2以外のすべてをオフにします。私は、CURLがハンドシェイクのダウングレードの失敗をSSL証明書の検証の失敗と見なすこの種の問題に遭遇しました。コードがCURL呼び出しを行っている場所を見つけて、この行を追加してみてください(必ず$ch
コードが使用するCURLハンドルを含む)
curl_setopt($ch, CURLOPT_SSLVERSION, 6); // Force TLS 1.2