UrlDownloadToFile.. Est-ce un bug ?
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
Et pourquoi tu ne transforme pas ton URL HTTP en FTP afin de pouvoir télécharger le fichier par le protocole FTP ?
Je ne sais pas quel est le but de ton programme (juste un programme pourt oi pour RapidShare). Mais si tu as des codes d'accès c'est sans doute ceux utilisé en FTP et donc le plus approprié c'est bien de passé par le FTP !
Lio
Je ne sais pas quel est le but de ton programme (juste un programme pourt oi pour RapidShare). Mais si tu as des codes d'accès c'est sans doute ceux utilisé en FTP et donc le plus approprié c'est bien de passé par le FTP !
Lio

Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
il faut que tu regarde ce qui se passe entre le serveur et le navigateur quand tu copie ta requette dans la barre de celui ci.
par exemple avec un logiciel du style de tcp viewer
http://www.westbrooksoftware.com/tscreen.shtml
ou que tu peux coder toi meme en pure ca doit pas etre trop diffiicle
et que tu compare avec ce que fait la droopy-lib
surement qu'il y aura des differences, de plus ton code ne doit pas gerer les cookies c'est peut etre aussi ca le souci
par exemple avec un logiciel du style de tcp viewer
http://www.westbrooksoftware.com/tscreen.shtml
ou que tu peux coder toi meme en pure ca doit pas etre trop diffiicle

et que tu compare avec ce que fait la droopy-lib

surement qu'il y aura des differences, de plus ton code ne doit pas gerer les cookies c'est peut etre aussi ca le souci
La gestion des cookies c'est effrayant mais c'est une chose très probable !case a écrit :il faut que tu regarde ce qui se passe entre le serveur et le navigateur quand tu copie ta requette dans la barre de celui ci.
par exemple avec un logiciel du style de tcp viewer
http://www.westbrooksoftware.com/tscreen.shtml
surement qu'il y aura des differences, de plus ton code ne doit pas gerer les cookies c'est peut etre aussi ca le souci
Pour tcp viewer, je vais essayer de voir ça. Merci pour ces infos je vous tiens au courant.
Le truc que je ne pige pas et qu'il y a des softs (gestionnaire de téléchargement comme net transport) qui à mon avis, ne gèrent pas les cookies mais par lesquels en entrant le pass et login, on peut recupérer les fichier..
Heu sur ce coup je pense pas avoir le niveau, pour le moment, je ne pige rien au fonctionnement des API et je suppose qu'il faut savoir les manipuler pour créer un tel soft.case a écrit :
ou que tu peux coder toi meme en pure ca doit pas etre trop diffiicle
et que tu compare avec ce que fait la droopy-lib![]()
La solution viendra peut etre de tcp viewer, c'est une bonne idée

