Activer la connexion SSL https dans cURL de PHP (en-tête vide)

Je suis en train d'écrire un script cURL pour les jours à des taux d'intérêt de la Fannie Mae site web qui est en https. Je n'ai pas été en mesure d'obtenir le passé de la CURLOPT_SSL_VERIFYPEER, true); option.

Aucun nom d'utilisateur ou mot de passe est requis, cependant j'ai besoin de vérification SSL activé.

Tests sur XAMPP serveur de dev.

J'ai téléchargé le .crt et .pem certs à partir du site web à l'aide de FF et les a sauvés de la même source dir et pointu à la fois à l'aide de CURLOPT_CAINFO, pas de chance

J'ai téléchargé la dernière cacert.fichier pem de http://curl.haxx.se/ca/cacert.pem et a souligné que bien que l'aide de CURLOPT_CAINFO, pas de chance.

Si je tourne CURLOPT_SSL_VERIFYPEER, pour de faux, je peux récupérer l'en-tête (voir ci-dessous), cependant quand je l'ai mis à vrai, il n'y a pas d'en-tête.

Tenté d'environ 7-8 solutions trouvées par la recherche sur le long avec la lecture du php documention sur le roulage et d'essayer plusieurs solutions de contournement, pas de chance.

J'ai besoin d'être en mesure de récupérer l'en-tête et, finalement, le corps à l'aide de CURLOPT_SSL_VERIFYPEER, vrai

Toute aide est appréciée.

<?php

//script is designed to access an https site and retrieve the last table showing the most recent 90 day commitment for the Fannie Mae 30 year fixed rate mortgage.  Site is designed to work with cookies and has a valid SSL cert.

//turn error reporting on
error_reporting(E_ALL); ini_set("display_errors", 1); 

//cookie file name/location
$cookie_file_path = "cookies.txt";

//verify if cookie file is accessible and writable
if (! file_exists($cookie_file_path) || ! is_writable($cookie_file_path))
{
    echo 'Cookie file missing or not writable.';
    exit;
}

//url connection
$url = "https://www.fanniemae.com/content/datagrid/hist_net_yields/cur30.html";

//Initiate connection
$ch = curl_init();

//Set cURL and other options
curl_setopt($ch, CURLOPT_URL, $url); //set url
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); //set browser/user agent
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //automatically follow Location: headers (ie redirects)
curl_setopt($ch, CURLOPT_AUTOREFERER, 1); //auto set the referer in the event of a redirect
curl_setopt($ch, CURLOPT_MAXREDIRS, 5); //make sure we dont get stuck in a loop
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); //10s timeout time for cURL connection
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //allow https verification if true
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); //check common name and verify with host name
curl_setopt($ch, CURLOPT_SSLVERSION,3); //verify ssl version 2 or 3
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "VeriSignClass3PublicPrimaryCertificationAuthority-G5.pem"); //allow ssl cert direct comparison
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'read_header'); //get header
curl_setopt($ch, CURLOPT_NOBODY, true); //exclude body
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); //set new cookie session
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); //file to save cookies in
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); //file to read cookies in

//grab URL and pass it to the browser
curl_exec($ch);

//close cURL connection, save cookie file, free up system resources
curl_close($ch);

//show header
function read_header($ch, $string) {
    print "Received header: $string";
    return strlen($string);
}
?>

C'est le header qui est reçu si CURLOPT_SSL_VERIFYPEER est définie sur false, à blanc si la valeur est true

Reçu d'en-tête: HTTP/1.1 200 OK
En-tête reçu: Date: Thu, 19 Sep 2013 00:40:16 GMT
Reçu d'en-tête: Server: Apache
Reçu d'en-tête: Set-Cookie: JSESSIONID=4297C1E1760A836F691FE821FBF8B805.cportal-cl01; Path=/; de la sécurité; HttpOnly
Reçu d'en-tête: Cache-Control: no-store
Reçu d'en-tête: Expire le: Mer, 31 Déc 1969 23:59:59 GMT
Reçu d'en-tête: Pragma: no-cache
Reçu d'en-tête: X-FRAME-OPTIONS: SAMEORIGIN
Reçu d'en-tête: Content-Language: fr-fr
Reçu en-tête Content-Length: 9344
Reçu d'en-tête: Content-Type: text/html;charset=ISO-8859-1
Reçu d'en-tête:

Je viens de découvrir que le OSX version de curl dans mavericks (et je suppose que ci-dessus), les pauses SSL appelle quand il n'y a aucun intermédiaires (c'est à dire votre fichier pem). Voir: curl.haxx.se/mail/archive-2013-10/0036.html. Je ne suis pas sûr si XAMPP sur OSX utilise ses propres curl ou OSX. MAMP utilise son propre (ce qui signifiait que je devais exécuter mon script à l'aide de l'un des MAMP PHP interprètes)
Vérifier ma réponse: stackoverflow.com/a/46138906/3063226

OriginalL'auteur Optionwiz | 2013-09-19