Youku Video の開発インターフェイスを必要とするタスクがあります。curl を使用してデータにアクセスして取得したいと考えています。一般的な記述方法に従ってリクエストを記述し、データを出力すると false 値が返されます。最初は、何らかのクロール防止検出などが行われているのかと思いました。useragent パラメーターを追加しても機能しませんでした。後で思ったのですが、インターフェイスの URL は https プロトコルを使用しており、SSL 認証が必要です。その後、インターネットで関連情報を検索して解決策を見つけたので、記録します。
リクエストには、次の 2 行のコードを追加するだけです
php;auto-links:false;">curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
上記のコードは、証明書内の CA 認証とドメイン名認証が必要ないことを示しています
コード全体は以下に添付されています
<?php $ch=curl_init(); $url='https://openapi.youku.com/v2/videos/by_category.json?';//请求接口参数未写完整,不影响代码 curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); $res=curl_exec($ch); $res=json_decode($res,1); var_dump($res);?>
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true); // 只信任CA颁布的证书$cacert=getcwd().'/youku.crt'; //证书的位置curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,1); //// 检查证书中是否设置域名