script remplissage formulaires html & POST DATA

script remplissage formulaires html & POST DATA - Perl - Programmation

Marsh Posté le 29-10-2007 à 23:57:17    

Salut,
 
j'essaye tant bien que mal d'uploader automatiquement des photos sur ce site :
http://www.easy-upload.net
ou bien n'importe lequel genre flickr, imageshack etc...
Le probleme est simple, gerer le POST DATA et autres remplissage de formulaire.
Voici une ébauche de script non valable, si quelqu'un de plus qualifié que moi sur perl peux corriger, je pense que ça peux etre très interessant ( et formateur ).
( je cherche un truc tout à fait basique qui ne fait qu'uploader betement des fichiers en récuperant l'URL à la fin. )
J'obtient seulement : Can't POST http://www.easy-upload.net/:  at post-data-7.pl line 23. avec :  
 
 

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4. use LWP::UserAgent;
  5. use HTTP::Request;
  6. use HTTP::Request::Common;
  7. my $url = "http://www.easy-upload.net/";
  8. my $ua = LWP::UserAgent->new(agent => 'sputnick/2.0');
  9. my $req = HTTP::Request->new( POST $url,
  10.         Content_Type => 'form-data',
  11.         Content      => [
  12.                                 upfile  => ['~/images/foo.png'],
  13.                                 mail    => 'wam@mail.fr',
  14.                                 #boolform=0 => 'hidden readonly',
  15.                                 #<NONAME>=Uploader => 'submit'
  16.                         ]
  17. );
  18. my $res = $ua->request($req);
  19. $res->is_success or die ("Can't POST $url: $!" );
  20. my $img = $res->content();
  21. print $img $/; # don't forget to use binmode to retrieve the image


Message édité par sputnick le 30-10-2007 à 01:38:45
Reply

Marsh Posté le 29-10-2007 à 23:57:17   

Reply

Marsh Posté le 30-10-2007 à 09:32:38    

$url n'est pas correcte, Il faut "viser" celle qui est en action dans le form qui contient l'input file en question.
Donc:

Code :
  1. my $url = "http://www.easy-upload.net/traitement_upload.php";


Essaye déjà avec ça, s'il y a d'autres problèmes on regardera plus en détail ;)

Message cité 1 fois
Message édité par anapajari le 30-10-2007 à 09:33:06
Reply

Marsh Posté le 30-10-2007 à 17:12:57    

anapajari a écrit :

$url n'est pas correcte, Il faut "viser" celle qui est en action dans le form qui contient l'input file en question.
Donc:

Code :
  1. my $url = "http://www.easy-upload.net/traitement_upload.php";


Essaye déjà avec ça, s'il y a d'autres problèmes on regardera plus en détail ;)


 
 
Nouvel essai avec script corrigé :
Can't POST http://www.easy-upload.net/traitement_upload.php:  at post-data-8.pl line 23
 

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4. use LWP::UserAgent;
  5. use HTTP::Request;
  6. use HTTP::Request::Common;
  7. my $url = "http://www.easy-upload.net/traitement_upload.php";
  8. my $ua = LWP::UserAgent->new(agent => 'Mozilla/2.0.4');
  9. my $req = HTTP::Request->new( POST $url,
  10.         Content_Type => 'form-data',
  11.         Content      => [
  12.                                 upfile  => ['/home/sputnick/images/crt-ssl.png'],
  13.                                 mail    => 'wam@mail.fr',
  14.                                 boolform => 'readonly'
  15.                         ]
  16. );
  17. my $res = $ua->request($req);
  18. $res->is_success or die ("Can't POST $url: $!" );
  19. my $img = $res->content();
  20. print $img $/; # don't forget to use binmode to retrieve the image

Reply

Marsh Posté le 31-10-2007 à 10:58:41    

Le "content" d'un HTTP::Request, c'est directement les données à a envoyer, c'est pas un hash.

Reply

Marsh Posté le 31-10-2007 à 11:57:26    

J'ai essayé comme ça, mais j'obtient les memes erreurs :
 

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4. use LWP::UserAgent;
  5. use HTTP::Request;
  6. use HTTP::Request::Common;
  7. my $url = "http://www.easy-upload.net/traitement_upload.php";
  8. my $ua = LWP::UserAgent->new(agent => 'Mozilla/2.0.4');
  9. my $req = HTTP::Request->new( POST $url,
  10.         Content_Type => 'form-data',
  11.         Content      => '/home/sputnick/images/crt-ssl.png',
  12.         Content      => 'wam@mail.fr',
  13.                                 boolform => 'readonly'
  14. );
  15. my $res = $ua->request($req);
  16. $res->is_success or die ("Can't POST $url: $!" );
  17. my $img = $res->content();
  18. print $img $/; # don't forget to use binmode to retrieve the image

Reply

Marsh Posté le 01-11-2007 à 02:37:30    

Bon je suis ouvert à toutes suggestions pour ce thread, mais en attendant d'avoir le niveau pour faire ça, j'ai contourné le problème :
 
 

Code :
  1. #!/usr/bin/perl -w
  2. # by sputnick
  3. # modules a utiliser
  4. use File::Basename;
  5. use Net::FTP;
  6. use Term::ANSIColor;
  7. use strict;
  8. # declaration de variables
  9. my $Object = basename($ARGV[0]);
  10. my $ftp;
  11. # methodes Net::FTP :
  12. $ftp = Net::FTP->new("host.fr", Debug => 0)
  13. or die "Cannot connect to some.host.name: $@";
  14. $ftp->login("login",'pass')
  15. or die "Cannot login ", $ftp->message;
  16. # methode Net::FTP necessaire pour ne pas corrompre un fichier binaire
  17. $ftp->binary();
  18. $ftp->cwd("/repertoire" )
  19. or die "Cannot change working directory ", $ftp->message;
  20. $ftp->put("$ARGV[0]" )
  21. or die "put failed ", $ftp->message;
  22. # affichage de l'URL finale en couleur
  23. print "URL is : \n\n";
  24. print color 'bold red';
  25. print "http://host/repertoire/$Object\n\n";
  26. print color 'reset';
  27. $ftp->quit;

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed