有人可以发布最简单的工作代码,当我 GET 请求一个 url 时可以获得最后一个重定向的 url(nth) 吗?
我知道我需要使用异步请求,但我无法制定出解决问题的完整工作代码。
我正在使用 ios5,所以我可以使用 ios5 中最新添加的异步内置功能。
我已经尝试了很多东西,但我仍然没有成功。使用下面的代码,我尝试发送带有参数的获取请求,但是由于站点的重定向,这些参数不知何故丢失了:(!
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 委托方法?
编辑2:
好的,所以我也实现了其他的委托:
(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