ホームページ  >  記事  >  バックエンド開発  >  PHP は、curl を使用して https サンプル コードにアクセスします

PHP は、curl を使用して https サンプル コードにアクセスします

怪我咯
怪我咯オリジナル
2017-07-07 09:40:101620ブラウズ

curl は、コマンドラインモードで動作する URL 構文を使用するオープンソースのファイル転送ツールです。ここでは、PHP で https にアクセスするために curl を使用する例を示します。説明の便宜上、行ってみましょう。最初にコードにアクセスします

コード 次のように:

/** 
 * curl POST 
 * 
 * @param   string  url 
 * @param   array   数据 
 * @param   int     请求超时时间 
 * @param   bool    HTTPS时是否进行严格认证 
 * @return  string 
 */  
function curlPost($url, $data = array(), $timeout = 30, $CA = true){    

    $cacert = getcwd() . '/cacert.pem'; //CA根证书  
    $SSL = substr($url, 0, 8) == "https://" ? true : false;  

    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);  
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout-2);  
    if ($SSL && $CA) {  
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书  
        curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是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_HTTPHEADER, array('Expect:')); //避免data数据过长问题  
    curl_setopt($ch, CURLOPT_POST, true);  
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
    //curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); //data with URLEncode  

    $ret = curl_exec($ch);  
    //var_dump(curl_error($ch));  //查看报错信息  

    curl_close($ch);  
    return $ret;    
}


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根证书(用来验证的网站证书是否是CA颁布) 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配

Web サイトの証明書が独自に生成されているか、小規模なオンライン組織によって適用されている場合、アクセス中に厳密な認証が使用される場合、 pass と false は直接返されます。 (ちなみに、 false を返す場合は、curl_error($ch) を出力して、特定の

エラー メッセージ

を表示できます。) このとき、正常なアクセスを確保するために、状況に応じて検証レベルを下げることができます。 例:
コードは次のとおりです:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名(为0也可以,就是连域名存在与否都不验证了)

通常、ブラウザがさまざまなhttps Webサイトにアクセスすると、証明書が信頼されていないというプロンプトが表示されることがあります。実際、これは、これらのWebサイトの証明書が発行されたものではないためです。正式な 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:'));

This主にPOSTデータが長すぎる問題を解決するためのものです

以上がPHP は、curl を使用して https サンプル コードにアクセスしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。