嗨,我有这个代码。
NSString *urlToAuthPage = [[NSString alloc] initWithFormat:@"&name=%@&street=%@&city=%@&state=%@&zip=%@&lat=%@&lon=%@&hash=%@", name, street, city, state, zip, str1, str2, hash];
NSData *postData = [urlToAuthPage dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];
NSString *postLength = [NSString stringWithFormat:@"%d",[urlToAuthPage length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://oo.mu/partyapp/post-party.php"]]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSString *infoString = [NSString stringWithFormat:@"http://oo.mu/partyapp/post-party.php?name=%@&street=%@&city=%@&state=%@&zip=%@&lat=%@&lon=%@&hash=%@", name, street, city, state, zip, str1, str2, hash];
NSURL *infoUrl = [NSURL URLWithString:infoString];
NSData *infoData = [NSData dataWithContentsOfURL:infoUrl];
NSError *error;
responseDict = [NSJSONSerialization JSONObjectWithData:infoData options:0 error:&error];
NSLog(@"%@", responseDict);
你可能已经注意到我有一些我不需要的代码我知道但是我得到了错误的反应。如何清理一些代码并从urlToAuthPage请求获取响应?
答案 0 :(得分:1)
我想我知道你在说什么:你知道如何使用NSData方法和URL来调用请求,但是这不支持你想要提供请求体的POST。
另一个问题是,即使你让它工作,也会是同步的。在NSURLConnection类中有一个很好的解决方案。像在代码的前半部分一样构建您的请求(正文中的帖子数据)。然后这样做:
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
// your data or an error will be ready here
}];
答案 1 :(得分:0)
正如上面@danh强调的那样,您可以使用NSURLConnection在同步和异步请求之间进行选择。我想提一下,你可以实现与委托而不是块的异步,如果这对你来说更平易近人。
基本上,您可以在NSURLConnectionDelegate和NSURLConnectionDataDelegate中实现这些方法,然后将自己指定为连接的委托,并在这些协议中定义的回调期间做出适当的响应。
[NSURLConnection connectionWithRequest:yourNSMutableURLRequest delegate:self];
如果你经常这样做,你可以像我一样做,并将所有异步内容抽象到连接管理器中,连接管理器可以处理同步和异步请求(对于异步,它将指针存储回感兴趣的一方并且在请求完成时执行回调)。这是一个简单的界面,我在这两种请求中都使用它,并且它可以与进一步的抽象一起使用(比如使用webRequest类来封装带有正文的POST请求)。