PHP は、curl を使用して https にアクセスするサンプルの共有_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:40:46
オリジナル
852 人が閲覧しました

説明の便宜上、最初にコードを示します

コードをコピーします コードは次のとおりです:

/**
*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://" ? $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 ルート証明書 (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_HT TPHEADER, array('Expect :')); //データが長すぎる問題を回避します
curl_setopt($ch, CURLOPT_POST, true);
//curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data) )); //URLEncode を含むデータ

$ret =curl_exec($ch)
//var_dump(curl_error($ch));メッセージ

curl_close($ch);
$ret を返す }



URL アドレスが https で始まる場合は SSL を使用し、それ以外の場合は通常の HTTP プロトコルを使用します。

HTTPS を使用しても安全ですか?実際、SSL にもさまざまなレベルの検証があります。
たとえば、証明書内の共通名を確認する必要がありますか? (ちなみに、コモンネームとは通常、SSL 証明書を申請するドメイン名 (ドメイン) またはサブドメイン名 (サブドメイン) を入力することを意味します。)

ホスト名を確認する必要がありますか?

どの証明書も信頼しますか、それとも CA によって発行された証明書のみを信頼しますか?

(拭きました、バッテリーはほぼ空です、重要な点だけ述べました - -|||)

Web サイトの 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) を出力して、特定のエラー メッセージを表示できます。) このとき、正常なアクセスを確保するために、状況に応じて検証レベルを下げることができます。例:



コードをコピーします
コードは次のとおりです:


curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false) // 証明書を信頼します curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // ドメイン名が正しいかどうかを確認します。証明書に設定されている(0でも問題ありませんが、ドメイン名の存在は確認されていません)

通常、ブラウザを使用してさまざまな https ウェブサイトにアクセスすると、証明書が信頼できないというプロンプトが表示されることがあります。これは、実際には、これらのウェブサイトの証明書が正式な CA 組織によって発行されていないためです。

市場のさまざまなブラウザには、CA ルート証明書リスト情報が組み込まれています。CA が発行した証明書を持つ Web サイトにアクセスすると、これらの Web サイトの証明書はルート証明書に基づいて検証されるため、そのようなプロンプトは表示されません。

CA ルート証明書ファイルに関しては、実際には各主要な CA 組織の公開鍵証明書が含まれており、Web サイトの証明書がこれらの組織によって発行されたものであるかどうかを確認するために使用されます。

ここでのファイルは、mozilla のソース ツリーから派生し、PEM 形式の証明書ファイルに変換されます。 (既製のものはここからダウンロードできます http://curl.haxx.se/ca/cacert.pem)

最後に、SSL とは関係のない話をしましょう:

コードをコピーします コードは次のとおりです:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));

これは主に、POST中のデータが長すぎる問題を解決するためです

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/710604.html技術記事説明の便宜上、最初にコードにアクセスして、次のようにコードをコピーします。 /** *curl POST * * @param string url * @param array data * @param int request timeout * @param bool いつ入力するかHTTPS を使用しています...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート