PHP utilise curl pour accéder à l'exemple de code https

怪我咯
Libérer: 2023-03-12 22:56:01
original
1637 Les gens l'ont consulté

curl est un outil de transfert de fichiers open source qui utilise la syntaxe URL pour fonctionner en mode ligne de commande. Voici un exemple d'utilisation de curl pour accéder à https en PHP. Veuillez vous y référer

<.> pour plus de commodité Explication, commençons par le code

Le code est le suivant :

/** 
 * 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() . &#39;/cacert.pem&#39;; //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(&#39;Expect:&#39;)); //避免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;    
}
Copier après la connexion


Si l'URL l'adresse commence par https, puis utilisez SSL, sinon utilisez le protocole HTTP ordinaire.

Est-ce

sûr si j'utilise HTTPS ? En fait, SSL comporte également différents niveaux de vérification.

Par exemple, dois-je vérifier le nom commun dans le certificat ? (BTW : Common Name (Common Name) signifie généralement renseigner le nom de domaine (domaine) ou le nom de sous-domaine (sous-domaine) pour lequel vous allez demander un certificat SSL.)

Avez-vous besoin vérifier le nom d'hôte?

Faites-vous confiance à un certificat ou uniquement à ceux délivrés par l'autorité de certification ?

(Je l'ai essuyé, la batterie est presque morte, je n'ai mentionné que les points clés - -|||)

Si le certificat SSL du site Web est acheté auprès d'une autorité de certification (généralement plus cher) , vous pouvez alors utiliser une authentification plus stricte lors de l'accès, c'est-à-dire :

Le code est le suivant :

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书 
curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布) 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配
Copier après la connexion
Si le certificat du site Web est généré par lui-même, ou s'il est appliqué par une petite institution en ligne, si une authentification stricte est utilisée lors de l'accès, il ne passera pas et false sera renvoyé directement. (D'ailleurs, lorsque vous renvoyez false, vous pouvez imprimer curl_error($ch) pour afficher le

message d'erreur spécifique.) À ce stade, vous pouvez réduire le niveau de vérification en fonction de la situation pour garantir un accès normal, par exemple :

Le code est le suivant :

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名(为0也可以,就是连域名存在与否都不验证了)
Copier après la connexion
Lorsque nous utilisons habituellement un navigateur pour accéder à divers sites Web https, nous rencontrons parfois un message indiquant que le certificat n'est pas fiable En fait, cela est dû au fait que les certificats de ces sites Web ne sont pas délivrés par des organisations formelles d'autorité de certification.

Divers navigateurs sur le marché intègrent des informations sur la liste des certificats racines de l'autorité de certification. Lors de la visite de sites Web avec des certificats émis par une autorité de certification, les certificats de ces sites Web seront vérifiés en fonction du certificat racine, cette invite n'apparaîtra donc pas. .

Concernant le fichier de certificat racine de l'AC, il contient en fait les certificats de clé publique de chaque grande organisation de l'AC, qui est utilisé pour vérifier si le certificat du site Web est émis par ces organisations.

Le fichier ici est dérivé de l'arborescence des sources de Mozilla et converti en fichier de certificat au format PEM. (Vous pouvez télécharger le ready-made http://curl.haxx.se/ca/cacert.pem ici)

Enfin, parlons de quelque chose sans rapport avec SSL :


Le code est le suivant :

curl_setopt($ch, CURLOPT_HTTPHEADER, array(&#39;Expect:&#39;));
Copier après la connexion
C'est principalement pour résoudre le problème des données trop longues lors du POST

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal