Mon code dans iOS:iOS (objectif c) envoyer la demande de poste avec JSON backend php
NSString * some_str = @"{\"one\":\"two\",\"three\":\"four\"}";
NSData *objectData = [some_str dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectData
options:NSJSONReadingMutableContainers
error:&error];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[manager POST:@"https://exmaple.com/post.php" parameters:json progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Error: %@", error);
}];
Mon code backend (PHP):
<?php
if(strcasecmp($_SERVER['REQUEST_METHOD'], 'POST') != 0){
throw new Exception('Request method must be POST!');
}
$contentType = isset($_SERVER["CONTENT_TYPE"]) ? trim($_SERVER["CONTENT_TYPE"]) : '';
if(strcasecmp($contentType, 'application/json') != 0){
throw new Exception('Content type must be: application/json');
}
//Receive the RAW post data.
$content = trim(file_get_contents("php://input"));
$decoded = json_decode($content, true);
echo $content;
// $responses = array();
header("Content-type: application/json, charset=utf-8");
// echo json_encode($responses);
$conn->close();
?>
Si j'echo $ contenu, la réponse reçue par iOS sera un nombre hexadécimal. c'est-à-dire 3c21444f 43545950 (le numéro hexadécimal pour la chaîne json commence à partir de la queue jusqu'à la tête connectée par un signe "&", c'est-à-dire trois = quatre & un = deux). Si j'écho $ décodé, il renvoie un json vide.
Et si j'essaye de décoder le json reçu par Post demande, il a échoué. Je croyais que l'objet reçu était une entrée possible pour la fonction json_decode.
Dois-je réécrire mon code iOS ou mon code PHP ou les deux?
vous définissez cette mauvaise ligne: NSString * some_str = @ "{\"un deux trois quatre\"}"; Raison de '\' n'est pas mis après deux s'il vous plaît vérifier vos données. –
@BhadreshKathiriya qui était une faute de frappe. Je vais le corriger. THX. – ManAtMiddleWaterloo
Pourquoi passez-vous par NSString pour construire les paramètres? Vous faites NSString => NSData => NSDictionary, et 'AFHTTPSessionManager' fera NSDictionary => NSData. – Larme