curl ist ein Open-Source-Dateiübertragungstool, das die URL-Syntax verwendet, um im Befehlszeilenmodus zu arbeiten. Hier ist ein Beispiel für die Verwendung von cURL für den Zugriff auf https in PHP 🎜> Der Einfachheit halber beginnen wir mit dem Code.
Der Code lautet wie folgt:
/** * 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; }
Wenn die URL Die Adresse beginnt mit https, dann verwenden Sie SSL, andernfalls verwenden Sie das normale HTTP-Protokoll.
Ist es
sicher, wenn ich HTTPS verwende? Tatsächlich verfügt SSL auch über verschiedene Verifizierungsstufen. Muss ich beispielsweise den allgemeinen Namen im Zertifikat überprüfen? (Übrigens: Common Name (Common Name) bedeutet im Allgemeinen, dass Sie den Domainnamen (Domain) oder Subdomainnamen (Subdomain) eingeben, für den Sie ein SSL-Zertifikat beantragen möchten.)
Brauchen Sie? um den Hostnamen zu überprüfen?
Vertrauen Sie irgendeinem Zertifikat oder nur denen, die von der Zertifizierungsstelle ausgestellt wurden?
(Ich habe es gelöscht, der Akku ist fast leer, ich habe nur die wichtigsten Punkte erwähnt - -|||)
Wenn das Website-SSL-Zertifikat von einer Zertifizierungsstelle gekauft wird (normalerweise teurer) , dann können Sie beim Zugriff eine strengere Authentifizierung verwenden, das heißt:
Der Code lautet wie folgt:curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // 只信任CA颁布的证书 curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布) curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配
anzuzeigen.) Zu diesem Zeitpunkt können Sie die Überprüfungsstufe je nach Situation reduzieren, um einen normalen Zugriff sicherzustellen. zum Beispiel:
Der Code lautet wie folgt:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名(为0也可以,就是连域名存在与否都不验证了)
Verschiedene Browser auf dem Markt verfügen über integrierte CA-Stammzertifikatslisteninformationen. Beim Besuch von Websites mit von einer Zertifizierungsstelle ausgestellten Zertifikaten werden die Zertifikate dieser Websites anhand des Stammzertifikats überprüft, sodass es keine solchen gibt prompt.
Die CA-Stammzertifikatdatei enthält tatsächlich die öffentlichen Schlüsselzertifikate jeder großen CA-Organisation, die verwendet wird, um zu überprüfen, ob das Zertifikat der Website von diesen Organisationen ausgestellt wurde.
Die Datei hier ist aus dem Quellbaum von Mozilla abgeleitet und in eine Zertifikatsdatei im PEM-Format konvertiert. (Sie können das fertige http://curl.haxx.se/ca/cacert.pem hier herunterladen)
Lassen Sie uns abschließend über etwas sprechen, das nichts mit SSL zu tun hat:
Der Code lautet wie folgt:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
Das obige ist der detaillierte Inhalt vonPHP verwendet Curl, um auf den https-Beispielcode zuzugreifen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!