【问题标题】:Get the last redirected url in iOS 5?在 iOS 5 中获取最后一个重定向的 url?
【发布时间】:2012-05-21 14:30:27
【问题描述】:

有人可以发布最简单的工作代码,当我 GET 请求一个 url 时可以获得最后一个重定向的 url(nth) 吗?

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

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

我已经尝试了很多东西,但我仍然没有成功。使用下面的代码,我尝试发送带有参数的 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 委托方法?

编辑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

【问题讨论】:

  • 嗨。您是否能够收到最后一个重定向 URL?谢谢。我有同样的问题。

标签: objective-c ios web-services ios5


【解决方案1】:

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

【讨论】:

  • 非常感谢。我尝试使用该委托方法,但我想我做错了。会再试一次!
  • 我还添加了所有其他委托方法,虽然代码本身可以工作,但我没有实现我想要的。这正是我想要使用上述stackoverflow.com/questions/10549766/… 实现的目标
【解决方案2】:

我们可以通过 NSMutableURLRequest 实现这一点。 我已按照这些步骤操作,对我来说效果很好。通过下面提到的链接。

网址:Click here: Get the final redirected url

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

【讨论】:

    猜你喜欢
    • 2014-01-02
    • 2010-12-29
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2011-03-05
    • 2019-10-30
    • 1970-01-01
    • 2015-09-08
    相关资源
    最近更新 更多