Cet article partage principalement avec vous comment utiliser CURL en PHP pour accéder à HTTPS. Il partage principalement avec vous la méthode de code. J'espère qu'il pourra aider tout le monde.
Pour faciliter l'explication, commençons par le code~ Il s'agit d'une fonction reconditionnée aujourd'hui
/** * 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; }
Si l'adresse URL commence par https, utilisez SSL, sinon utilisez le protocole HTTP ordinaire .
Est-il sécuritaire d'utiliser 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 signifie généralement renseigner le nom de domaine (domaine) ou le sous-domaine (sous-domaine) pour lequel vous allez demander un certificat SSL.)
Devez-vous vérifier le nom d'hôte ?
Faites-vous confiance à un certificat ou uniquement à ceux émis 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 :
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // 只信任CA颁布的证书 curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布) curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配
Si le certificat du site Web est généré par vous-même ou demandé par une petite organisation en ligne, alors si vous utilisez une authentification stricte lorsque y accéder ne passera pas et retournera false directement. (D'ailleurs, lorsque false est renvoyé, 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 :
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名(为0也可以,就是连域名存在与否都不验证了)
Habituellement, nous utilisons un navigateur. Lorsque vous visitez divers sites Web https, vous rencontrerez 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 émis 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 fichier prêt à l'emploi ici http://curl.haxx.se/ca/cacert.pem)
Enfin, parlons de quelque chose qui n'a rien à voir avec SSL :
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
Recommandations associées :
php utilise curl pour accéder à l'exemple de code https
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!