[cUrl] Récupérer PDF [Résolu/Fermé]

Signaler
Messages postés
12
Date d'inscription
jeudi 23 juin 2005
Statut
Membre
Dernière intervention
17 octobre 2017
-
Messages postés
12
Date d'inscription
jeudi 23 juin 2005
Statut
Membre
Dernière intervention
17 octobre 2017
-
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 :)

1 réponse

Messages postés
32071
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 avril 2021
3 395
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);
}

Messages postés
12
Date d'inscription
jeudi 23 juin 2005
Statut
Membre
Dernière intervention
17 octobre 2017

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ù...
Messages postés
12
Date d'inscription
jeudi 23 juin 2005
Statut
Membre
Dernière intervention
17 octobre 2017

up
Messages postés
12
Date d'inscription
jeudi 23 juin 2005
Statut
Membre
Dernière intervention
17 octobre 2017

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);