NSURLConnection 在 401 状态下重试

2024-01-17

我正在与服务器通信,该服务器验证密码并返回无效密码的 401 错误,以及指定失败尝试次数的 json 正文。每次验证失败时,服务器都会增加该数字。

我面临的问题是,当 NSURLConnection 收到 401 响应时,它会启动涉及这些委托方法的身份验证机制:

连接:canAuthenticateAgainstProtectionSpace:

连接:didReceiveAuthenticationChallenge:

如果我在可以验证方法,将发出新的相同请求。这将导致服务器第二次增加失败的尝试次数(这显然是不希望的),并且我将得到 401 响应(连接:didReceiveResponse:)

如果我在可以验证方法,那么didReceiveAuthenticationChallenge方法被调用。如果我想停止第二个请求,我可以打电话[challenge.sender cancelAuthenticationChallenge:challenge]。但如果我这样做,我不会收到 401 响应,而是收到错误。

我找不到捕获第一个 401 响应的方法。有什么办法可以做到这一点吗?


1)对于没有客户端证书的普通 SSL,您不需要实现这 2 种方法

2) 如果您仍然想要,您应该检查 [challenge failure Response] 对象中的 HTTP 响应代码:

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
    NSURLCredential *urlCredential = [challenge proposedCredential];
    NSURLResponse *response = [challenge failureResponse];
    int httpStatusCode = -1;
    if(response != nil) {
        NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
        httpStatusCode = [httpResponse statusCode];
    }    
    if(urlCredential != nil || httpStatusCode == 401) {
        //wrong username or more precisely password, call this to create 401 error
        [[challenge sender] cancelAuthenticationChallenge:challenge];
    }
    else {
        //go ahead, load SSL client certificate or do other things to proceed
    }    
}

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace
{       

 return YES;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSURLConnection 在 401 状态下重试 的相关文章

  • 获取对 iOS 应用程序中最顶层视图/窗口的引用

    我正在创建一个可重用的框架 用于在 iOS 应用程序中显示通知 我希望将通知视图添加到应用程序中其他所有内容的顶部 有点像 UIAlertView 当我初始化监听 NSNotification 事件并添加视图作为响应的管理器时 我需要获取对
  • Objective-C中如何使继承的类能够看到父类的隐藏方法[重复]

    这个问题在这里已经有答案了 我有两个类 Class1 和 Class2 第二个类继承自第一个类 我需要重写 Class1 的 update 方法来实现我的目标 继承方法中 update方法的改变是在代码中间进行的 所以我不能使用 超级更新
  • Swift 闭包作为 AnyObject

    我尝试使用这个方法 class addMethod 在 Obj c 中使用如下 class addMethod self class selector eventHandler imp implementationWithBlock han
  • CBPeripheral 名称有时为 null

    我正在开发一个应用程序来与蓝牙 LE 外围设备进行通信 我目前正在测试的外围设备是其中之一these http www ti com tool cc2540dk mini 有趣的是 有时当我发现它时 我会得到它的正确名称 SimpleBLE
  • 尝试复制文件时出错

    我正在尝试使用 NSFileManager 将临时文件复制到另一个位置 但是它失败并抱怨其中一个文件不存在 Copy temp file NSError error BOOL exists fileManager fileExistsAtP
  • 为什么 Xcode 4 不会对我未完整实现 UITableViewDataSource 协议发出警告?

    如果我在 Xcode 中使用以下代码声明并不完全实现我自己的协议 一些协议 h protocol SomeProtocol
  • 如何在 Swift 3 中解析 JSON 数组 [重复]

    这个问题在这里已经有答案了 我从 Socket 获取了一些我想访问的数据 但收到错误消息 指出每次都无法将 NSArray 转换为 NSDictionary struct SocketEventHandler let event Strin
  • 暂停视频录制[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试创建一个应用程序 用户可以在其中从相机录制视频 该应用程序的功能之一必须是文件录制中的暂停 例如 用户通过按 开始 按钮开始
  • iOS 11 安全区域布局指南向后兼容性

    启用安全区域布局指南是否与 iOS 11 以下版本兼容 我设法使用新的安全区域布局指南并保持与 iOS 9 和 iOS 10 的向后兼容性 编辑 正如 NickEntin 的评论所指出的 此实现将假定存在状态栏 但在 iPhone X 的横
  • Objective Flickr 照片上传错误

    我正在使用 ObjectiveFlickr 库将照片从我的 iPhone 应用程序上传到 Flickr 我可以授权该应用程序并执行一般请求 但在尝试上传照片时遇到错误 要上传的照片是使用 AVFoundation 捕获的图像 这是相关代码
  • 如何从代码隐藏中设置 CarouselView 的项目?

    我有一个 CarouselView 它绑定到图像的 ItemsSource 但我想通过更改 CarouselView 的索引来更改当前显示的图像 我尝试使用 CarouselView Position 作为必须选择的元素的索引 但不幸的是这
  • UISearchController 保留问题

    我正在尝试使用 UISearchController 但是我遇到了无法解决的保留问题 MainTableview 有两个部分 第1节 基于某些正则表达式过滤数据 第2节 All Data 我将 UISearchController 添加到我
  • 无法使用 Xamarin 和 WCF 访问 Web 服务

    我想使用 Xamarin 和 WCF 来使用公共 Web 服务 对于这个演示 我将使用Xamarin iOS 这是我试图使用的 公共 网络服务 http www webservicex net globalweather asmx WSDL
  • FireMonkey iOS RAD Studio XE2 - 在从 URL 加载的表单上显示图像

    是否可以将 TImage 放置在 iOS 的 FMX 表单上 并将图像 jpg 从 URL 加载到此 TImage 中以在 iOS 应用程序中显示 我尝试过但没有成功 任何正确方向的提示或指出都会受到赞赏 将 TButton TImageC
  • 使用 UIImageJPEGRepresentation 时,compressionQuality 应该是多少?

    我想对用户库中的照片应用滤镜 然后将其写回磁盘 我在用着UIImageJPEGRepresentation 该函数需要一个UIImage and a compressionQuality值介于 0 0 和 1 0 之间 因为我想保留原始质量
  • iOS7 中“-webkit-overflow-scrolling: touch” 最初的屏幕外元素被破坏

    既然转基因种子已经发布了 我们现在可以谈谈了 看起来 iOS7 中的 webkit overflow scrolling touch 已损坏 最初不在屏幕上的元素的触摸事件不会触发 或者在某些情况下只是不可靠 这是一个例子
  • 我应该在哪个方法中设置 UITextField 的委托?

    在 viewDidLoad 或 init 方法中设置 UITextField 的委托是一个好习惯吗 我尝试在 init 方法中将委托设置为 self 但它没有调用相应的委托方法 当我将代码移动到 viewDidLoad 中时 它注册为将 s
  • 为什么这个 SKPhysicsJointPin 不能将这 2 个精灵保持在一起?

    我显然不太了解 SKPhysicsJoint 但是除了 Apple 文档之外 网上的信息还很少 下面的代码有什么问题 我认为应该保持头部和颈部永久连接 我的意图是它们就像两张带有大头针的纸 这样它们可以旋转一点 但不仅仅是完全分开 当我运行
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • KeyboardAvoidingView - 隐藏键盘时重置高度

    我正在使用 React NativeKeyboardAvoidingView设置我的高度View当显示键盘时 但是当我关闭应用程序中的键盘时 视图的高度不会变回原来的值

随机推荐

  • 将 CSV 文件加载到 MySQL Workbench

    我有很多 excel CSV 文件需要加载到 MySQL Workbench 中的数据库中 我使用的是 Mac OS X 我已经四处寻找好的演练或教程 但我还没有看到任何清楚解释如何将 CSV 加载到 MySQL Workbench 中的内
  • 如何计算字符串中的唯一字符[重复]

    这个问题在这里已经有答案了 假设我们有变量 myString blabla 或 mystring 998769 myString Length will get you your result myString Count char IsL
  • 使用 GitHub 包 R 操作

    我试图使用actions https github com features actions in a package https github com Nelson Gon manymodelr我写 问题是这个包actions https
  • ModuleNotFoundError:AWS 中没有名为“应用程序”的模块错误

    我正在尝试将 Django 应用程序部署到 AWS 当我尝试创建应用程序时 出现错误 ModuleNotFoundError 没有名为 应用程序 的模块 使用django create django env 我不知道为什么 我的 djang
  • asp.net mvc 中 HttpUnauthorizedResult 的默认登录 url

    我写了一个自定义AuthorizeAttribute在asp net mvc3应用程序中具有以下条件 public override void OnAuthorization AuthorizationContext filterConte
  • 如何告诉我的 DataTemplate 绑定到 PARENT ViewModel 中的属性?

    我有以下内容MainView xaml可以很好地用作 MVVM 菜单切换器的文件 我有这些对 Page1View Page1ViewModel Page2View Page2ViewModel in my 主视图模型我用两个 ViewMod
  • 如何将 WebLogic Server 配置到现有 Eclipse

    我刚刚安装了 WebLogic Server 但在安装过程中我忘记了设置 Eclipse 的路径 现在我使用新安装的 Eclipse 来自 Oracle 安装向导 如何配置 Oracle WebLogic Server 以使用我的 Ecli
  • 具有一列单选按钮的 EXT js 网格

    我有一个 ext js 网格 如下所示 var grid new Ext grid GridPanel columns header Account Id dataIndex accountId header Account NUmber
  • AngularJS 中如何进行分页?

    我的内存中有一个包含大约 1000 个项目的数据集 并且正在尝试创建一个寻呼机 这个数据集 但我不确定如何做到这一点 我正在使用自定义过滤器函数来过滤结果 效果很好 但不知何故我需要获取页数 有什么线索吗 Angular UI Bootst
  • 填写groupby中缺失的日期

    想象一下我有一个数据框 如下所示 ID DATE VALUE 1 31 01 2006 5 1 28 02 2006 5 1 31 05 2006 10 1 30 06 2006 11 2 31 01 2006 5 2 31 02 2006
  • 如何在 Aerospike Node.js 客户端中获取主键

    我正在尝试从 Aerospike 获取所有记录以及主键 我尝试使用 client query 功能 如下所示 var query client query aerospikeDBParams dbName testRecords var s
  • 我应该使用什么来代替 OnMouseXXX 事件处理程序?

    我构建了一个小应用程序 在某些对象中使 用 OnMouseDrag 和 OnMouseDown 我认为这将是最好的选择 因为该方法不属于 Update 方法 然而 在编译应用程序时 Unity 表示 游戏脚本或其他自定义代码包含 OnMou
  • %errorlevel% 在循环命令中返回 0

    好的 我已经安装了 Dropbox 但它不符合我的要求 所以我使用 Revo Pro 卸载了它 但是 当我打开任务管理器时 我的计算机中仍然有与其相关的进程在运行 因此我决定进行批处理来查找并删除与其相关的所有文件 echo off cd
  • 如何指示可以使用内联 ASM 参数*指向*的内存?

    考虑以下小函数 void foo int iptr iptr 10 1 asm volatile nop r iptr iptr 10 2 使用海湾合作委员会 这编译为 https godbolt org z A3yVqA foo nop
  • 更快的深度克隆

    有人想要一个允许我按值克隆 Net 对象的框架 类吗 我只对公共读 写属性 即 DataContracts 感兴趣 并且不关心引用是否正确解析 即两次包含相同项目实例的集合 我尝试通过序列化技巧DataContractSerializer
  • R:添加两个具有相同尺寸的数据框

    我有 df1 Type CA AR Total alpha 2 3 5 beta 1 5 6 gamma 6 2 8 delta 8 1 9 我有 df2 Type CA AR Total alpha 3 4 7 beta 2 6 8 ga
  • Vim 的 PHP 调试器:调试命令行脚本

    我的 vim 调试器要求我在浏览器中设置 Xdebug cookie 方法是附加 XDEBUG SESSION START 1 之后我就可以开始调试了 但在 CLI 上调用脚本时我无法设置此 cookie 会话 如何使用 vim 调试命令行
  • Textract:失败,退出代码 127 // windows 10 // pdftotext

    当我尝试运行我的 使用 pyinstaller 部署后 程序来读取和转换 PDF 文件并将其输入到 google 工作表中时 我收到下图所示的错误 但是我似乎无法弄清楚问题是什么 Exception in Tkinter callback
  • 绕过 Angular URL 路由

    如何绕过 Angular 提供的路由 例如 在我的角度路由设置中 我设置了 routeProvider otherwise redirectTo someurl 我希望某个请求 由用户单击 HTML 中的某个链接生成 发送到我的网络服务器
  • NSURLConnection 在 401 状态下重试

    我正在与服务器通信 该服务器验证密码并返回无效密码的 401 错误 以及指定失败尝试次数的 json 正文 每次验证失败时 服务器都会增加该数字 我面临的问题是 当 NSURLConnection 收到 401 响应时 它会启动涉及这些委托