如何在 Swift 中的 HTTP Head 字段使用的字符串中包含引号(“)
·
问题:如何在 Swift 中的 HTTP Head 字段使用的字符串中包含引号(“)
最近我使用 GitHub API 请求一些资源,我发现 Etag 可以帮助我,因为它可以避免重复的 URL 请求。但是,我遇到了包含 ETag 的 HTTP 请求问题。
根据 ETag(https://en.wikipedia.org/wiki/HTTP_ETag),如果你想将之前的 Etag 与当前的 URL 请求结果进行比较,你应该在 HTTP Header 中发送该信息,即键值对包含在 HTTP 标头字段中的应该具有这样的形式
If-None-Match: "686897696a7c876b7e"
从上面的观察来看,如果我得到这样的 Etag
Etag = "W/\"e1a6465809efe351293dd5bda041a795\""
我应该保存部分 e1a6465809efe351293dd5bda041a795
然后我在 swift 中使用两种代码来执行 URL 请求
第一种方法(包括引号)
// components[1]:String = "e1a6465809efe351293dd5bda041a795"
request.setValue("\"\(components[1])\"", forHTTPHeaderField: "If-None-Match")
第二种方法(不含引号)
// components[1]:String = "e1a6465809efe351293dd5bda041a795"
request.setValue("\(components[1])", forHTTPHeaderField: "If-None-Match")
即使 Etag 没有改变,它们也无法工作。
结果是这样的:
status code: 200, headers {
"Access-Control-Allow-Credentials" = true;
"Access-Control-Allow-Origin" = "*";
"Access-Control-Expose-Headers" = "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval";
"Cache-Control" = "public, max-age=60, s-maxage=60";
"Content-Encoding" = gzip;
"Content-Security-Policy" = "default-src 'none'";
"Content-Type" = "application/json; charset=utf-8";
Date = "Tue, 07 Jul 2015 00:46:53 GMT";
Etag = "W/\"e1a6465809efe351293dd5bda041a795\"";
我很困扰。
如果 Etag 保持不变,响应状态应该是 304,但是每次我请求我都会得到 200,即使结果没有变化。
我认为问题可能是由 swift 中的报价表示引起的,有人可以帮助我吗?
注意事项
问题出在我的 github repoGitPocket,希望有人可以直接在 repo 中帮助我!你可以通过 ctrl + F 找到问题 problem here
解答
在尝试了 Alamofire 之后,我能够修复它。我使用了以下请求
let URL = NSURL(string: "https://api.github.com/users/jindulys/received_events")!
let mutableURLRequest = NSMutableURLRequest(URL: URL)
mutableURLRequest.HTTPMethod = "GET"
//let parameters = ["foo": "bar"]
mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
mutableURLRequest.setValue("\"ae651e23bd54274b1c046e7b804feeb7\"", forHTTPHeaderField: "If-None-Match")
return Alamofire.request(mutableURLRequest)
我认为问题只存在于 iOS 9.0,我认为是 iOS 9.0 SDK 的问题。
更多推荐
所有评论(0)