télécharger un fichier depuis MU sur mon serveur web

Eléphanteau du PHP | 13 Messages

09 janv. 2008, 10:58

Salut tout le monde,

j'espère trouver ici une bonne âme qui sera m'aider pour un petit pb...


je cherche à faire un script qui me permet de télécharger un fichier depuis megaupload sur mon serveur web (et mon sur mon PC !!!).

J'ai réussi à programmer la première partie du script qui me permet, grâce à mon compte premium, de générer le "lien de téléchargement premium" (du style http://www66.megaupload.com/files/75ef2 ... 000001.txt) à partir du lien MU classique (du style http://www.megaupload.com/?d=R1PJB8WB).

Là où je bloque, c'est pour faire le téléchargement du fichier sur mon serveur web.

J'ai bien essayé de regarder les header qui sont envoyé quand je fais le téléchargement depuis firefox (cf. ci-dessous) mais je vous avouerai que je sais pas quoi en faire !!!! (Et oui, mes connaissances en php sont relativement réduites : j'ai appris en autodidacte !). Voici donc les header envoyé :

Code : Tout sélectionner

http://www66.megaupload.com/files/75ef240f01f9ec59b987c1167e518a68/File_000001.txt GET /files/75ef240f01f9ec59b987c1167e518a68/File_000001.txt HTTP/1.1 Host: www66.megaupload.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: fr Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://www.megaupload.com/fr/?d=R1PJB8WB Cookie: user=0cf4c85e2871598ab02155796fccb272; v=1; l=fr HTTP/1.x 200 OK Server: Apache/1.3.37 (Debian GNU/Linux) PHP/4.4.7 Etag: "R1PJB8WB" Content-Type: application/octet-stream Content-Length: 5 content-disposition: attachment Cache-Control: private Content-Transfer-Encoding: binary Accept-Ranges: bytes

J'ai bien codé un petit script php qui me permet de générer un header comme celui-là, mais qu'est-ce que j'en fais ??? C'est là toute la question !!!
Et puis comment récupérer le fichier sur MU dans un fichier sur mon serveur web ???


Petite précision, je sais qu'il existe un script qui s'appelle Rapidleech qui permet de faire ça (je l'utilise régulièrement et c'est ok) mais, comme je souhaite faire un téléchargement "automatisé" de beaucoup de fichiers à la suite, je voudrais éviter de passer par ce script une fois mon "lien premium" généré.
J'ai bien essayé de regarder et d'adapter le code de ce script mais, là encore, mes compétences n'ont pas réussi à venir à bout de mon problème de ce coté là !!!


Voilà... Merci d'avance de votre aide
Modifié en dernier par flashy38 le 10 janv. 2008, 10:03, modifié 1 fois.

ViPHP
ViPHP | 5924 Messages

09 janv. 2008, 11:01

Regarde vers les fonctions fsockopen() ou encore vers la librairie curl

ViPHP
ViPHP | 928 Messages

09 janv. 2008, 18:12

Théoriquement si tu veux simplement télécharger un fichier dont tu connais l'adresse, il te suffit de faire un

Code : Tout sélectionner

file_get_contents('adresse_du_fichier');
car il supporte HTTP.

Maintenant si tu as besoin de t'authentifier (cookies, post) avant de pouvoir téélcharger, utilise la librairie CURL, comme l'a dit Sékiltoyai, qui permet de lancer facilement des requêtes HTTP.

Eléphanteau du PHP | 13 Messages

10 janv. 2008, 09:53

j'ai bien essayé avec file_get_contents :

Code : Tout sélectionner

file_get_contents(http://www66.megaupload.com/files/75ef240f01f9ec59b987c1167e518a68/File_000001.txt)
mais sans succès :

Code : Tout sélectionner

file_get_contents(http://www21.megaupload.com/files/b1b490f8c6d2e9a323401008c0f54ca6/File_000001.txt) : failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
Pour ce qui est de Curl, je ne connais pas la syntaxe pour récupérer un fichier... Est-ce que c'est la même que pour récupérer le code d'une page web ???

Je suis également en train d'essayer avec fsockopen mais je rame un peu... (d'ailleurs, fsockopen n'est-il pas l'équivalent de Curl ???)

Petite question subsidiaire :
dans le header ci-dessus, la première partie est bien la requête envoyée et la seconde partie la réponse retournée par le serveur ??? C'est bien ça ??

ViPHP
ViPHP | 5924 Messages

10 janv. 2008, 10:35

Petite question subsidiaire :
dans le header ci-dessus, la première partie est bien la requête envoyée et la seconde partie la réponse retournée par le serveur ??? C'est bien ça ??
Exactement…

Eléphanteau du PHP | 13 Messages

10 janv. 2008, 12:38

j'ai essayé avec fsockopen, mais je ne sais pas comment traité les données récupérées pour reconstituer mon fichier...

Voici le code que j'ai écrit :

Code : Tout sélectionner

<?php $lien_DL=$_POST['lien_DL']; // lien premium MU $lien_MU=$_POST['lien_MU']; // lien standard MU // récupération du nom du fichier $nom_fichier=substr(strrchr($lien_DL,"/"),1); // construction du header $nn = "\r\n"; $method = "GET"; $Url = parse_url($lien_DL); $url = $Url[path]; $host = $Url[host]; $agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12; Alexa Toolbar; MEGAUPLOAD 1.0) Gecko/20050919 Firefox/1.0.7) Gecko/20050919 Firefox/1.0.7"; $accept = "*/*"; $accept_language="en-us;q=0.7,en;q=0.3"; $accept_charset="windows-1251,utf-8;q=0.7,*;q=0.7"; $referer = $lien_MU; $header= $method." ".$url." HTTP/1.1".$nn. "Host: ".$host.$nn. "User-Agent: $agent".$nn. "Accept: ".$accept.$nn. "Accept-Language: ".$accept_language.$nn. "Accept-Charset: ".$accept_charset.$nn. "Connection: Close".$nn. $referer; // envoi de la requête $fp = fsockopen ($host, 80, &$errno, &$errstr, 30); if (!$fp) { echo "$errstr ($errno)<br>\n"; } else { stream_set_timeout($fp, 300); fputs($fp,$header); while (!feof($fp)) { $response .= fgets($fp, 256); } } fclose ($fp); $fs = fopen($nom_fichier,"w"); // création du fichier téléchargé fputs($fs,$response); fclose($fs); ?>
remarque : Le lien premium est généré à partir du lien standard MU par un autre script et envoyé en POST à ce script.

A priori, la connection par fsockopen se fait correctement (je n'ai pas d'erreur $errstr -$errno) mais je ne récupère rien dans mon fichier. En fait, mon navigateur me retourne une erreur (Network Error (tcp_error) - A communication error occurred: "" - The Web Server may be down, too busy, or experiencing other problems preventing it from responding to requests. You may wish to try again at a later time. ).
Pourtant, le fichier que j'essaye de récupéré est tout petit (5 bytes).

Merci de votre aide