iPhone让POST请求,处理饼干(iPhone Make POST request, handl

2019-09-04 02:04发布

我希望有人能够阐明以下一些轻,我想我在这个正确的方向前进。 我想登录到我的用户名/密码组合的服务器,然后我需要能够告诉如果我登录正确的(一个cookie应该被丢弃),那么我会再拍要求,如果是这种情况。

任何帮助表示赞赏,继承人我一起工作的代码:

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];

NSString *post =[NSString stringWithFormat:@"name=%@&pass=%@",@"foo", @"bar"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:@"http://www.mywebserver.com/login.php"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];

NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(data);

// HOW to Check if there was a Cookie dropped??


// Make another request..

Answer 1:

这应该工作:

NSDictionary *headerFields = [(NSHTTPURLResponse*)response allHeaderFields]; 
NSURL *url = [NSURL URLWithString:@"http://www.mywebserver.com/login.php"];   
NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:headerFields forURL:url];

然后你就可以知道,如果cookies数组包含所需的cookie。

你也可以接收到响应之后,调用此:

NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:url];


Answer 2:

下面是使用当前的代码可能的解决方案:

1 - 你一开始做的是不错的:一般设置cookie政策。

NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHttpCookieStorage];
[cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];

2 - 在这之后,你的要求,你需要指定要使用的cookies(为了注入会话信息):

[request setHTTPShouldHandleCookies:YES];

您需要设置这个领域的认证和后续请求。



文章来源: iPhone Make POST request, handle cookie