envoyer un fichier en post a un WS via l'iphone

guittonewsguittonews Membre
11:49 modifié dans API UIKit #1
Re-bonjour à  ceux que j'ai déjà  croisé aujourd'hui, bonjour aux autres :)

Voilà  tout est dans le titre...je pense que je ne procède pas de la bonne manière. En effet mon serveur me renvoi un message me disant qu'il ne récupère aucun fichier...

voici mon source (grandement inspiré de bout de code trouvé sur ce forum :) )

<br /><br />NSMutableString *httpBodyString=[[NSMutableString alloc] initWithFormat:@&quot;xml=%@&quot;,speedsmosXML];<br />	NSMutableString *urlString=[[NSMutableString alloc] initWithString:@&quot;http://*******/rest/******/detail&quot;];<br />	NSURL *url=[[NSURL alloc] initWithString:urlString];<br />	[urlString release];<br />	<br />	NSMutableURLRequest *urlRequest=[NSMutableURLRequest requestWithURL:url];<br />	[url release];<br />	[urlRequest setHTTPMethod:@&quot;POST&quot;];<br />	[urlRequest setHTTPBody:[httpBodyString dataUsingEncoding:NSUTF8StringEncoding]];<br />	[httpBodyString release];<br />	<br />	NSURLResponse *response = nil;<br />	NSError *err = nil;<br />	NSData *result = [NSURLConnection sendSynchronousRequest: urlRequest returningResponse:&amp;response error:&amp;err];<br />	<br />	NSLog(@&quot;%@&quot;,[[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]);<br /><br />


Ma variable speedsmosXML est une chaine de caractere XML...

Je pense que je m'y prend mal parce que au final c'est pas un fichier que j'envoi la...comment faire? des pistes? idées? exemples? je prends :) merciiii

Réponses

  • AliGatorAliGator Membre, Modérateur
    11:49 modifié #2
    J'ai pas testé mais je pense qu'il te manque quelques headers HTTP à  rajouter pour préciser, en particulier, le Content-Type de type application/xml donc si tu envoies du XML brut, sauf que là  tu sembles envoyer des données POST à  un service RESTful, dans ce cas les données sont URL-Encodées comme tu l'as fait avec "xml=..." pour composer ton body.

    Il te manque donc :
    1) Encoder ta chaà®ne speedsmosXML avec la méthode stirngByAddingPercentEscapesUsingEncoding (de mémoire, cf la doc NSString), qui va encoder ton XML pour qu'il puisse passer dans une requête web (par exemple remplacer les espaces par des %20, échapper les caractères "&" que tu peux avoir dans ton XML qui en POST ont une autre signification puisqu'ils servent à  séparer les différentes variables passées...)

    2) Ajouter le bon Content-Type en header, de mémoire c'est qqch comme "application/x-www-form-urlencoded" pour indiquer que les données que tu envoies sont au format urlencoded c'est à  dire "var1=data1&var2=data2&var3=data3..." (en l'occurence pour toi juste "xml=dataXML")

    Tiens je me demande (à  fouiller dans la doc aussi) si y'a pas une méthode de NSDictionary pour construire directement la chaà®ne URL-Encoded correspondant au contenu du NSDictionary... du style tu crées un NSDictionary avec la clé "xml" et en valeur ta NSString contenant ton XML brut... et il se débrouille pour te transformer ça en "xml=" suivi de la valeur de la clé "xml"... mais url-encodée comme il faut ? Ca me semblerait somme toute logique comme utilisation donc à  voir si Apple n'a pas prévu une méthode pour ça.
  • guittonewsguittonews Membre
    11:49 modifié #3
    En effet j'avais un problème d'urlencode :)

    J'avais reglé le problème du header entre temps. Le tout combiné à  un petit problème coté WS et now ca marche :)


    merkii
Connectez-vous ou Inscrivez-vous pour répondre.