a suivre..
Moi j'ai teste ce bout de code ci-après tiré de ton code tout fonctionne bien si ce n'est que pour ce site login et mot de passe sont inutiles :
Code : Tout sélectionner
login$="Moi"
Mdp$="MDP"
If login$="1" Or Mdp$="1"
MessageRequester("Oupsss",LocalText("You have to enter your premium login and password","Vous devez renseigner les champs Login & Mot de passe de votre compte rapidshare premium"))
Else
url.s="http://www.crano.be/NKSTeam%20NG4%20V12.rar"
LenUrl=Len(url)
Entete$="http://"
Extension$=Right(url,4) ; récupère l'extension
Debug Extension$
If Left (url,7)=Entete$
Debug "ok"
NewUrl$=ReplaceString(url,Entete$,Entete$+login$+":"+Mdp$+"@")
MessageRequester("Test1","Nouvelle Adresse"+Chr(10)+NewUrl$) ;- test1
CheminInitial$ = DefPath$
Chemin$ = PathRequester("Choisissez un répertoire", CheminInitial$)
If Chemin$
MessageRequester("Info",LocalText("Please wait during download","Merci de patientez pendant le téléchargement"))
FichierTelech$="PlumeSave"+Extension$
MessageRequester("test2",Chemin$+FichierTelech$) ;- test2
SetClipboardText(NewUrl$)
URLDownloadToFile(NewUrl$,Chemin$+FichierTelech$) ; si je lance le debug il affiche 0
MessageRequester("Info",LocalText("Download Complete "+Chemin$+FichierTelech$,"Téléchargement terminé "+Chemin$+FichierTelech$))
EndIf
Else
MessageRequester("Oh no",LocalText("Wrong URL","Adresse incorrecte"))
EndIf
EndIf
Denis
Bonne Jounée à tous
Bonne Jounée à tous
Pas facile pour un exemple vu qu'il faut que je mette en clair mon pass et login.
Par contre, voilà la version actuel du soft si tu as l'occaz de tester.
http://ldvmultimedia.free.fr/Plume.exe
Par contre, voilà la version actuel du soft si tu as l'occaz de tester.
http://ldvmultimedia.free.fr/Plume.exe
TOUT D'ABORD : re télécharge http://ldvmultimedia.free.fr/Plume.exe
j'avais fait une tite erreur, (j'avais laissé un ftp pour tester à la place de http pour l'entete)
Ensuite tu copies colles par exemple cette adresse :
http://rapidshare.com/files/63392406/BB ... hMe1.2.zip
le soft lui va te générer l'@ http://login:motdepasse@rapidshare.com/ ... hMe1.2.zip
avec mot pass et login comme je l'ai dit plus haut ça ne veut rien recupe, mais si je colle l'@ générée dans firefox, nettransport ou aute, ça marche
j'ai pas eu le temps aujourd'hui de chercher un soft d'analyse comme tcp viewer.
Je vais essayer avec WIRESHARK 0.99.6 qui a l'air pas mal et gratos
de plus dans la faq c'est confirmée !
Just use http://LOGIN:PASSWORD@www.server.com/file.zip and replace LOGIN with your login on that server and PASSWORD with your password there.
---edit----
Voilà la suite..
Je viens d'esssayer de sniffer la connexion de NetTransport qui a récupéré le fichier zip.
Voilà ce que ça donne :
Premièrement il enregistre cette adresse là
http://rs237cg.rapidshare.com/files/633 ... hMe1.2.zip
Si vous la tapez dans votre navigateur, vous atteindrez la page de Rapidshare qui propose de télécharger gratuitement le soft (en claiquant en bas sur FREE)
Donc http://rs237cg.rapidshare.com/files/633 ... hMe1.2.zip = http://rapidshare.com/files/63392406/BB ... hMe1.2.zip
Ce qui est bizarre mais bon...
Ensuite voilà le contenu de la capture :

Et là j'avoue que je ne pige pas grand chose à tout ce bazarre !
j'avais fait une tite erreur, (j'avais laissé un ftp pour tester à la place de http pour l'entete)
Ensuite tu copies colles par exemple cette adresse :
http://rapidshare.com/files/63392406/BB ... hMe1.2.zip
le soft lui va te générer l'@ http://login:motdepasse@rapidshare.com/ ... hMe1.2.zip
avec mot pass et login comme je l'ai dit plus haut ça ne veut rien recupe, mais si je colle l'@ générée dans firefox, nettransport ou aute, ça marche

j'ai pas eu le temps aujourd'hui de chercher un soft d'analyse comme tcp viewer.
Je vais essayer avec WIRESHARK 0.99.6 qui a l'air pas mal et gratos
de plus dans la faq c'est confirmée !
Just use http://LOGIN:PASSWORD@www.server.com/file.zip and replace LOGIN with your login on that server and PASSWORD with your password there.
---edit----
Voilà la suite..
Je viens d'esssayer de sniffer la connexion de NetTransport qui a récupéré le fichier zip.
Voilà ce que ça donne :
Premièrement il enregistre cette adresse là
http://rs237cg.rapidshare.com/files/633 ... hMe1.2.zip
Si vous la tapez dans votre navigateur, vous atteindrez la page de Rapidshare qui propose de télécharger gratuitement le soft (en claiquant en bas sur FREE)
Donc http://rs237cg.rapidshare.com/files/633 ... hMe1.2.zip = http://rapidshare.com/files/63392406/BB ... hMe1.2.zip
Ce qui est bizarre mais bon...
Ensuite voilà le contenu de la capture :

