web-dev-qa-db-fra.com

php: Obtenir le code source HTML avec cURL

Comment puis-je obtenir le code source HTML de http://www.example-webpage.com/file.html sans utiliser file_get_contents()?

J'ai besoin de le savoir car sur certains hôtes Web, allow_url_fopen est désactivé et vous ne pouvez pas utiliser file_get_contents(). Est-il possible d'obtenir la source du fichier html avec cURL (si le support cURL est activé)? Si oui, comment? Merci.

19
John Paneth

Essayez ce qui suit:

$ch = curl_init("http://www.example-webpage.com/file.html");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$content = curl_exec($ch);
curl_close($ch);

Je ne recommanderais ceci que pour les petits fichiers. Les gros fichiers sont lus dans leur ensemble et risquent de générer une erreur de mémoire. 

modifier: après discussion dans les commentaires, nous avons découvert que le problème était que le serveur ne pouvait pas résoudre le nom de l’hôte et que la page était en outre une ressource https. Voici donc votre solution temporaire (jusqu’à ce que votre serveradmin corrige la résolution du nom).

ce que j’ai fait, c’est juste cingler graph.facebook.com pour voir l’adresse IP, remplacer le nom d’hôte par l’adresse IP et au lieu de donner l’en-tête manuellement. cela rend cependant le certificat ssl invalide, donc nous devons annuler la vérification par les pairs

//$url = "https://graph.facebook.com/19165649929?fields=name";
$url = "https://66.220.146.224/19165649929?fields=name";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: graph.facebook.com'));
$output = curl_exec($ch);
curl_close($ch); 

n'oubliez pas que l'adresse IP peut changer et qu'il s'agit d'une source précédente. vous devriez aussi faire quelques erreurs en utilisant curl_error ();

32
The Surrican
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);

Source: http://www.christianschenk.org/blog/php-curl-allow-url-fopen/

3
Brad

Essayez http://php.net/manual/en/curl.examples-basic.php :)

<?php

$ch = curl_init("http://www.example.com/");
$fp = fopen("example_homepage.txt", "w");

curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);

$output = curl_exec($ch);
curl_close($ch);
fclose($fp);
?>

Comme le dit la documentation:

L’idée de base des fonctions cURL est que vous initialisez une session cURL à l’aide de curl_init (),, vous pouvez définir toutes vos options de transfert via curl_setopt (), puis vous pouvez exécuter la session avec curl_exec ( ) et ensuite vous terminez votre session en utilisant curl_close ().

3
phidah

J'ai trouvé un outil dans Github qui pourrait éventuellement être une solution à cette question. https://incarnate.github.io/curl-to-php/ J'espère que cela vous sera utile

0
Ahmet Sina Ustem