2009-08-01 7 views
2

Le code suivant récupérera le contenu du corps d'une URL récupérée en utilisant CURL en PHP mais pas https. Quelqu'un peut-il me dire comment je modifie le code que j'ai besoin pour obtenir les données retournées, pas seulement l'en-tête. De l'essai j'ai fait ici est le résultat. Vous pouvez voir qu'il a une longueur de contenu, je ne sais pas comment y accéder.Comment faire pour obtenir le contenu du corps de HTTPS en utilisant CURL

Merci Stephen

Erreurs: 0

chaîne

(1457) « HTTP/1.1 200 OK Date: 1 août 2009 06:32:11 GMT Serveur: Apache/1.3.41 (Darwin) PHP/5.2.4 mod_ssl/2.8.31 OpenSSL/0.9.7l Cache-Control: max-age = 60 Expire le: sam, 01 août 2009 06:33:11 GMT Dernière mise à jour: Jeu 23 Nov 2006 17:44 : 53 GMT ETag: "97d620-44b-4565de15" Accept-Ranges: octets Content-Length: 1099 Connection: close Content-type: text/html "

<?php 

$curl_handle=curl_init(); 

$username = ""; 
$password = ""; 

$fullurl = "http://www.queensberry.com"; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_VERBOSE, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_FAILONERROR, 0); 
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
    curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); 
    curl_setopt($ch, CURLOPT_URL, $fullurl); 

    $returned = curl_exec($ch); 

    curl_close ($ch); 
    var_dump($returned); 


?> 

Répondre

7

Voici la solution: Essayez ceci, continuez reste du même code comme ci-dessus ...

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_FAILONERROR, 0); 
// curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); 
curl_setopt($ch, CURLOPT_URL, $fullurl); 

$returned = curl_exec($ch); 

curl_close ($ch); 
var_dump($returned); 

Changer CURLOPT_HEADER à 0 fait en sorte que seul le contenu de la page est retournée.

1

Shou N'a pas $fullurl être "https://www.queensberry.com"?

Lorsque j'ai modifié $fullurl comme indiqué et que j'ai exécuté le code, var_dump a affiché la page "en construction".

+0

Merci Josh Oui, il devrait être https: //, mais cela n'a pas été le problème. Il a besoin de quelques paramètres supplémentaires ajoutés je pense. Un membre de mon équipe l'a fait fonctionner. Je vais devoir l'amener à partager le code ici. Merci –

+1

Serait utile de voir comment vous l'avez fonctionné :) – stormist

1

Si vous avez toujours besoin de l'en-tête, ce qui signifie qu'il n'est pas possible de définir CURLOPT_HEADER sur 0, vous pouvez trouver le début du corps en recherchant une ligne vide (deux CRLF). Voir les spécifications: http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html

ce qui devrait faire le travail:

$data = curl_exec($ch); 
    $start = strpos($data, "\r\n\r\n") + 4; 
    $body = substr($data, $start, strlen($data) - $start); 
0

Je cherche la longueur de l'en-tête en utilisant la getinfo de la boucle. Puis la réponse sous-chaîne:

$info = curl_getinfo($ch); 
$start = $info['header_size']; 
$body = substr($result, $start, strlen($result) - $start); 
Questions connexes