NSURLRequest:如何处理重定向的帖子?

2023-11-26

我对 NSURLRequest (和伴奏)实现进行了尝试和测试,它非常适合给定 URL 的 GET 和 POST 。

但是,我现在想要移动 URL 的目标而不更改应用程序使用的 URL,因此我打算通过 DNS 提供商使用 Webhop 重定向。

这对于 GET 请求工作得很好,但 POST 只是挂起......没有收到连接响应。

处理重定向的相关 iOS 方法是,

-(NSURLRequest *)connection:(NSURLConnection *)connection
    willSendRequest:(NSURLRequest *)request
    redirectResponse:(NSURLResponse *)redirectResponse

根据苹果的文档(处理重定向),

如果委托未实现连接:willSendRequest:redirectResponse:,则允许所有规范更改和服务器重定向。

嗯,这不是我的经验,因为忽略这个方法对我来说不起作用。请求只是挂起而没有响应。

Apple 还建议了 willSendRequest 的实现(请参阅上面链接的 Apple 文档),但这对我来说同样不起作用。我看到了调用,但生成的请求只是挂起。

我当前的 willSendRequest 实现如下(见下文)。这遵循重定向,但处理请求就像是 GET,而不是 POST。

我认为问题在于重定向丢失了 HTTP 请求是 POST 的事实(可能还有更多问题,例如也将请求正文也向前传送?)。

我不知道我应该在这里做什么。因此,任何有关如何正确处理接收重定向的 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 - '永久移动。

使用 allHTTPHeaderFields 提取标头字段,我看到他最初提交的请求具有标头

HTTP header {
  "Content-Length" = 244;
  "Content-Type" = "application/json";
}

...并且复制/重定向的请求具有标头,

Redirect HTTP header {
  Accept = "*/*";
  "Accept-Encoding" = "gzip, deflate";
  "Accept-Language" = "en-us";
  "Content-Type" = "application/json";
}

...这看起来不像原始请求的副本,甚至不是超集。


保留您的原始请求,然后提供您自己的请求willSendRequest:redirectResponse:定制that请求,而不是使用 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 应用程序进行 POST 时,此行为会更好。

也可以看看:

  • iOS 开发者库,URL 加载系统编程指南:处理重定向和其他请求更改
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSURLRequest:如何处理重定向的帖子? 的相关文章

  • iOS 外部附件框架:如何获取特定 MFI 设备的协议字符串

    我正在编写一个 iOS 应用程序 用于与 mini mPlay Drumi MP18B 小型蓝牙扬声器 进行通信 据我所知 showBluetoothAccessoryPickerWithNameFilter仅显示协议字符串添加到 Info
  • UIBezierPath 的起始和结束角度?

    我在 iOS 中使用如下代码编写了半圆UI贝塞尔路径 and CAShape层 clockWiseLayer CAShapeLayer alloc init CGFloat startAngle M PI 2 CGFloat endAngl
  • 从 RemoteIO 保存音频的示例?

    我进行了搜索 但没有找到任何从 RemoteIO 音频单元保存音频的好示例或教程 我的设置 使用 MusicPlayer API 我有几个 AUSamplers gt MixerUnit gt RemoteIO 音频播放效果很好 我想添加将
  • 在WKWebview中设置useragent

    如何在 WKWebView 中设置自定义用户代理字符串 我正在尝试嵌入我的应用程序的版本 以便我的服务器端可以看到可用的功能 我找到了以下方法 let userAgent MyApp 1 33 7 request setValue user
  • 在 Swift 中检查一个数组是否包含另一个数组的所有元素

    我想为数组编写一个扩展来检查一个数组是否包含另一个数组的所有元素 在我的用例中它是字符串对象 但我一直得到 Cannot convert value of type T Generator Element to expected argum
  • UIImage:如何获取网站选项卡图标

    我正在开发一个 RSS 阅读器 我需要获取每个提要的图标 例如 如果我的提要是 google com 我想获取 G 图标并将其放入 UIImage 或其他内容中 关于如何实现这一目标有什么想法吗 最简单的方法是使用 Google NSStr
  • 如何在 EKRecurrenceRule 中设置一周中某一天的数组?

    我想在用户选择的特定日期每周添加事件 可以是一个或多个 也可以是一整天 我将用户选择的日期值存储在模型类变量中 但是 当我添加事件并选择日期时 假设今天是星期一 我选择星期二和星期三并保存 然后我查看周一和周三添加的 iPhone 日历 我
  • Swift 中 UIImages 的淡入淡出动画

    我有一组图像 我希望它们在登录屏幕的背景中淡出 我无法在 swift 中找到任何可以做到这一点的东西 有什么办法我可以做到吗 这是我当前的代码 override func viewDidLoad super viewDidLoad star
  • 下标:使用字符串枚举访问我的字典值

    我想做类似的事情 使用字符串枚举访问我的字典值 我试图重载字典的下标但没有成功 访问字典 let district address JsonKeys district 其中 JsonKeys 是 enum JsonKeys String c
  • Xcode MyProjectName-Bridging-Header.h 不存在

    我想开始在我的 Objective C 项目中使用 Swift 所以我添加了一个快速类 import Foundation objc class System NSObject objc func printSome println Pri
  • XCode 调试 - 我可以绕过反汇编代码的单步执行吗

    调试项目时 在 XCode 中设置断点后 我将开始单步执行代码 然后我会遇到反汇编代码 我认为这些代码是对没有可用源代码的各种框架的调用 这是一个正确的假设吗 有没有一种方法 可能通过我尚未找到的项目设置 来抑制此汇编代码的显示 而不必单步
  • 如何比 CGContextStrokePath 更快地渲染线条?

    我正在使用 CGContextStrokePath 绘制约 768 个点的图表 问题是 每一秒我都会得到一个新的数据点 从而重新绘制图表 目前 这个已经很繁忙的应用程序占用了 50 的 CPU 图形绘制是在UIView 中的drawRect
  • 在 iOS 上的 SceneKit 中导入 3d 模型

    从 URL 导入 obj 文件并将其转换为 SCNNode 时遇到问题 这是代码 swift3 let url URL init string https cloud box com shared static ock9d81kakj91d
  • Expo 应用程序“您的应用程序正在使用广告标识符 (IDFA)”

    我正在尝试将应用程序上传到应用程序商店 每次我上传二进制文件时 苹果都会坚持认为我的应用程序正在使用广告 而我从未实现过这样的事情 我查看了文档并删除了涉及的所有代码ASIdentifier and adIdentifier我不太确定我错过
  • RxSwift、RxCocoa 和 UITableview

    我在使用 RxSwift 实现 UITableView 时遇到问题 我尝试使用以下代码将模型数组的可观察对象绑定到表项 models bind to self tableView rx items cellIdentifier Cell c
  • 当 Firebase 函数以 Swift 结束时

    我在我的应用程序中使用 Firebase 它查询大量用户并获取所需的特定数据 但是当它开始查询时 其余功能也继续运行 而不仅仅是查询 所以我无法理解当它结束时 例如在这段代码中 ref observeEventType ChildAdded
  • 后台模式下的 AVSpeechSynthesizer

    我无法获取 iOS 7AVSpeechSynthesizer当我的 iOS 应用程序处于后台模式时工作 我添加了 应用程序播放音频 应用程序支持的后台模式的关键 但我仍然无法让它工作 我还研究了创建一个AVMutableCompositio
  • 如何在 iOS 5 中使用 Embed Segue?

    iOS 6 引入了 Embed Segue 允许在 Storyboard 中使用自定义容器控制器 有没有办法在 iOS 5 上复制这个 这里的挑战是子视图控制器的视图通常要添加为父视图控制器的某些容器视图的子视图 因为你不能随机进行序列UI
  • iOS SWIFT - WebRTC 从前置摄像头更改为后置摄像头

    WebRTC 视频默认使用前置摄像头 效果很好 但是 我需要将其切换到后置摄像头 但我无法找到任何代码来执行此操作 我需要编辑哪一部分 是 localView 或 localVideoTrack 还是捕获器 斯威夫特3 0 对等连接只能有一
  • HTML5 地理定位 - 在 iOS 上无法始终工作

    目前正在使用 HTML5 地理定位 我已经在所有网络浏览器上测试了它 它似乎工作正常 然而 当我在 iPad 上测试地理定位时 它在 iPad mini 上始终有效 但当我将其放在更大的 iPad iPad 2 上时 位置似乎并不总是有效

随机推荐

  • 为什么“while true”会使用100%的CPU资源?

    我在 Linux 服务器上运行了以下 Java 代码 while true int a 1 2 导致其中一个CPU核心达到100 使用率 我对此感到困惑 因为我了解到CPU通过时间分割来处理任务 这意味着CPU将在一个时隙内执行一项任务 C
  • 将 MDB 转换为 CSV [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我有一个 MS Access mdb 文件 我需要将其转换为 CSV 文件 我该怎么做 请不要向我指出任何免费软件 提前致谢 另一个有用的工具是 mdbtools http mdbt
  • 如何捕获此错误:“注意:未定义的偏移量:0”

    我想捕获这个错误 a 1 jfksjfks try b a 0 catch Exception e echo jsdlkjflsjfkjl Edit 事实上 我在以下行中收到此错误 parse xml gt children 0 gt ch
  • SSIS 2012 使用项目部署模型将值从子包传递到父包

    我正在使用新的项目部署模型 我有一个名为 ETL 的主包 我的 ETL 包所做的第一件事是运行一个名为 get SFTP files 的包 如图所示 在获取 SFTP 文件中 foreach 循环获取 ClientID 我如何将此值传递回父
  • 如何在 Android Studio 中创建我自己的“重新格式化代码”样式?

    在 Eclipse 中 窗口 gt 首选项 gt Java gt 代码样式 gt 格式化程序 有一个工具可以创建我自己的格式样式并将其应用到代码中 有没有办法在 Android Studio 中做到这一点 对于 Java 代码 要更改格式化
  • 有类似 C 语言的 STL(矢量、地图...)之类的库吗? [复制]

    这个问题在这里已经有答案了 可能的重复 C 容器类 库 有没有好的C语言集合库 在 C 中 您有一个非常有用的标准模板库 STL 它具有向量 映射 集合等结构 如果我使用纯 C 是否有任何库提供类似的结构 函数 Thanks glib是一个
  • 如何更改 Spring Boot 中允许的标头

    我目前正在使用 Auth0 和 Angular 2 GUI 它发送以下类型的标头 x xsrf token 在对 Spring Boot API 的请求中 我收到错误 XMLHttpRequest 无法加载http localhost 30
  • 使用 Zend_Auth 保护所有控制器

    我如何全局保护我的所有控制器 除了我的登录控制器 以确保我的应用程序在所有点都是安全的 没有ajax调用的隐藏后门等 我想我可以把它放在我的引导文件中 但这感觉不对 我试图避免向每个控制器添加任何代码 建议 edit 这是对 singles
  • 检查字符串是否仅包含字母+空格?

    我想编写一个传递字符串的静态方法 并检查该字符串是否仅由字母和空格组成 我可以根据需要使用 String 的方法 length 和 charAt i 我在想类似以下的事情 对伪代码感到抱歉 public static boolean onl
  • Google Drive Android API (GDAA) getResourceId() 返回 null(计时问题)

    当测试时删除 垃圾箱中讨论的功能SO 22295903 我遇到了这个问题 1 创建一个包含内容的文件 GoogleApiClient gac DriveFile createFileWait DriveFolder fldr String
  • Imagick - 无法从 URL 读取图像文件。

    我使用此片段来读取不同网站上的图像 image new Imagick http lp hm com hmprod set key source value model 2012 P01 05156 06204 80 1175 4 jpg
  • 检查变量是否为 SRE_Match

    我需要检查变量是否是正则表达式匹配对象 print type m 返回类似的内容 lt sre SRE Match object at 0x000000000345BE68 gt 但是当我导入时 sre并尝试执行type m is SRE
  • 在 OS X 上安装 Spatialite for python (GeoDjango)

    我正在费尽心思地尝试安装 Spatialite for GeoDjango 我已经在使用 Homebrew 它通常很简单且方便 所以我最初尝试遵循自制说明对于 GeoDjango 但这无法安装任何数据库 即 Spatialite 下一步是尝
  • Valgrind 合法的“可能丢失”字节示例

    我看到 valgrind 将内存泄漏分为 肯定输了 间接损失 可能丢失 仍然可以到达 压制 我刚刚修复了一个泄漏 其中 可能丢失 是主要问题 The 文件说 可能丢失意味着你的程序正在泄漏内存 除非你对指针做了不寻常的事情 这可能导致它们指
  • 将 MySQL 事件通知返回给 Delphi 应用程序

    G Day 有谁能够提供一些关于如何通知我的 Delphi 应用程序我的 MySQL 数据库中的特定记录已更改的指示吗 有类似 Interbase 事件系统的东西吗 我看过的想法 Q4M http q4m 31tools com 优点 无需
  • 我可以让 git 以合理的顺序打印 x.y.z 样式标签名称吗?

    考虑这个版本号列表 0 3 0 0 3 1 0 3 8 0 3 9 0 3 10 0 3 11 git tag将按以下顺序打印它们 0 3 0 0 3 1 0 3 10 0 3 11 0 3 2 我有什么办法可以使git tag按 数字 顺
  • 如何在 Python 中创建子进程?

    我想创建一个流程的子流程 展示如何实现这一目标的工作示例是什么 从子流程文档 如果你想得到输出 gt gt gt import subprocess gt gt gt output subprocess Popen uname a stdo
  • 如何在 ember.js 的组件中获取商店

    我究竟如何获得组件内部存储的句柄 我正在尝试创建一个从商店返回结果的自动完成组件 App AutoCompleteComponent Ember Component extend Ember Properites content Ember
  • 欧拉计划问题 14(Collat​​z 问题)

    为正整数集定义以下迭代序列 n gt n 2 n 为偶数 n gt 3n 1 n 为奇数 使用上面的规则并从 13 开始 我们生成以下序列 13 40 20 10 5 16 8 4 2 1 可以看出 这个序列 从 13 开始 到 1 结束
  • NSURLRequest:如何处理重定向的帖子?

    我对 NSURLRequest 和伴奏 实现进行了尝试和测试 它非常适合给定 URL 的 GET 和 POST 但是 我现在想要移动 URL 的目标而不更改应用程序使用的 URL 因此我打算通过 DNS 提供商使用 Webhop 重定向 这