如何从Http Post中捕获cookie,在objective-c中返回302而不是200

时间:2011-01-17 03:41:09

标签: objective-c http

目前,如果我执行http GET或POST并且它返回200 w /类型的application / json或xml我可以捕获使用此方法发回的cookie

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
  NSArray* returnedCookies = [NSHTTPCookie 
                  cookiesWithResponseHeaderFields:[response allHeaderFields] 
                  forURL:[NSURL URLWithString:@""]];

    [responseData setLength:0];
}

但是当请求返回302(重定向)时,我如何捕获在init请求期间发送到客户端的cookie?目前,只有在发生此重定向后,才会收到GET请求200之后发回的cookie

更新

我发现最终的解决方案如下。我需要if语句来验证resp是否有效,因为在我的实例中这个方法总共被调用了3次。一次用于初始化请求,然后再次用于302(我关心的那个),最后用于重定向URL的最后一次GET请求

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSHTTPURLResponse *)response {
  if (response != nil) {
    NSArray* cookies = [NSHTTPCookie 
                     cookiesWithResponseHeaderFields:[response allHeaderFields] 
                     forURL:[NSURL URLWithString:@""]];

    if ([zzzz count] > 0) {
      //do something with cookies
    }
  }

  return request;
}

1 个答案:

答案 0 :(得分:1)

您可以使用NSURLRequest上的委托方法:

connection:willSendRequest:redirectResponse:

由于您将获得重定向响应,因此您可以从中提取Cookie。