[Perl] CGI qui parse le STDIN n'importe comment

CGI qui parse le STDIN n'importe comment [Perl] - Perl - Programmation

Marsh Posté le 17-10-2013 à 12:08:22    

Salut à tous, voila j'ai un script perl très simple pour récupérer le STDIN, cela dit l'idiot me met dans les parametres dans ma variable CGI créée les "boundaries", guillemets, des carriages return etc... et je ne comprends absolument pas pourquoi. J'ai vérifié ce qu'il y avait dans le STDIN et tout me semble correct pourtant. J'utilise Nginx comme serveur web 1.5.6 (j'ai essayé avec différentes versions). =(. Une idée peut être :
 

Code :
  1. #!/sbin/perl
  2. use Socket;
  3. use EV;
  4. use AnyEvent;
  5. use AnyEvent::FCGI;
  6. use CGI qw/:standard -debug/;
  7. &main;
  8. sub main {
  9.     $> = 33;
  10.     $) = 33;
  11.     STDOUT->autoflush(1);
  12.     STDIN->autoflush(1);
  13.     my $fcgi = new AnyEvent::FCGI(
  14.       host => "127.0.0.1",
  15.       port => "8888",
  16.       on_request => sub {
  17.         my $request = shift;
  18.         AnyEvent->now_update;
  19.         local %ENV = %{$request->params};
  20.         local *STDIN;
  21.         open STDIN, '<', \$request->read_stdin;
  22.         my $q = CGI->new(\*STDIN);
  23.         close STDIN;
  24.         $request->print_stdout($q->header(-type => "text/html; charset=ISO-8859-1" )."Upload Done; error = ".$request->print_stderr($q->header()));
  25.         $q->delete_all();
  26.         $request->finish;
  27.       }
  28.     );
  29.     EV::loop;
  30. }
  31. 1;


 
 
et voila ce que j'obtiens dans $q :
 

Code :
  1. $VAR1 = bless( {
  2.                  '.parameters' => [
  3.                                     '------WebKitFormBoundaryRzFR2lUHHjnwyfZj
  4. Content-Disposition: form-data',
  5.                                     ' name'
  6.                                   ],
  7.                  'use_tempfile' => 1,
  8.                  '.charset' => 'ISO-8859-1',
  9.                  '.fieldnames' => {},
  10.                  'param' => {
  11.                               ' name' => [
  12.                                            '"file"
  13. ------WebKitFormBoundaryRzFR2lUHHjnwyfZj
  14. Content-Disposition: form-data',
  15.                                            '"test"
  16. upp
  17. ------WebKitFormBoundaryRzFR2lUHHjnwyfZj
  18. Content-Disposition: form-data',
  19.                                            '"submit"
  20. Valider
  21. ------WebKitFormBoundaryRzFR2lUHHjnwyfZj--
  22. '
  23.                                          ],
  24.                               '------WebKitFormBoundaryRzFR2lUHHjnwyfZj
  25. Content-Disposition: form-data' => [
  26.                                                                                                               ''
  27.                                                                                                             ]
  28.                             },
  29.                  'escape' => 1
  30.                }, 'CGI' );


Message édité par Zugluk le 18-10-2013 à 16:50:32
Reply

Marsh Posté le 17-10-2013 à 12:08:22   

Reply

Marsh Posté le 18-10-2013 à 16:48:56    

Pour ce que ça interesse, ça ne marche pas car l'environement est persistent. Ainsi il faut utiliser la librarie "CGI::Stateless" et remplacer "my $q = CGI->new(\*STDIN);" par "my $q = new CGI::Stateless"
 
Voir la doc de la librarie pour plus d'info.

Reply

Marsh Posté le 18-10-2013 à 17:54:10    

Merci pour l'info! :jap:  
A+,


Message édité par gilou le 18-10-2013 à 17:54:23

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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