HTTP POST JSON方法

时间:2011-08-31 02:14:49

标签: iphone json http post

您好,我需要帮助建立到Web服务的HTTP POST连接。我对如何做到完全无能为力。

我只有在制作NSURLConnection方面经验丰富,我将所需的输入参数作为URL的一部分传递。现在它似乎有所不同,因为我只提供了一个网站和请求JSON正文。

{
"lastmodified":"String content",
"passengerId":9223372036854775807,
"password":"String content",
"userId":"String content"
}

有人可以对此有所了解吗?比如网站是www.myURL / operations / AddItem.com

编辑 - 我在这里做错了什么?

NSError *theError = nil;
NSArray *keys = [NSArray arrayWithObjects:@"userId", @"password", nil];
NSArray *objects = [NSArray arrayWithObjects:userNameTextField.text, passwordTextField.text, nil];
NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

NSString *myJSONString =[jsonDictionary JSONRepresentation];
NSData *myJSONData =[myJSONString dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"myJSONString :%@", myJSONString); 
NSLog(@"myJSONData :%@", myJSONData); 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://153.20.32.74/11AprP306/passenger/item"]];
[request setHTTPBody:myJSONData]; 
[request setHTTPMethod:@"POST"];

NSURLResponse *theResponse =[[NSURLResponse alloc]init];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&theResponse error:&theError];   
NSLog(@"response : %@", theResponse);
NSLog(@"error : %@", theError);
NSLog(@"data : %@", data);
NSMutableString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"string: %@", string);
NSDictionary *jsonDictionaryResponse = [string JSONValue];
NSLog(@"dic: %@", jsonDictionaryResponse);
[string release];
[theResponse release];

我正在阅读string: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1 transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Request Error</title> <style>BODY {..... 'The incoming message has an unexpected message format 'Raw'. The expected message formats for the operation are 'Xml', 'Json'.

是不是因为我传递了一些值(lastmodified&amp; passengerId)?我不知道为什么他们需要这两个参数,因为这个请求只是创建一个新帐户。

1 个答案:

答案 0 :(得分:6)

您可以使用@ {darvids0n建议的ASIHTTPRequest,或者您也可以使用标准iOS NSMutableURLRequest方法执行此操作,如下所示:

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:myURL]; // Assumes you have created an NSURL * in "myURL"
[request setHTTPMethod:@"POST"];
[request setHTTPBody:myJSONData]; // Assumes you have created an NSData * for your JSON
[request setValue:@"application/json" forHTTPHeaderField:@"content-type"];

但是您选择这样做,您需要将Objective-C对象转换为JSON字符串,然后将其转换为NSData。以下是如何使用SBJSON框架同时执行这两个步骤的示例。

SBJsonWriter *writer = [[SBJsonWriter alloc] init];
NSData *myJSONData = [writer dataWithObject:myDataDictionary];

上面将字典转换为JSON字符串,然后使用字符串的UTF8编码将该字符串转换为NSData。如果您需要不同的编码,则必须中断使用[writer stringWithObject:myDataDictionary]并自行编码。