Http post et receive

cs_DevelMan Messages postés 33 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 25 septembre 2004 - 3 juin 2004 à 18:33
matrey Messages postés 399 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 6 septembre 2004 - 6 sept. 2004 à 17:47
Bonjour,
Je dois ecrire un prog pour recevoir des donnees via http.
tout fonctionne bien, sauf si les donnees contiennent des caracteres du genre ' (ce qui represente l'apostrophe en code UTF8.

Le premier prog est un prog d'envoie qui utilise curl
Le second (qui 'merde' !!) est le programme de réception.

Si quelqu'un avait l'idée de génie qui me decoincerait !!!!

Merci d'avance
========================================
<?php
// sender.php
//1) PROGRAM USE TO SEND DATA TO THE SERVER (CLIENT)
$fic=$argv[1];
$fp = fopen($fic,"r");
$data="";
$data=fread($fp,filesize($fic));
fclose($fp);
$postvars="AUTH_USER=username&AUTH_PASS=password&AUTH_XML=".$data;
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, "http://myurl/receive");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
?>
========================================

2) THE DATA (passed as argv[1] to sender.php)
<?xml version="1.0"?>

<Line1>L'ASSURANCE DE TRANSPORT N'EST PAS A COUVRIR </Line1>

========================================

3) PROGRAM USE TO RECEIVE DATA
<?php
// index.php
// is username ok ?
if (!isset($HTTP_POST_VARS['AUTH_USER']))
{
$buffaux="*NOK* USER ABSENT
\n";
print $buffaux;
exit(1);
}
else
{
$zuser = $HTTP_POST_VARS['AUTH_USER'];
if ($zuser <> "userrname")
{
$buffaux="*NOK* USER INVALIDE ".$zuser."
\n";
print $buffaux;
exit(1);
}
}
// is password ok ?
if (!isset($HTTP_POST_VARS['AUTH_PASS']))
{
$buffaux="*NOK* PASSWORD ABSENT
\n";
print $buffaux;
exit(1);
}
else
{
$zpass = $HTTP_POST_VARS['AUTH_PASS'];
if ($zpass <> "password")
{
$buffaux="*NOK* PASSWORD INVALIDE ".$zpass."
\n";
print $buffaux;
exit(1);
}
}
// Controle si presence du fichier xml
if (!isset($HTTP_POST_VARS['AUTH_XML']))
{
$buffaux="*NOK* FICHIER ABSENT
\n";
print $buffaux;
exit(1);
}
else
{
$zfic = $HTTP_POST_VARS['AUTH_XML'];
$zfic = str_replace('"', '"', $zfic);
}

$today=date("YmdHis");
$file = "xml.".$today.".tmp";

// All is ok, now we can parse the file
$fp = fopen($file, "w");
fputs($fp, $zfic);
fclose($fp);

// call the parser (when the data is received, the parser work fine)
// but if the data contain characters like ', the data is not received correctly
?>

10 réponses

cs_DevelMan Messages postés 33 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 25 septembre 2004
3 juin 2004 à 18:36
les caracteres dont je parle sont la sequence & # 3 9 ;
(tout collé sans les blancs)
0
perig Messages postés 358 Date d'inscription vendredi 1 novembre 2002 Statut Membre Dernière intervention 5 septembre 2006
5 juin 2004 à 14:30
J'ai pas bien pigé, si tu envois:
"allée d'enfer"
Ça marche?
et avec
"allée d& # 3 9enfer" (tout collé sans les blancs)
Ça te donne quoi et tu veux quoi?

---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
0
cs_DevelMan Messages postés 33 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 25 septembre 2004
5 juin 2004 à 14:38
mon pb est le suivant :

"allée d'enfer", çà marche
mais
"allée d& # 3 9;enfer" (tout collé sans les blancs)"
çà marche pas.

