如果您使用 NSURLConnection,并且会话是基于 cookie 的,那么这将自动完成。所以你需要写的所有内容都与此类似
NSMutableURLRequest *request = nil;
request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://server.com/login.php"]];
NSString *post = [NSString stringWithFormat:@"username=%@&password=%@", @"<username>", @"<password>"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
[request setValue:[NSString stringWithFormat:@"%d", [postData length]] forHTTPHeaderField:@"Content-Length"];
[request setTimeoutInterval: 15];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData];
_urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[_urlConnection start];
并且您还必须实现 NSURLConnection Delegate 方法
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[_responseData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
//Oops! handle failure here
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
if (_statusCode >= 200 && _statusCode < 400) {
//Things look ok
NSString *responseString = [[[NSString alloc] initWithData:_responseData] autorelease];
//Send this to an xml lib and parse
}
[_responseData release];
_responseData = nil;
[connection autorelease];
}
如果标头中有一些其他信息,并且需要通过后续请求发回,则可以从响应中读取它,如下所示
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
NSDictionary *headerFields = [(NSHTTPURLResponse*)response allHeaderFields]; //This would give you all the header fields;
}
}
并为下一个请求设置标头字段,如下所示
[request setValue:[NSString stringWithFormat:@"%d", [postData length]] forHTTPHeaderField:@"Content-Length"];
保存信息,无论是用户名和/或密码还是会话信息,您都可以使用 NSUserDefaults
//To save
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
if (standardUserDefaults) {
[standardUserDefaults setObject:@"<username>" forKey:@"username"];
[standardUserDefaults setObject:@"<pass>" forKey:@"password"];
[standardUserDefaults synchronize];
}
//To retrieve
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *val = nil;
if (standardUserDefaults)
val = [standardUserDefaults objectForKey:@"username"];
最后,建议构建一个模型来映射 xml API 与 [例如:具有用户名和密码属性的 User 类]。
Google for Apple 关于 MVC 的文档。
希望这可以帮助!