Publier des données en Objective C en utilisant Json



objective-c ios (3)

Essaye celui-là

NSData *requestData = [jsonRequest dataUsingEncoding:NSUTF8StringEncoding];

https://src-bin.com

J'essaie de publier des données sur un service Web PHP.
Je suis familier avec cela en HTML en utilisant la requête $ .post mais je suis très découragé d'essayer ceci dans l'objectif C. J'ai essayé plusieurs blogs et questions trouvés sur stackoverflow.

J'ai finalement trouvé le code suivant:

NSString *jsonRequest = [NSString stringWithFormat:@"{\"Email\":\"%@\",\"FirstName\":\"%@\"}",user,fname];
NSLog(@"Request: %@", jsonRequest);

NSURL *url = [NSURL URLWithString:@"http:myurl..."];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]];

[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];

NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];

J'ai aussi essayé:
NSURLConnection * connection = [[NSURLConnection alloc] initWithRequest: demande delegate: self];

Mon service Web crée un nouvel utilisateur sur poste et renvoie l'ID utilisateur. Les deux font avec succès l'appel du service Web (un nouvel ID utilisateur est créé), mais ils ne publient pas les données, c'est-à-dire qu'un utilisateur vide est créé à chaque fois.
S'il vous plaît dites-moi si je manque quelque chose.

Merci.

Mes autres tentatives:

NSMutableURLRequest *request = 
[[NSMutableURLRequest alloc] initWithURL:
 [NSURL URLWithString:@"myUrl.. "]];

[request setHTTPMethod:@"POST"];

NSString *postString = @"[email protected]&FirstName=Test";

[request setValue:[NSString 
                   stringWithFormat:@"%d", [postString length]] 
forHTTPHeaderField:@"Content-length"];

[request setHTTPBody:[postString 
                      dataUsingEncoding:NSUTF8StringEncoding]];

[[NSURLConnection alloc] 
 initWithRequest:request delegate:self];

J'ai finalement résolu le problème: finalement, j'ai compris ce qui n'allait pas. J'utilisais http: // mypath? Params = 123 comme mon URL. Je n'ai pas joué l'url complet (jamais besoin dans d'autres langues). Mais ici je devais donner htt: //mypath/index.php? Params = 123


Answer #1

J'ai exécuté votre code et le côté serveur reçoit tous les messages.

POST / HTTP/1.1
Host: linux-test
User-Agent: demoTest/1.0 CFNetwork/548.1.4 Darwin/11.3.0
Content-Length: 44
Accept: application/json
Content-Type: application/json
Accept-Language: en
Accept-Encoding: gzip, deflate
Connection: keep-alive

{"Email":"[email protected]","FirstName":"test"}

Et suivez le code, si jsonRequest a des caractères non-ASCII, la [jsonRequest length] sera fausse.

NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]];

Vous pouvez utiliser strlen place.

NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:strlen([jsonRequest UTF8String])];

ou

[jsonRequest dataUsingEncoding:NSUTF8StringEncoding];

Answer #2
NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"%@posts", SeverURL]];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setRequestMethod:@"POST"];
[request addRequestHeader:@"content-type" value:@"application/json"];
[request addRequestHeader:@"User-Agent" value:@"iOS"];

request.allowCompressedResponse = NO;
request.useCookiePersistence = NO;
request.shouldCompressRequestBody = NO;
request.delegate=self;
NSString *json=[[self prepareData] JSONRepresentation];//SBJSON lib, convert a dict to json string
[request appendPostData:[NSMutableData dataWithData:[json dataUsingEncoding:NSUTF8StringEncoding]]];

[request startSynchronous];




nsurlconnection