/** *curl POST * * @param string url * @param array data
* @param int リクエストタイムアウト * @param bool HTTPS 時に厳密な認証を行うかどうか
* @return string
*/
functioncurlPost($url, $data = array(), $timeout = 30, $CA = true){
$cacert = getcwd () . '/cacert.pem'; //CA ルート証明書
$SSL = substr($url, 0, 8) == "https://" ? false;
$ch =curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
if ($SSL && $CA) {
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, true); // CA によって発行された証明書のみを信頼します
curl_setopt($ch, CURLOPT_CAINFO, $cacert) // CA ルート証明書 ($ch, CURLOPT_CAINFO, $cacert); Web サイトの証明書は CA によって発行されます)
curl_setopt($ch , CURLOPT_SSL_VERIFYHOST, 2) // ドメイン名が証明書に設定されているかどうか、および指定されたホスト名と一致するかどうかを確認します
} else if ($SSL && !$CA); {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 任意の証明書を信頼します
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1) // 証明書にドメイン名が設定されているかどうかを確認します
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEA DER, array('Expect:')) ; //長すぎるデータの問題を回避する
curl_setopt($ch, CURLOPT_POSTFIELDS, $) data);
//curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); / /URLEncode 付きのデータ
$ret =curl_exec($ch)
//var_dump(curl_error($ch));エラーメッセージ
curl_close($ch);
return $ret;
}
If URL アドレスが https で始まる場合は SSL を使用し、それ以外の場合は通常の HTTP プロトコルを使用します。
HTTPS を使用しても安全ですか?実際、SSL にもさまざまなレベルの検証があります。
たとえば、証明書内の共通名を確認する必要がありますか? (ちなみに、コモンネームとは通常、SSL 証明書を申請するドメイン名 (ドメイン) またはサブドメイン (サブドメイン) を入力することを意味します。)
ホスト名を確認する必要がありますか?
どの証明書も信頼しますか、それとも CA によって発行された証明書のみを信頼しますか?
(拭きました、バッテリーがほとんど切れていました、重要なポイントだけを抜粋しました - -|||)
ウェブサイトの SSL 証明書が CA から購入されている場合 (通常はより高価です)、より厳格になる可能性があります証明書にアクセスするとき、つまり:
コードをコピーします
コードは次のとおりです:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true) // CA によって発行された証明書のみを信頼しますcurl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA ルート証明書 (Web サイト証明書が CA によって発行されたかどうかを確認するために使用されます)
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2) // 証明書にドメイン名が設定されているかどうかを確認します。指定されたホスト名と一致します Web サイトの証明書が自分で生成されている場合、または小規模なオンライン組織によって適用されている場合、アクセス時に厳密な認証を使用すると、証明書は通過せず、直接 false が返されます。 (ちなみに、 false が返された場合は、curl_error($ch) を出力して、特定のエラー メッセージを表示できます。) このとき、正常なアクセスを確保するために、状況に応じて検証レベルを下げることができます。例: コードをコピーします コードは次のとおりです: 通常、ブラウザを使用してさまざまな https ウェブサイトにアクセスすると、証明書が正しくないというプロンプトが表示されることがあります。実際、これらの Web サイトの証明書は正式な CA 組織によって発行されていないためです。 市場のさまざまなブラウザには CA ルート証明書リスト情報が組み込まれており、CA が発行した証明書を持つ Web サイトにアクセスすると、これらの Web サイトの証明書はルート証明書に基づいて検証されるため、そのようなプロンプトは表示されません。 CA ルート証明書ファイルに関しては、実際には各主要な CA 組織の公開鍵証明書が含まれており、Web サイトの証明書がこれらの組織によって発行されたものであるかどうかを確認するために使用されます。 ここでのファイルは、mozilla のソース ツリーから派生し、PEM 形式の証明書ファイルに変換されます。 (既成の http://curl.haxx.se/ca/cacert.pem はここからダウンロードできます) 最後に、SSL とは関係のない話をさせてください: コードをコピーしますは次のとおりです: これは主に、POST中にデータが長すぎる問題を解決するためです
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false) // 証明書を信頼します
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); // ドメイン名が正しいかどうかを確認します。が証明書に設定されています (0 は問題ありませんが、ドメイン名が存在するかどうかさえ検証されません) )
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
上記は、PHP で https にアクセスするためのcurl の使用例を、関連する内容も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。