2013-04-12 6 views
0

Je cherche à appeler un HTTP_POST du SDK iPhone à un fichier php sur mon serveur. Si j'appelle cela ci-dessous:objectif-c json php

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://*****/api2/index.php"]]; 

[request setHTTPMethod:@"POST"]; 
[request addValue:@"postValues" forHTTPHeaderField:@"METHOD"]; 

//create data that will be sent in the post 
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; 
[dictionary setValue:@2 forKey:@"value1"]; 
[dictionary setValue:@"This was sent from ios to server" forKey:@"value2"]; 

//serialize the dictionary data as json 
NSData *data = [[dictionary copy] JSONValue]; 

[request setHTTPBody:data]; //set the data as the post body 
[request addValue:[NSString stringWithFormat:@"%d",data.length] forHTTPHeaderField:@"Content-Length"]; 

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
if(!connection){ 
    NSLog(@"Connection Failed"); 
} 

code php sur le serveur

if ($_SERVER['HTTP_METHOD'] == 'postValues'){ 
$body = $_POST; 
$id;// value1 from dictionary 
$name; // value2 from dictionary 
} 

S'il vous plaît aider $ id et $ name

+0

Existe-t-il une raison spécifique pour laquelle vous ne respectez pas les méthodes HTTP établies telles que "POST"? Cela ne semble pas être la meilleure pratique pour inventer quelque chose de nouveau. Vous savez plus tard ce proxy mal programmé va supprimer/modifier. – KillerX

+0

En fait, il peut être judicieux d'envoyer json ou XML à travers le corps du message. De nombreuses normes utilisent cette approche, telles que OAuth et SOAP. Bien que le multipart fonctionne aussi. – EJTH

+0

C'est un doublon: [Comment obtenir des données json de la demande de publication iphone] (http://stackoverflow.com/questions/3656983/how-to-get-json-data-from-iphone-post-request) (le court réponse est que les données json réside dans '$ body ['json']') Et voici une autre réponse avec plus d'info: [envoyer json en utilisant nsurlrequest] (http://stackoverflow.com/questions/10645317/ios-5- send-json-using-nsurlrequest-et-parsing-in-php-via-post) – Rikkles

Répondre

1

D'abord, la méthode de cette demande est POST, pas postValues. Tout ce que vous avez fait est d'ajouter un en-tête avec le nom METHOD et la valeur postValues, donc, si vous voulez vérifier pour cela, vous devez regarder dans l'interface entre le serveur que vous utilisez et PHP. Pour Apache, c'est apache_request_headers(). Puis, si vous définissez l'objet JSON comme étant le corps de la requête, vous devez lire le corps pour y accéder. Pour ce faire, vous devez lire php://input. Ainsi, votre exemple devient:

$body = json_decode(file_get_contents('php://input'), true); 
$id = $body['value1'];// value1 from dictionary 
$name = $body['value2']; // value2 from dictionary 
0

Vous pouvez soit envoyer les valeurs supplémentaires dans la requête (et récupérer en utilisant $ _GET) Ou vous pouvez placer les valeurs dans vos données json.

également la bonne façon de récupérer votre JSON comme un objet est:

$bodyAsObject = json_decode(file_get_contents('php://input'));