Heim  >  Artikel  >  Backend-Entwicklung  >  PHP verwendet Curl, um auf den https-Beispielcode zuzugreifen

PHP verwendet Curl, um auf den https-Beispielcode zuzugreifen

怪我咯
怪我咯Original
2017-07-07 09:40:101572Durchsuche

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:


Wenn das Zertifikat der Website von generiert wird selbst, oder wenn es von einer kleinen Online-Institution angewendet wird und während des Zugriffs eine strikte Authentifizierung verwendet wird, wird es nicht bestanden und falsch wird direkt zurückgegeben. (Übrigens, wenn Sie false zurückgeben, können Sie curl_error($ch) drucken, um die spezifische
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书 
curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布) 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配
Fehlermeldung

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:

Wenn wir normalerweise einen Browser verwenden, um auf verschiedene https-Websites zuzugreifen, stoßen wir manchmal auf die Meldung, dass das Zertifikat nicht vertrauenswürdig ist Tatsächlich liegt es daran, dass die Zertifikate dieser Websites nicht von offiziellen CA-Organisationen ausgestellt werden.
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:

Dies dient hauptsächlich dazu, das Problem zu langer Daten während des POST zu lösen
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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn