- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我对 NSURLRequest(和伴奏)实现进行了尝试和测试,这对给定 URL 的 GET 和 POST 非常有效。
但是,我现在想在不更改应用程序使用的 URL 的情况下移动 URL 的目标,因此我打算通过我的 DNS 提供商使用 webhop 重定向。
这适用于 GET 请求,但 POST 只是挂起...没有收到连接响应。
处理重定向的相关 iOS 方法是,
-(NSURLRequest *)connection:(NSURLConnection *)connection
willSendRequest:(NSURLRequest *)request
redirectResponse:(NSURLResponse *)redirectResponse
根据 Apple 的 ( handling redirects) 文档,
如果委托(delegate)未实现 connection:willSendRequest:redirectResponse:,则允许所有规范更改和服务器重定向。
嗯,这不是我的经验,因为不使用这种方法对我不起作用。请求只是挂起而没有响应。
Apple 还建议实现 willSendRequest(请参阅上面链接的 Apple 文档),同样这对我不起作用。我看到调用,但生成的请求只是挂起。
我当前的 willSendRequest 实现如下(见下文)。这遵循重定向,但处理请求时就好像它是 GET 而不是 POST。
我认为问题在于重定向丢失了 HTTP 请求是 POST 的事实(可能还有更多问题,例如也将请求 Body 转发?)。
我不确定我应该在这里做什么。因此,我们将不胜感激任何有关如何正确处理接收重定向的 POST 的建议。谢谢。
-(NSURLRequest *)connection:(NSURLConnection *)connection
willSendRequest:(NSURLRequest *)request
redirectResponse:(NSURLResponse *)redirectResponse
{
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) redirectResponse;
int statusCode = [httpResponse statusCode];
NSLog (@"HTTP status %d", statusCode);
// http statuscodes between 300 & 400 is a redirect ...
if (httpResponse && statusCode >= 300 && statusCode < 400)
{
NSLog(@"willSendRequest (from %@ to %@)", redirectResponse.URL, request.URL);
}
if (redirectResponse)
{
NSMutableURLRequest *newRequest = [request mutableCopy]; // original request
[newRequest setURL: [request URL]];
NSLog (@"redirected");
return newRequest;
}
else
{
NSLog (@"original");
return request;
}
}
附加信息 1
willSendRequest 收到的 HTTP 代码是 301 - 'Moved Permanently.
使用 allHTTPHeaderFields 提取 header 字段,我看到他最初提交的请求有 header
HTTP header {
"Content-Length" = 244;
"Content-Type" = "application/json";
}
...并且复制/重定向的请求具有 header ,
Redirect HTTP header {
Accept = "*/*";
"Accept-Encoding" = "gzip, deflate";
"Accept-Language" = "en-us";
"Content-Type" = "application/json";
}
...这看起来不像原始请求的副本,甚至也不像超集。
最佳答案
保留您的原始请求,然后提供您自己的 willSendRequest:redirectResponse:
来自定义那个请求,而不是使用 Apple 提供给您的请求。
- (NSURLRequest *)connection: (NSURLConnection *)connection
willSendRequest: (NSURLRequest *)request
redirectResponse: (NSURLResponse *)redirectResponse;
{
if (redirectResponse) {
// The request you initialized the connection with should be kept as
// _originalRequest.
// Instead of trying to merge the pieces of _originalRequest into Cocoa
// touch's proposed redirect request, we make a mutable copy of the
// original request, change the URL to match that of the proposed
// request, and return it as the request to use.
//
NSMutableURLRequest *r = [_originalRequest mutableCopy];
[r setURL: [request URL]];
return r;
} else {
return request;
}
}
通过这样做,您明确地忽略了 HTTP 规范的某些方面:重定向通常应转换为 GET 请求(取决于 HTTP 状态代码)。但实际上,当从 iOS 应用程序发布时,这种行为会更好地为您服务。
另见:
关于ios - NSURLRequest:如何处理重定向的帖子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10783499/
我正在尝试使用谷歌浏览器的 Trace Event Profiling Tool分析我正在运行的 Node.js 应用程序。选择点样本后,我可以在三种 View 之间进行选择: 自上而下(树) 自上而
对于一个可能是菜鸟的问题,我们深表歉意,但尽管在 SO 上研究了大量教程和其他问题,但仍找不到答案。 我想做的很简单:显示一个包含大量数据库存储字符串的 Android ListView。我所说的“很
我已经开始了一个新元素的工作,并决定给 Foundation 5 一个 bash,看看它是什么样的。在创建带有水平字段的表单时,我在文档中注意到的第一件事是它们使用大量 div 来设置样式。所以我在下
我有一个 Windows 窗体用户控件,其中包含一个使用 BeginInvoke 委托(delegate)调用从单独线程更新的第 3 方图像显示控件。 在繁重的 CPU 负载下,UI 会锁定。当我附加
我有一堆严重依赖dom元素的JS代码。我目前使用的测试解决方案依赖于 Selenium ,但 AFAIK 无法正确评估 js 错误(addScript 错误不会导致您的测试失败,而 getEval 会
我正在制作一款基于滚动 2D map /图 block 的游戏。每个图 block (存储为图 block [21][11] - 每个 map 总共 231 个图 block )最多可以包含 21 个
考虑到以下情况,我是前端初学者: 某个 HTML 页面应该包含一个沉重的图像(例如 - 动画 gif),但我不想强制客户缓慢地等待它完全下载才能享受一个漂亮的页面,而是我更愿意给他看一个轻量级图像(例
我正在设计一个小软件,其中包括: 在互联网上获取资源, 一些用户交互(资源的快速编辑), 一些处理。 我想使用许多资源(它们都列在列表中)来这样做。每个都独立于其他。由于编辑部分很累,我想让用户(可能
我想比较两个理论场景。为了问题的目的,我简化了案例。但基本上它是您典型的生产者消费者场景。 (我关注的是消费者)。 我有一个很大的Queue dataQueue我必须将其传输给多个客户端。 那么让我们
我有一个二元分类问题,标签 0 和 1(少数)存在巨大不平衡。由于测试集带有标签 1 的行太少,因此我将训练测试设置为至少 70-30 或 60-40,因此仍然有重要的观察结果。由于我没有过多地衡量准
我是一名优秀的程序员,十分优秀!