NEHotspotHelper:无法在身份验证状态机的身份验证状态下发送 Web 请求

2024-01-03

我已经实施了NEHotspotHelper这样我就可以在后台对具有强制门户的网络执行身份验证。

我需要在“身份验证”状态下执行 Web 请求,以便可以检索 Wispr 并访问 API。

但是,当我尝试使用URLSession发送网络请求,请求失败。这是错误:

[594:88737] dnssd_clientstub read_all(7) DEFUNCT
[594:88783] TIC TCP Conn Failed [4:0x1c0177a00]: 12:8 Err(-65554)
[594:88783] Task <FFD0DAE6-4864-437D-94F2-C9ED5D5748E2>.<1> HTTP load failed (error code: -1003 [12:8])
[594:88783] Task <FFD0DAE6-4864-437D-94F2-C9ED5D5748E2>.<1> finished with error - code: -1003

看我的代码片段:


 let registered = NEHotspotHelper.register(options: options, queue: queue) { (cmd: NEHotspotHelperCommand) in
    print("Received command: \(cmd.commandType.rawValue)")
    if cmd.commandType == NEHotspotHelperCommandType.filterScanList {
        //Get all available hotspots
        print("filter scan list")
        var list: [NEHotspotNetwork] = cmd.networkList!
        var response: NEHotspotHelperResponse
        for l in list {
            if (l.ssid=="my-ssid") {
                response = cmd.createResponse(NEHotspotHelperResult.success)
            } else {
                response = cmd.createResponse(NEHotspotHelperResult.failure)                       
            }
            response.setNetworkList([chosenNetwork])
            response.deliver()
        }   
    } else if cmd.commandType == NEHotspotHelperCommandType.evaluate {
        if let network = cmd.network {            
            if (network.ssid=="my-ssid") {            
                network.setConfidence(NEHotspotHelperConfidence.high)
                let response = cmd.createResponse(NEHotspotHelperResult.success)
                response.setNetwork(network)                 
                response.deliver() //Respond back
            } else {
                let response = cmd.createResponse(NEHotspotHelperResult.failure)
                response.deliver()
            }
        }
    } else if cmd.commandType == NEHotspotHelperCommandType.authenticate {
        print("authenticate")
        var response = cmd.createResponse(NEHotspotHelperResult.unsupportedNetwork)
        if let network = cmd.network{
            if network.ssid == "my-ssid"{
                self.queryUrl()
                response = cmd.createResponse(NEHotspotHelperResult.success)
            }
        }
        response.deliver() //Respond back                    
    }
}

func queryUrl(){
    let config = URLSessionConfiguration.default
    config.allowsCellularAccess = false;

    let session = URLSession.init(configuration: config)

    let url = URL(string: "https://172.217.20.35")

    let semaphore = DispatchSemaphore(value: 0)
    let task = session.dataTask(with: url!){(data, response, error) in
        if  data==nil {
            print(data as Any)            
        }
        else{
            print(NSString(data: data!, encoding: String.Encoding.utf8.rawValue) as Any)
        }
        semaphore.signal()
    }

    task.resume()
    _ = semaphore.wait(timeout: .distantFuture)    
}

我也面临着类似的问题。但是,我发现开发人员需要先将请求与接收到的命令绑定,然后再向连接的网络发出 Web 请求。你需要做的就是使NSMutableURLRequest然后打电话hitTestURLRequest.bind(to: command)因为bind函数是在类中定义的NSMutableURLRequest.

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

NEHotspotHelper:无法在身份验证状态机的身份验证状态下发送 Web 请求 的相关文章

