[cUrl] Récupérer PDF

Résolu/Fermé
Grmi91 Messages postés 12 Date d'inscription jeudi 23 juin 2005 Statut Membre Dernière intervention 17 octobre 2017 - 11 oct. 2017 à 10:15
Grmi91 Messages postés 12 Date d'inscription jeudi 23 juin 2005 Statut Membre Dernière intervention 17 octobre 2017 - 16 oct. 2017 à 09:59
Bonjour,

Je souhaiterais récupérer un fichier pdf via cUrl en PHP (tout ça en toute légalité hein !).
Par exemple, imaginons que je souhaite télécharger les règles de la FFF, voici mon code :


$url="https://www.fff.fr/static/uploads/media/cms_pdf/0003/45/5e2b118eaf76375f5bfa27ed9cbe43ea92c51f12.pdf";

$fp = fopen("test.pdf", 'w');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);
$data = curl_exec($ch);
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);
print_r(curl_getinfo($ch));
curl_close($ch);
fclose($fp);

if ($curl_errno > 0) {
echo "<br/><br/>cURL Error ($curl_errno): $curl_error\n";
} else {
echo "<br/><br/>Data received: $data\n";
}


Sauf que ça ne fonctionne pas, ça met : "cURL Error (7): Failed to connect to www.fff.fr port 443: Timed out"

Il s'agirait donc d'un problème de connexion sur le site en question (j'ai la même erreur avec d'autres sites).

Y a-t-il malgré tout un moyen pour récupérer des PDF sur des sites distants ?

Merci par avance pour votre aide :)
A voir également:

1 réponse

jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
11 oct. 2017 à 14:18
Bonjour,

Normalement.... pas besoin de curl.
Juste un truc du genre
/**
* $url (string) : chemin vers le fichier à récupérer
* $desti (string) : chemin (avec nom du fichier) de destination du fichier
*/
function downloadFile($url, $desti) {
    $file= file_get_contents($url);
    file_put_contents ($desti, $file);
}

0
Grmi91 Messages postés 12 Date d'inscription jeudi 23 juin 2005 Statut Membre Dernière intervention 17 octobre 2017
Modifié le 11 oct. 2017 à 14:31
Bonjour Jordane45,

Déjà merci pour ta réponse.

J'avais déjà essayé et ça ne marche pas non plus : "Warning: file_get_contents(https://www.fff.fr/static/uploads/media/cms_pdf/0003/45/5e2b118eaf76375f5bfa27ed9cbe43ea92c51f12.pdf): in C:\wamp\www\test.php".
J'ai essayé sur plusieurs sites mais ça ne fonctionne avec aucun.

Pour en revenir à cUrl, en passant par le proxy de ma boîte (
curl_setopt($ch, CURLOPT_PROXY, "xxx.xxx.xxx.xxx:8080");
), ça a l'air de mieux fonctionner mais toujours une erreur : "cURL Error (56): Received HTTP code 403 from proxy after CONNECT".

Je dois avoir un blocage quelque part (j'utilise wampserver) mais je sais pas où...
0
Grmi91 Messages postés 12 Date d'inscription jeudi 23 juin 2005 Statut Membre Dernière intervention 17 octobre 2017
12 oct. 2017 à 09:10
up
0
Grmi91 Messages postés 12 Date d'inscription jeudi 23 juin 2005 Statut Membre Dernière intervention 17 octobre 2017
16 oct. 2017 à 09:59
Pour ceux que ça intéresse, j'ai fini par y arriver.
Il suffisait en fait de mettre CURLOPT_HTTPPROXYTUNNEL à FALSE (et non pas à true) :
$urlPDF	= 'https://www.fff.fr/static/uploads/media/cms_pdf/0003/45/5e2b118eaf76375f5bfa27ed9cbe43ea92c51f12.pdf'; 

$timeout = 10;
$proxy_host = 'host:port';
$proxy_ident = 'username:password';

$fp = fopen("test.pdf", "w");
$ch = curl_init($urlPDF);

curl_setopt($ch, CURLOPT_FILE, $fp);

// pour les liens HTTPS
if (preg_match('`^https://`i', $urlPDF)){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
}


// Temps max d'execution
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

// Temps a attendre durant la tentative de connexion
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

// Retourne le transfert sous forme de chaine
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Activation de l'utilisation d'un serveur proxy
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, false);

// Définition de l'adresse du proxy
curl_setopt($ch, CURLOPT_PROXY, $proxy_host);

// Définition des identifiants si le proxy requiert une identification
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy_ident);

$resultat = curl_exec ($ch);

fwrite($fp, $resultat);

curl_close($ch);
fclose($fp);
0