Envoyer des variables POST sur un serveur PHP
UniX
Membre
Salut.
Je bloque sur l'envoi de variables POST vers un serveur PHP.
Voici le code que j'utilise :
Dans mon code PHP, la première chose que je fais, c'est récupérer les variables POST, mais rien n'arrive ....
Lorsque je fait un count($_POST), j'ai 0
Je bloque sur l'envoi de variables POST vers un serveur PHP.
Voici le code que j'utilise :
NSURL *someUrl = [NSURL URLWithString:@"http://julien.free.fr/service.php"];<br /> <br />NSMutableURLRequest* postURLRequest = [NSMutableURLRequest requestWithURL:someUrl];<br /> <br />[postURLRequest setHTTPMethod:@"POST"];<br /> <br />[postURLRequest setValue:@"julien@free.fr" forHTTPHeaderField:@"email"];<br />[postURLRequest setValue:@"valeur_variable2" forHTTPHeaderField:@"variable2"];<br />[postURLRequest setValue:@"valeur_variable3" forHTTPHeaderField:@"variable3"];<br /> <br />theConnection=[[NSURLConnection alloc] initWithRequest:postURLRequest delegate:self];
Dans mon code PHP, la première chose que je fais, c'est récupérer les variables POST, mais rien n'arrive ....
Lorsque je fait un count($_POST), j'ai 0
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Une requête est composée :
1) D'un header, qui dit quel est le type de contenu (est-ce que c'est un contenu envoyé en un seul morceau ou plusieurs, avec quel encodage (utf8, ...), quel codage/transformation (urlencoded, quoted-printable, ...), son MIME-Type ("image/png", "text/html", ...), la longueur du message, etc.
2) D'un corps : dans le cas d'une requête d'interrogation type POST, le corps de la requête contient les données à envoyer (donc c'est là justement qu'interviennent tes variables et leurs valeurs), encodées tel que décrit dans le header (en général url-encoded, c'est à dire genre "cle1=valeur1&cle2=valeur2%20avec%20espace&cle3=valeur3").
Dans le cas d'une réponse HTTP, le corps de la réponse, c'est le code source du HTML (MIME-Type:text/html), ou les données binaires représentant l'image (image/png, image/jpg, ...) etc.
Reste plus qu'à trouver les méthodes Cocoa qui vont bien pour non pas modifier tes headers (surtout que là tu n'en n'as pas spécialement l'intérêt à parti éventuellement pour spécifier l'encodage de texte avec le header "Content-Type") mais bien les données à envoyer.
De ce que j'ai pu voir très très rapido, y'a bien un setHTTPBody mais ça veut dire que tu dois formatter toi même ton body. A moins qu'il y ait une méthode toute faite dispo autre part que j'ai pas vue.
Remarque ceci dit c'est pas compliqué à formatter un body de ce genre :
- pour chaque paire clé/valeur à envoyer par post, tu mets la cle (qui ne doit être composé que de caractères [A-Za-z0-9_]*), puis tu mets un "=", puis tu concatère la valeur de ton paramètre, après avoir passé ce dernier à la moulinette [tt]stringByAddingPercentEscapesUsingEncoding:[/tt] (NSString).
- concaténer ces "cle=valeurWithEscapes" ainsi construits en mettant des "&" entre chaque
Et voilà tu as ton HTTPBody prêt pour être transféré. Préciser quand même dans les headers de ta requête le header "Content-Type" en lui donnant la valeur "application/x-www-form-urlencoded".
Convertir la NSString en US-ASCII est aussi conseillé (enfin qd tu l'eschapes à la limite), et préciser le Content-Length dans les header de même.
Les headers :
(le "Content-Length" correspond à l'exemple ci-dessous)
Le data :
Encodé comme URL GET...
Exemple :
Voilà Â
Je ne suis pas vraiment calé dans le HTTP ..... J'ai fait quelques essais rapides, et à priori c'est bon. Je vais mettre tout ça au propre.
Merci.