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 状态下重试 的相关文章

随机推荐

  • 将 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 响应时 它会启动涉及这些委托