获取iOS 5中最后一个重定向的网址?

时间:2012-05-14 04:55:57

标签: objective-c ios web-services ios5

有人可以发贴最简单的工作代码,当我获取请求网址时,该代码可以获取最后重定向的网址(第n个)吗?

我知道我需要使用异步请求,但我无法找到解决问题的完整工作代码。

我正在使用ios5,因此我可以在ios5中使用最新添加的异步内置功能。<​​/ p>

我尝试过很多东西但是我还没有成功。使用下面的代码我试图发送一个带参数的get请求,但不知何故,由于站点的重定向,这些参数会丢失:(!

NSURLRequest *request = [NSURLRequest requestWithURL:urlOriginal];

[NSURLConnection 
sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
{
    NSLog("the returned data should be the final data of the redirected url with parameters but it is not");
}];

}

修改

所以这就是我现在所做的:

NSURLRequest *requestOriginal = [NSURLRequest requestWithURL:urlOriginal];

 NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:requestOriginal delegate:self];

[connection start];

和委托:

-(NSURLRequest *)connection:(NSURLConnection *)connection
        willSendRequest:(NSURLRequest *)request
       redirectResponse:(NSURLResponse *)redirectResponse
{

    if (redirectResponse) {
    NSMutableURLRequest *r = [request mutableCopy]; // original request
    [r setURL: [request URL]];
    return r;
} else {
     NSLog(@"redirecting to : %@", [request URL]);
    return request;
}
}

并且日志为我提供了我需要的正确请求URL以及最初传递的get参数。

现在如何从此请求中获取数据?另一个completionHandler委托方法?

edit2:

好的,所以我也实现了其他的delgates:

  • (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

  • (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

  • (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

  • (void)connectionDidFinishLoading:(NSURLConnection *)connection

2 个答案:

答案 0 :(得分:1)

请阅读文档中的Handling Redirects and Other Request Changes。简而言之,您需要a)为您的连接提供委托,以及b)在所述委托中实现方法connection:willSendRequest:redirectResponse:。我不明白你在你的问题中想要做什么 - 你只是想要重定向你的连接的URL数据,或者你想看到重定向的请求?无论哪种方式,实施上述方法都应该有所帮助。您的代理人将能够看到重定向的请求,并且不更改它将导致连接加载新的URL。

答案 1 :(得分:0)

我们可以使用NSMutableURLRequest实现此目的。 我遵循了这些步骤,对我来说很好。通过下面提到的链接。

URL:Click here: Get the final redirected url

P.S:如果您需要进一步的帮助,请告诉我。