Maison >développement back-end >tutoriel php >PHP utilise curl pour accéder à l'exemple de code https
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 codeLe 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() . '/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; }
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); // 检查证书中是否设置域名,并且是否与提供的主机名匹配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 :
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名(为0也可以,就是连域名存在与否都不验证了)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 :
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));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!