gpt4 book ai didi

iOS HttpUrlResponse header 字段区分大小写

转载 作者:行者123 更新时间:2023-11-29 11:45:15 49 4
gpt4 key购买 nike

尝试从 HttpUrlResponse 获取 header 时,我发现 iOS 模拟器不区分大小写,而真实设备区分大小写。

The web service returns an HTTP header "Grandmas-Cookies: XXXX"

当header key有大写字母时:urlResponse.response.allHeaderFields["Grandmas-Cookies"] 作为?字符串

  • 模拟器没有找到 key 。
  • 真实设备可以看到 key 。

当header key全部为小写字母时:urlResponse.response.allHeaderFields["grandmas-cookies"] 作为?字符串

  • 模拟器确实找到了 key 。
  • 真实设备看不到 key 。

我可以对模拟器进行设置以使其行为与真实设备类似吗?在这一点上,将 Web 服务中的 HTTP header 更改为小写是不可取的,但奇怪的是,这种情况最近才开始发生(是的,这是那些有趣的时光之一)。

最佳答案

编辑:

@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,现在可以从应用程序中的任何位置引用它。这将返回大写

Grandmas-Cookies

当您在手机设备上运行时。

返回小写

grandmas-cookies

当您在 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,在手机设备上运行时返回 false。

我改编了这个 StackOverflow 中的代码 post制定适用于您的场景和我所面临的场景的解决方案。

关于iOS HttpUrlResponse header 字段区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44315389/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com