request.allHTTPHeaderFields总是返回Optional([:])

时间:2017-10-26 20:22:43

标签: swift swift4

我正在尝试获取网页的最后修改日期并尝试使用以下代码。但它总是在控制台中返回“Optional([:])”(空):

let url = URL(string:"http://www.carl-bechstein-gymnasium.de/news/news_index.htm")

let req = NSMutableURLRequest(url: url!, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)
req.httpMethod = "GET"
let headerFields = req.allHTTPHeaderFields
print(headerFields)

我还将此页面添加到Info.plist:

<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>http://www.carl-bechstein-gymnasium.de/</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

但它不起作用。

所以我试着检查一下,如果有任何标题,那就有了!这里是website的摘录,在那里我查了一下:

  

日期:·星期四,·26··月·2017年20:15:42·GMT(CR)(LF)   内容类型:·为text / html(CR)(LF)   内容长度:·36519(CR)(LF)   连接:·关闭(CR)(LF)   服务器:Apache的·(CR)(LF)   最后修改:·星期三,·18··月·2017年15:17:42·GMT(CR)(LF)

现在我很困惑,很快希望得到帮助......

2 个答案:

答案 0 :(得分:5)

您是否正在尝试获取请求或网站响应的标头?现在,您正在获取请求的所有标题,并且由于您没有任何标题,因此它将为空。

如果您正在尝试获取响应标头,则可以通过URLResponse将其转换为HTTPURLResponse数据任务中返回的URLSession对象来获取响应标头,例如这样:

URLSession.shared.dataTask(with: req) { data, response, error in
    if let httpResponse = response as? HTTPURLResponse {
        print(httpResponse.allHeaderFields)
    }
}.resume()

答案 1 :(得分:4)

req.allHTTPHeaderFields是您的请求的标头,而不是响应的标头。您实际上没有在此代码中发送请求,您只配置了一个要发送的请求。