Et là j'avoue que je ne pige pas grand chose à tout ce bazarre !
Pour continuer dans des indices qui pourrait vous aider, RS propose un script perl pour l'upload. Je ne sais pas si ça peu aider à comprendre mais je le mets au cas ou (je n'y comprends pas grand chose non plus)
Code : Tout sélectionner
#!/usr/bin/perl
# Version 2.1.1 (13. July 2007)
# RapidShare AG OpenSource Perl Uploader V2 (with upload resume). For non-commercial use only. All rights reserved.
# Included: Uploading to free, collector's and premium-zone. The MD5-check after uploads checks if the upload worked.
# Upload resume can continue aborted downloads up to 24 hours after the download aborted. This means, incomplete files
# will automatically be deleted from the RapidShare servers 24 hours after the first chunk arrived.
# This is a PERL script written for experts and for coders wanting to know how to write own upload programs.
# Tested under Linux and Linux only.
# If you write your own upload-tools, please look at our rsapi.cgi calls. You need them to have fun.
#
# To upload a file, put this script on a machine with perl installed and use the following syntax:
# perl rsapi.pl free mytestfile.rar (this uploads mytestfile.rar as a free user)
# perl rsapi.pl prem archive.rar 334 test (this uploads archive.rar to the premium-zone of login 334 with password test)
# perl rsapi.pl col a.rar testuser mypw (this uploads a.rar to the collector's-zone of login testuser with password mypw)
use strict;
use warnings;
use Digest::MD5("md5_hex");
use Fcntl;
use IO::Socket;
my ($file, $zone, $login, $password, $uploadpath, $cursize, $size, $filecontent, $md5hex, $size2, $socket, $uploadserver, $killcode);
# This chapter sets some vars and parses some vars.
$/ = undef;
$SIG{PIPE} = 'IGNORE';
$file = $ARGV[0] || die "Syntax: $0 <filename to upload> <free|prem|col> [login] [password]\n";
$zone = $ARGV[1] || "";
$login = $ARGV[2] || "";
$password = $ARGV[3] || "";
$uploadpath = "l3";
$size = -s $file || die "File $file is empty or does not exist!\n";
# This chapter checks the file and calculates the MD5HEX of the existing local file.
print "File $file has $size bytes. Calculating MD5HEX...\n";
open(FH, $file) || die "Unable to open file: $!\n";
$filecontent = <FH>;
close(FH);
$md5hex = md5_hex($filecontent);
$size2 = length($filecontent);
print "MD5HEX is $md5hex ($size2 bytes analyzed)\n";
unless ($size == $size2) { die "Strange error: $size bytes found, but only $size2 bytes analyzed?\n" }
# This chapter finds out which upload server is free for uploading our file by fetching http://rapidshare.com/cgi-bin/rsapi.cgi?sub=nextuploadserver_v1
if ($login and $password) { print "Trying to upload to your $zone account.\n" } else { print "Uploading as a free user.\n" }
print "Getting upload server infos.\n";
$socket = IO::Socket::INET->new(PeerAddr => "rapidshare.com:80") || die "Unable to open port: $!\n";
print $socket qq|GET /cgi-bin/rsapi.cgi?sub=nextuploadserver_v1 HTTP/1.0\r\n\r\n|;
($uploadserver) = <$socket> =~ /\r\n\r\n(\d+)/;
unless ($uploadserver) { die "Uploadserver invalid? Internal error!\n" }
print "Uploading to rs$uploadserver$uploadpath.rapidshare.com\n";
$cursize = 0;
while ($cursize < $size) { $cursize = &uploadchunk($file, $md5hex, $size, $cursize, "rs$uploadserver$uploadpath.rapidshare.com:80") }
sub uploadchunk {
my $file = shift || die;
my $md5hex = shift || die;
my $size = shift || die;
my $cursize = shift || 0;
my $fulluploadserver = shift || die;
my ($uploaddata, $wantchunksize, $fh, $socket, $boundary, $contentheader, $contenttail, $contentlength, $header, $chunks, $chunksize,
$bufferlen, $buffer, $result, $fileid, $complete, $resumed, $filename);
if (-e "$file.uploaddata") {
print "Found .uploaddata! Overriding settings and trying to resume.\n";
open(I, "$file.uploaddata") or die "Unable to open file: $!\n";
($fulluploadserver, $fileid, $killcode) = split(/\n/, <I>);
print "Uploadserver=$fulluploadserver\nFile-ID=$fileid\nKillcode=$killcode\n";
close(I);
print "Checking if RS gives an OK and the position...\n";
$socket = IO::Socket::INET->new(PeerAddr => "rapidshare.com:80") || die "Unable to open port: $!\n";
print $socket qq|GET /cgi-bin/rsapi.cgi?sub=checkincomplete_v1&fileid=$fileid&killcode=$killcode HTTP/1.0\r\n\r\n|;
$result = <$socket>;
unless ($result =~ /\r\n\r\n(\d+)/) { die "I can't resume the file. Please delete $file.uploaddata. RS said:\n$result\n" }
$cursize = $1;
print "All ok. The upload stopped at $cursize. Trying to resume.\n";
$resumed = 1;
}
$wantchunksize = 1024000;
if ($size > $wantchunksize) {
$chunks = 1;
$chunksize = $size - $cursize;
if ($chunksize > $wantchunksize) { $chunksize = $wantchunksize } else { $complete = 1 }
} else {
$chunks = 0;
$chunksize = $size;
}
print "Upload chunk is $chunksize bytes starting at $cursize.\n";
sysopen($fh, $file, O_RDONLY) || die "Unable to open file: $!\n";
$filename = $file =~ /[\/\\]([^\/\\]+)$/ ? $1 : $file;
$socket = IO::Socket::INET->new(PeerAddr => $fulluploadserver) || die "Unable to open socket: $!\n";
$boundary = "---------------------632865735RS4EVER5675865";
$contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="rsapi_v1"\r\n\r\n1\r\n|;
if ($resumed) {
$contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="fileid"\r\n\r\n$fileid\r\n|;
$contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="killcode"\r\n\r\n$killcode\r\n|;
if ($complete) { $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="complete"\r\n\r\n1\r\n| }
} else {
if ($zone eq "prem" and $login and $password) {
$contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="login"\r\n\r\n$login\r\n|;
$contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="password"\r\n\r\n$password\r\n|;
}
if ($zone eq "col" and $login and $password) {
$contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="freeaccountid"\r\n\r\n$login\r\n|;
$contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="password"\r\n\r\n$password\r\n|;
}
if ($chunks) { $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="incomplete"\r\n\r\n1\r\n| }
}
$contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="filecontent"; filename="$filename"\r\n\r\n|;
$contenttail = "\r\n$boundary--\r\n";
$contentlength = length($contentheader) + $chunksize + length($contenttail);
if ($resumed) {
$header = qq|POST /cgi-bin/uploadresume.cgi HTTP/1.0\r\nContent-Type: multipart/form-data; boundary=$boundary\r\nContent-Length: $contentlength\r\n\r\n|;
} else {
$header = qq|POST /cgi-bin/upload.cgi HTTP/1.0\r\nContent-Type: multipart/form-data; boundary=$boundary\r\nContent-Length: $contentlength\r\n\r\n|;
}
print $socket "$header$contentheader";
sysseek($fh, $cursize, 0);
$bufferlen = sysread($fh, $buffer, $wantchunksize) || 0;
unless ($bufferlen) { die "Error while reading file: $!\n" }
print "Sending $bufferlen bytes.\n";
$cursize += $bufferlen;
print $socket $buffer;
print $socket $contenttail;
print "Server response:\n";
($result) = <$socket> =~ /\r\n\r\n(.+)/s;
unless ($result) { die "Ooops! Did not receive any valid server results?\n" }
print $result . "\n";
if ($resumed) {
if ($complete) {
if ($result =~ /^COMPLETE,(\w+)/) {
print "Upload completed! MD5HEX=$1 Checking MD5...\n";
if ($md5hex ne $1) { die "MD5-CHECK NOT PASSED! LOCAL=$md5hex REMOTE=$1\n" }
print "MD5-check passed. Upload OK! Saving status to rsapiuploads.txt\n";
open(O,">>rsapiuploads.txt") or die "Unable to save to rsapiuploads.txt: $!\n";
print O "Upload OK!\n\n";
close(O);
unlink("$file.uploaddata");
} else {
die "Unexpected server response!\n";
}
} else {
if ($result =~ /^CHUNK,(\d+)/) {
print "Chunk upload completed! Uploaded=$1\n";
} else {
die "Unexpected server response!\n";
}
}
} else {
if ($result =~ /files\/(\d+)/) { $fileid = $1 } else { die "Server result did not contain a file ID.\n" }
unless ($result =~ /File1\.3=(\d+)/ and $1 == $cursize) { die "Server did not save all data we sent.\n" }
unless ($result =~ /File1\.2=.+?killcode=(\d+)/) { die "Server did not send our killcode.\n" }
$killcode = $1;
open(O,">>rsapiuploads.txt") or die "Unable to save to rsapiuploads.txt: $!\n";
print O "Uploading $file. Download-links:\n$result";
close(O);
if ($chunks) {
open(O, ">$file.uploaddata") or die "Unable to save upload server: $!\n";
print O "$fulluploadserver\n$fileid\n$killcode\n";
close(O);
}
}
return $cursize;
}