iOS httpurlresponse标头域case敏感性



尝试从httpurlresponse获取标题时,我发现iOS模拟器对细胞不敏感,而真实的设备对病例敏感。

Web服务返回HTTP标题"奶奶:xxxx"

当标头键具有大写字母时: urlResponse.response.allHeaderFields["Grandmas-Cookies"] as? String

  • 模拟器找不到键。
  • 真实的设备看到钥匙。

当标头键具有所有小写字母时: urlResponse.response.allHeaderFields["grandmas-cookies"] as? String

  • 模拟器确实找到了键。
  • 真正的设备看不到键。

是否可以对模拟器进行设置,以与真实设备相似?在这一点上,将Web服务中的HTTP标头更改为小写是不可取的,但是这仅是最近才开始发生的(是的,这是其中一个有趣的时期(。

编辑:

@adam我找到了一种更好的方法来确保这不是问题。

我创建了使检查案例不敏感的功能。

func find(header: String) -> String? {
        let keyValues = allHeaderFields.map { (String(describing: $0.key).lowercased(), String(describing: $0.value)) }
        if let headerValue = keyValues.filter({ $0.0 == header.lowercased() }).first {
            return headerValue.1
        }
        return nil
    }

以下可能对某些人有用。

要解决此问题,我创建了一个struct。在struct中,我创建了一个静态变量grandmasCookies,现在可以从应用程序中的任何地方引用。这返回上案

奶奶

在手机设备上运行时。

这返回小写

奶奶

当您在MacBook Pro。

之类的设备上运行时
struct Platform {
    static let grandmasCookies: String = {
        var xtoken = "Grandmas-Cookies"
        #if arch(i386) || arch(x86_64)
            xtoken = "grandmas-cookies"
        #endif
        return xtoken
    }()
    static let isSimulator: Bool = {
        var isSim = false
        #if arch(i386) || arch(x86_64)
            isSim = true
        #endif
        return isSim
    }()
}

我创建了第二个便利变量isSimulator,该变量在从模拟器运行时返回true和在电话设备上运行时返回。

我从此stackoverflow帖子中调整了代码,以制作一个适用于您的方案的解决方案,并且我也面临的解决方案。

相关内容

  • 没有找到相关文章

最新更新