Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Paramètres reçu par le CGI différent de celui envoyé

15 réponses
Avatar
cyril scetbon
Bonjour,

J'observe un comportement erratique lors de la r=E9ception d'un
param=E8tre re=E7u par un CGI. En effet, je POST du XML =E0 un CGI dans
lequel une chaine est encod=E9e en base64. Cependant la chaine n'est pas
celle envoy=E9e :-(

cat sendxmltocgi.pl :
------------------------------

use LWP::UserAgent;
use Data::Dumper;
use constant CORRECTION=3D>1;

my $smil=3D<<EOF;
<essai>
<content>
<text src=3D"http://localhost/remote_repository/file1.txt"
region=3D"Texte"/>
<text src=3D"http://localhost/remote_repository/file2.txt"
region=3D"Texte"/>
</content>
</essai>
EOF
use MIME::Base64;

$fxml=3D'xml=3D<?xml version=3D"1.0" encoding=3D"UTF-8" ?
>'.'<content>'.encode_base64($smil).'</content>';
my $ua =3D LWP::UserAgent->new;
$ua->agent($ua);
my $req =3D HTTP::Request->new(POST =3D>"http://localhost/perl/cgi.pl");
$req->content_type('application/x-www-form-urlencoded');
$req->content($fxml);
my $res =3D $ua->request($req);
if ($res->is_success) {
if(!CORRECTION)
{print Dumper decode_base64($1) if($res->content=3D~/
content>([^<]*)</)}
else
{
if($res->content=3D~/content>([^<]*)</)
{
my $c=3D$1;
$c=3D~s/ /+/g;
print Dumper decode_base64($c)
}
}
}
else {
print $res->status_line, $/;
}

cat cgi.pl :
---------------

use CGI qw/:cgi/;
use Data::Dumper;

print header();
print Dumper(param('xml'));


J'ai ajout=E9 une constante CORRECTION dans le premier script qui permet
de modifier le champ re=E7u pour obtenir le bon r=E9sultat. Par contre
j'ai bien peur que cette correction ne soit valable que pour cette
chaine dont je connais la valeur encod=E9e. Cependant je me demande
pourquoi la chaine re=E7u n'est pas la m=EAme que celle envoy=E9e !

Merci =E0 tous.

10 réponses

1 2
Avatar
cyril scetbon
Il semblerait que CGI.pm convertisse le caractère + en caractère
espace comme cité dans http://www.april.org/groupes/doc/cgi-bin/cgi-bin.t xt
Avatar
Nicolas George
"cyril scetbon" wrote in message
$req->content_type('application/x-www-form-urlencoded');
$req->content($fxml);


$fxml n'est pas du x-www-form-urlencoded.

Avatar
cyril scetbon
On 26 fév, 13:42, Nicolas George <nicolas$ wrote:
"cyril scetbon" wrote in message
$req->content_type('application/x-www-form-urlencoded');
$req->content($fxml);


$fxml n'est pas du x-www-form-urlencoded.


si je positionne le content_type à text/xml ou application/xml le cgi
ne voit plus rien :-(


Avatar
Paul Gaborit
À (at) 26 Feb 2007 05:56:41 -0800,
"cyril scetbon" écrivait (wrote):
On 26 fév, 13:42, Nicolas George <nicolas$ wrote:
"cyril scetbon" wrote in message
$req->content_type('application/x-www-form-urlencoded');
$req->content($fxml);


$fxml n'est pas du x-www-form-urlencoded.


si je positionne le content_type à text/xml ou application/xml le cgi
ne voit plus rien :-(



Une petite formation complémentaire aux techniques HTTP semble
s'imposer...

En attendant, lisez la doc de HTTP::Request::Common puis utilisez le
content-type 'multipart/form-data' en POST et laissez faire le module
pour régler l'encodage...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>



Avatar
Nicolas George
"cyril scetbon" wrote in message
:
si je positionne le content_type à text/xml ou application/xml le cgi
ne voit plus rien :-(


Normal. Tu n'as pas bien lu la doc du module CGI. En particulier le bout qui
commence par « If POSTed data is not of type
application/x-www-form-urlencoded ».

Avatar
Nicolas George
Paul Gaborit wrote in message :
utilisez le
content-type 'multipart/form-data' en POST


Non, s'il transmet du XML, le content-type doit indiquer du XML.

Avatar
cyril scetbon
On 26 fév, 18:52, Nicolas George <nicolas$ wrote:
"cyril scetbon" wrote in message

:

si je positionne le content_type à text/xml ou application/xml le cgi
ne voit plus rien :-(


Normal. Tu n'as pas bien lu la doc du module CGI. En particulier le bout qui
commence par « If POSTed data is not of type
application/x-www-form-urlencoded ».


Bonne déduction :-)


Avatar
Paul Gaborit
À (at) 26 Feb 2007 18:03:59 GMT,
Nicolas George <nicolas$ écrivait (wrote):
Paul Gaborit wrote in message :
utilisez le
content-type 'multipart/form-data' en POST


Non, s'il transmet du XML, le content-type doit indiquer du XML.


Ah oui ! Désolé, je n'avais pas bien lu le début de l'enfilade. Enfin,
en tous cas, le 'content-type' n'était pas le bon...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>


Avatar
cyril scetbon
On 27 fév, 09:34, Paul Gaborit wrote:
À (at) 26 Feb 2007 18:03:59 GMT,
Nicolas George <nicolas$ écrivait (wrote):

Paul Gaborit wrote in message :
utilisez le
content-type 'multipart/form-data' en POST


Non, s'il transmet du XML, le content-type doit indiquer du XML.


Ah oui ! Désolé, je n'avais pas bien lu le début de l'enfilade. Enf in,
en tous cas, le 'content-type' n'était pas le bon...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>


Résolu en conservant le content_type à application/x-www-form-
urlencoded mais en utilisant uri_escape sur la partie POSTed.

@+



Avatar
Nicolas George
"cyril scetbon" wrote in message
:
Résolu en conservant le content_type à application/x-www-form-
urlencoded mais en utilisant uri_escape sur la partie POSTed.


En d'autres termes, je me casse les pieds à t'indiquer une solution propre
et fonctionnelle, et tu t'obstines à utiliser une solution crade et bancale.
Ça fait plaisir, tiens...

1 2