我正在编写一个 iPad 应用程序,我需要能够从另一个供应商设置的服务器中获取数据。该应用程序通过 REST 服务使用数据来工作。到目前为止,由于供应商还没有准备好,我一直在公司的本地网络上使用测试服务器。但是,现在随着供应商服务器上线,我在使用他们的 API 时遇到了问题。
问题似乎与登录有关(或至少从那里开始)。我过去使用的过程是:
// Create the request.
NSString* loginURL = @"http://aurl/signature/service/auth/rest/firewall/login";
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:loginURL]];
[request setHTTPMethod:@"POST"];
// {"userName":"foo2@bossmonkey.com" , "password":"password"}
NSString* credentials = @"userName=\"foo2@bossmonkey.com\"&password=password";
NSData* connectionData = [credentials dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:connectionData];
// Logging in...
NSError* error = nil;
NSURLResponse* response;
NSData* result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSDictionary* loginJsonResult = [NSJSONSerialization JSONObjectWithData:result
options:NSJSONReadingMutableContainers
error:&error];
if (loginJsonResult != nil)
{
NSString *loginApproved = [[loginJsonResult objectForKey:@"result"] description];
if (![loginApproved isEqualToString:@"success"])
{
// login unsuccessful, bail
NSLog(@"Login failed!\n");
return;
}
NSLog(@"Login success!\n");
}
在我的测试服务器上,这可以正常工作,因为它会发回我可以解析的响应。但是,根据供应商,他们的服务器会做出不同的响应:
The LTPA token is in the response header Set-Cookie, the LTPA cookie name-value needs to be set as the request cookie in the subsequent Rest calls.
这对我来说意味着我将使用他们提供的 cookie 来进行未来的身份验证。我的印象是,这是由 NSURLConnection 开箱即用的。但是,对服务器的后续查询给了我一个零响应。我应该以某种特殊的方式处理 cookie 数据吗?