1

我使用带有委托的NSURLConnection向URL发送HTTP GET请求。该请求被重定向到HTTP 302,并执行新的请求并检索数据。使用NSURLConnection获取302 HTTP重定向的响应主体

问题是我不希望重定向的HTTP请求的主体,但原始重定向响应的内容。

我已经实现了- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response这是用redirectRepsonse调用,但connection:didReceiveData直到新的重定向请求返回时才被调用。

迄今为止,除了使用基于CFNetwork的方法之外,我还没有找到解决方案。

更新: 我已经创建与您一起玩这个问题的示例项目:https://github.com/snod/302RedirectTest

任何想法?

+0

你试过实现NSURLConnectionDataDelegate的方法呢? – orkoden 2014-09-05 10:11:41

+0

当然,问题中提到的那两种方法来自该协议。 – snod 2014-09-05 11:25:39

+0

你有没有得到这个工作?我有同样的问题。 – Locksleyu 2017-09-07 23:20:22

回答

2

-connection:willSendRequest:redirectResponse:docs

To receive the body of the redirect response itself, return nil to cancel the redirect. The connection continues to process, eventually sending your delegate a connectionDidFinishLoading or connection:didFailLoadingWithError: message, as appropriate.

+0

我已经试过,没有成功。当重定向响应发送给委托后你返回nil时,连接将会在没有调用URL连接委托方法的情况下丢弃。 – snod 2014-09-05 13:57:52

+0

如果您返回原始请求,会发生什么情况? (实际上,如果你接到一个规范化原始请求的呼叫,你可能会想要保留这个请求并将它返回给重定向请求。) – 2014-09-06 05:04:42

+0

也不行,每次都得到相同的重定向响应,直到有很多他们和服务器保释出来。 – snod 2014-09-06 10:04:17