Le probleme c'est que ce n'est pas moi qui écrit le prog d'envoie, c'est un client et je dois faire comme il veut !! grrrr !
c'est vraie que & # 39; çà correspond à l'apostrophe en codage UTF8, mais je ne reçois pas (le & est interpreté comme un séparateur, le # est interpreté comme un indice de $_POST) bref .... je ne m'en sort pas !!!!
0
perig Messages postés 358 Date d'inscription vendredi 1 novembre 2002 Statut Membre Dernière intervention 5 septembre 2006
5 juin 2004 à 17:15
J'ai trouvé une solution qui n'est sûrement pas la plus propre
avant d'envoyer ta data tu fais

 $data=str_replace("@","&#64",$data);
 $data=str_replace("$","&#36",$data);
 /*On a passé tous les @ en équivalent UTF8 idem pour les $. Ces deux symboles sont alors libres*/

 $data=str_replace("&","@",$data);
 $data=str_replace("#","$",$data);
/*On remplace tout les & par des @ et tous les # par des $.*/

$postvars="AUTH_USER=username&AUTH_PASS=password&AUTH_XML=".$data;
//et tu continu le prog normalement.


A la réception on fait l'inverse pour récupérer le message d'origine

 $data=$HTTP_POST_VARS['AUTH_XML'];
 $data=str_replace("$","#",$data);
 $data=str_replace("@","&",$data);
 $data=str_replace("&#36","$",$data);
 $data=str_replace("&#64","@",$data);
//et tu continu ton prog


J’ai cherché à le faire avec des fonctions php comme addslashes ou htmlentities ou encore
htmlspecialchars mais ca ne marche pas j’ai trouvé que ca c’est pas le top mais ca tourne
Reste à vérifier que ça ne pose pas d’autres problèmes par la suite

---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
perig Messages postés 358 Date d'inscription vendredi 1 novembre 2002 Statut Membre Dernière intervention 5 septembre 2006
5 juin 2004 à 17:30
Rectification, c'est pas bon car l'utilisateur poura utiliser tous les codes du style & # X X
sauf & # 6 4 =code de @
et
& # 3 6=code de $
le prob est donc plus limité mais pas mieux!!!
---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
0
perig Messages postés 358 Date d'inscription vendredi 1 novembre 2002 Statut Membre Dernière intervention 5 septembre 2006
5 juin 2004 à 17:44
sauf si ca te géne pas
de recevoir $
alors qu'il a envoyé & # 3 6
idem pour le @ et & # 6 4
---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
0
cs_DevelMan Messages postés 33 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 25 septembre 2004
6 juin 2004 à 00:03
Oui, çà aurait pu être une solution .. hélas, je n'ai pas la main sur le programme d'envoie .... donc je me retrouve devant le fait accompli ! .. et l'émetteur ne veut pas modifier son prog !

Quelle galère ! merci pour ton aide.
0
perig Messages postés 358 Date d'inscription vendredi 1 novembre 2002 Statut Membre Dernière intervention 5 septembre 2006
6 juin 2004 à 10:37
Je viens de trouver qu’avec les fonctions urlencode et urldecode tu pouvais résoudre ce prob en 2 lignes mais il faut avoir accès au prog d'envoie

je continu de chercher.

ps: j'ai bien une solution pour reconstituer la chaîne malgré les & mais les # foutent leurs merde

---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
0
cs_DevelMan Messages postés 33 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 25 septembre 2004
6 juin 2004 à 17:16
Super sympa de m'aider .. j'ai aussi essayé de reconstituer la chaine avec ce genre de truc :
while(list($indice,$valeur) = each($_POST))
{
print "VALEUR=".$valeur."\n";
if (substr($indice,0,1)=="#")
{
$v=$indice;
}
else
{
$v=$valeur;
}

Les # foutent la merde, car ils se retrouvent dans $indice.
Dons je voulais prendre dans $indice si le premier car était #, mais il me manque une partie de la chaine !

@++
et encore merci
0
matrey Messages postés 399 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 6 septembre 2004
6 sept. 2004 à 17:47
Bon j'arrive un peu tard mais je crois avoir la solution, ayant le même problème...

--> http://www.phpcs.com/code.aspx?ID=25971

Matrey
0
Rejoignez-nous