我正在尝试将[String : Any]
转换为String
,然后将其String
传递到forHTTPHeaderField
尝试1:没有漂亮
let encoder = JSONEncoder()
if let json = try? encoder.encode(jsonDict) {
convertedString = String(data: json, encoding: .utf8)!
}
print("JsonStringFormat ", convertedString )
let url = NSURL(string: getMenuURL)
let request = NSMutableURLRequest(url: url! as URL)
request.setValue(convertedString, forHTTPHeaderField: "SessionInfo")
print("\nHEADer__reQQ__ ", request.allHTTPHeaderFields)
输出:
JsonStringFormat {"Token":"96FFC5B994514B3D","UICulture":"en-CA ","LanguageCode":"ENG","CompanyID":"QAP","IMEINo":"1jzBG3TSrMzj\/tKihlEv8g=="}
HEADer__reQQ__ ["SessionInfo": "{\"Token\":\"96FFC5B994514B3D\",\"LanguageCode\":\"ENG\",\"UICulture\":\"en-CA \",\"CompanyID\":\"QAP\",\"IMEINo\":\"1jzBG3TSrMzj\\/tKihlEv8g==\"}"]
尝试2:打印有.pretty
let encoder = JSONEncoder()
// ADDING PRETTY FORMAT
encoder.outputFormatting = .prettyPrinted
if let json = try? encoder.encode(jsonDict) {
convertedString = String(data: json, encoding: .utf8)!
}
print("PrettyJsonStringFormat ", convertedString )
let url = NSURL(string: getMenuURL)
let request = NSMutableURLRequest(url: url! as URL)
request.setValue(convertedString, forHTTPHeaderField: "SessionInfo")
print("\nPrettyHeader__ ", request.allHTTPHeaderFields)
输出:
PrettyJsonStringFormat {
"Token" : "70E277954143414A",
"UICulture" : "en-CA ",
"LanguageCode" : "ENG",
"CompanyID" : "QAP",
"IMEINo" : "1jzBG3TSrMzj\/tKihlEv8g=="
}
PrettyHeader__ [:]
如果我尝试尝试1,则会在该值后附加BackSlash \
。为了避免这种情况,我尝试尝试2,[Pretty Printed]
。
我不知道为什么request.allHTTPHeaderFields
没有添加标头值。
请引导我。
答案 0 :(得分:1)
您应该在此link
中查看此答案您对标准的理解是正确的。过去,RFC 2616支持多行标头值。此功能称为“折线”:
如果连续行以空格或水平制表符开头,则HTTP / 1.1标头字段值可以折叠到多行上。所有线性空白(包括折叠)都具有与SP相同的语义。接收者可以在解释字段值或向下游转发消息之前,用单个SP替换任何线性空格。
答案 1 :(得分:0)
这是因为convertedString
中的Attempt2
有多行。
RFC表示已弃用具有多行的标头字段值。
从历史上看,HTTP标头字段值可以扩展到 多行,在每条额外行之前至少留一个空格 或水平制表符(折叠)。本规范不赞成这样 换行,但在message / http媒体类型中除外 (第8.3.1节)。发件人不得生成包含以下内容的消息 行折叠(即具有任何字段值且包含与 折叠规则),除非该消息是用于包装的 在message / http媒体类型中。
而且,setValue(_:forHTTPHeaderField:)
似乎忽略了这些值。
// This does nothing. Just ignoring the value "A\nB"
request.setValue("A\nB", forHTTPHeaderField: "C")
此外,Attempt1
中的反斜杠将没有问题。接收请求的服务器将正确处理该值。