随机推荐

  • [if ( ! Defined( 'ABSPATH' ) )] 是什么意思

    我目前正在从头开始构建一个 WordPress 主题 作为 在工作中学习 的一种手段 尽管我过去非常依赖 PageBuilders 但我对后端工作有一定的经验 我现在希望创建一个没有任何页面构建器的主题 作为提高其加载速度等的方法 目前 我
  • C# 中重载函数调用运算符

    是否可以重载 C 中的默认函数运算符 运算符 如果是这样 怎么办 如果没有 是否有解决方法可以产生类似的效果 EDIT 我试图给一个类一个默认运算符 大致如下 class A A int myvalue save value public
  • 使用警报管理器与 ScheduledExecutorService 调度相同的任务有什么区别

    您好 我在互联网上读到 我们可以使用警报管理器安排我们想要以一定间隔运行的任何事情 并且ScheduledExecutorService 我想知道它们之间有什么区别以及什么时候使用 提前致谢 ScheduledExecutorService
  • git-mv 的目的是什么?

    据我了解 Git 并不真正需要跟踪file重命名 移动 复制操作 那么真正的目的是什么 的git mv https git scm com docs git mv 手册页没有特别描述性 它已经过时了吗 它是一个内部命令 不适合普通用户使用吗
  • NUnit TestCaseSource 将值传递给工厂

    我正在使用 NUnit 2 5 3 TestCaseSource 属性并创建一个工厂来生成我的测试 像这样的东西 Test TestCaseSource typeof TestCaseFactories VariableString pub
  • 方案/球拍过滤器/映射多个参数

    可以说我想做以下事情 define foo lst x filter function lst but function接受 2 个参数 并且function给了我 其中之一是清单lst它将使用 另一个是x 从语法上讲 我将如何更改该行以传
  • 在 UNIX shell 脚本中将十进制转换为十六进制

    在 UNIX shell 脚本中 我可以使用什么将十进制数转换为十六进制数 我以为 od 可以解决这个问题 但它没有意识到我正在向它提供数字的 ASCII 表示形式 打印 总的 目前可以使用 但是还有什么可用的呢 Tried printf
  • 如何从单词中删除字母 X?

    我需要从单词中删除字母 X 例如 我需要剪掉 Star Wars 中的第一个字母 munich 中的第四个字母 1 star wars 4 munich 5 casino royale 7 the fast and the furious
  • 使用 C++ FindContours 在视频图像中查找轮廓的问题

    我现在正在工作的程序是almost完成了 但我对结果不是很满意 通过使用 Canny 算法 我成功地获得了非常清晰的物体轮廓 但程序在识别轮廓并用红线绘制轮廓时存在一些问题 该程序 void setwindowSettings namedW
  • PHP - 检测 CSV 分隔符的最佳方法

    我已经看到了多个关于自动检测传入 CSV 分隔符的最佳解决方案的主题 其中大多数是长度在 20 30 行之间的函数 多个循环预先确定的分隔符列表 读取前 5 行并匹配计数等 这是 1 个例子 https stackoverflow com
  • Laravel:如何从目录中获取随机图像?

    我有一个包含子目录的目录 每个子目录中都有图像 我想随机显示图像 下面我的 php 代码运行良好 但在 Laravel 中不起作用 问题在于opendir and readdir 查看刀片 div div
  • 如何与盐师沟通

    我正在尝试从 salt minion 访问 salt master 但是 我无法获得 salt master 的密钥 在我的虚拟机上 我安装了salt master在我的 Windows 上 我安装了salt minion 我已经在我的mi
  • 如何在 Makefile 中定义规则以仅编译已修改的 *.cpp 文件(及其依赖项),而不是所有 *.cpp 文件

    假设我有文件 Libs 一 cpp 一 h 两个 cpp 两个 h 三 cpp 三 h Program 程序 cpp 有没有办法创建 Makefile 它只编译上次编译时修改的 cpp 目前我有类似的东西 SRCS one cpp two
  • 提取两个字符串之间的所有字符串

    我正在尝试开发一种方法来匹配两个字符串之间的所有字符串 我已经尝试过 但它只返回第一个匹配项 string ExtractString string s string start string end You should check fo
  • 使用原则 2 和存储库,服务层的目的是什么?

    我正在设计我的应用程序 并且正在使用 Doctrine 2 和 Zend Framework 目前 我已经编写了所有实体 我将开始编写存储库 我想到了服务 我想知道我的服务层是否不会重复存储库 当我使用 Doctrine 2 存储库时 是否
  • 混淆(表单属性)[重复]

    这个问题在这里已经有答案了 我对使用 form 属性感到困惑 Form From MDN 一个输入最多可以与一个表单关联 From W3S form属性指定一个或多个表单元素 属于 要引用多个表单 请使用 以空格分隔的表单 ID 列表 那么
  • Google Apps 脚本 - 如何替换文件?

    我正在尝试使用脚本替换 Google 云端硬盘文件夹中的 PDF 文件 由于GAS不提供添加修订 版本 的方法 我试图替换文件的内容 但我得到的只是一个空白的PDF 我无法使用 DriveApp File 类 因为我们的管理员已禁用新 AP
  • C#:根据平台访问 32 位/64 位 DLL

    我们使用 C 应用程序中自行编写的 32 位 C DLL 现在我们注意到 当 C 应用程序在 64 位系统上运行时 会自动使用 64 位运行时 当然无法从 64 位运行时访问 32 位 DLL 我的问题是 有没有办法使用32位DLL 如果不
  • 从 iPhone 删除应用程序时如何删除所有本地通知

    假设我为 iPhone 应用程序设置了 5 个本地通知 然后用户删除了该应用程序 如果再次安装该应用程序 它会显示之前的通知 我知道以下代码会删除所有通知 UIApplication sharedApplication cancelAllL
  • NEHotspotHelper:无法在身份验证状态机的身份验证状态下发送 Web 请求

    我已经实施了NEHotspotHelper这样我就可以在后台对具有强制门户的网络执行身份验证 我需要在 身份验证 状态下执行 Web 请求 以便可以检索 Wispr 并访问 API 但是 当我尝试使用URLSession发送网络请求 请求失