如何使用参数发送基本的POST HTTP请求并显示json响应?

时间:2012-06-19 07:32:47

标签: ios5

我尝试了很多东西,但不知何故无法在ios中找出HTTP POST请求的基础知识。有时我得到服务器错误,有时我得到状态代码200但是响应为空。后端服务器代码工作,它正在响应发送json数据。不知怎的,我的ios应用程序无法获得该响应。任何帮助将不胜感激!

这是我尝试过的事情之一! GetAuthorOfBook对应于一个php服务器函数,它接受strBookName作为POST参数,并将作者的名称作为json对象返回!

NSURL *url = [NSURL URLWithString:@"http://mysite.com/getAuthorOfBook"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSString *post = [NSString stringWithFormat:@"strBookName=Rework"];
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];


[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
[request setValue:@"text/html" forHTTPHeaderField:@"Content-Type"];

[request setHTTPBody:postData ];

 //get response
 NSHTTPURLResponse* urlResponse = nil;  
 NSError *error = [[NSError alloc] init];

 NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

responseData应该具有作者的名称(strAuthorName)作为json“key”:“value”对。

1 个答案:

答案 0 :(得分:1)

responseData还不是json对象。首先,您需要将其序列化并将其分配给NSDictionary,然后您可以按键解析它。

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

现在你应该可以通过这个方法访问authorName(如果它只是json中的一个字符串):

NSString *authorName = [json objectForKey:@"strAuthorName"];

或者像这样,如果它是对象的字典(json中的对象数组)

NSDictionary *authorName = [json objectForKey:@"strAuthorName"];