为此,我将假装原始 url 是http://host/form
,而新 url 是https://host/form
. (请注意,在我发布这个之前,两个 URL 都将是安全的。但是,非安全到安全似乎是一个方便的重定向来测试它。)
我正在使用NSURLConnection
重定向我的 Web API 访问。基本上,我想将我刚刚提交的所有内容http://hostaform
重新提交给https://host/form
. 我认为这将是默认行为,但看起来身体在重定向中丢失了。
所以我认为我需要处理 's 代表的connection:willSendRequest:redirectResponse:
事件NSURLConnection
并重新附加身体。问题是这条消息似乎没有充分记录。我可以在此方法上找到的唯一信息是NSURLConnection 类参考,这不是很有帮助。除其他外,它包括:
redirectResponse:导致重定向的 URL 响应。如果由于代理参与重定向处理而未发送此方法,则可能为 nil。
我不确定这意味着什么。结合初始willSendRequest:
调用,我认为这意味着willSendRequest:
在重定向响应之前,即使是我的初始请求也正在发送。那是对的吗?
因此,我向我的委托添加了代码以额外保留正文,并添加了以下willSendRequest:
处理程序:
- (NSURLRequest *)connection: (NSURLConnection *)inConnection
willSendRequest: (NSURLRequest *)inRequest
redirectResponse: (NSURLResponse *)inRedirectResponse;
{
if (inRedirectResponse) {
NSMutableURLRequest *r = [[inRequest mutableCopy] autorelease];
[r setURL: [inRedirectResponse URL]];
[r setHTTPBody: body];
return r;
} else {
return inRequest;
}
}
它不起作用。但我什至不确定这是否是正确的方法。这对我来说似乎过于hackish。我应该做什么?这在任何地方都有记录吗?到目前为止,我在 Apple 的文档或使用 Google 中没有发现任何有用的信息。
(这是在 iPhone 上,尽管这些类似乎没有太大区别。)