swift - 如何将引号(“)包含到 Swift 中 HTTP Head 字段使用的字符串中

标签 swift http github

最近我使用GitHub API 请求一些资源,我发现Etag 可以帮助我,因为它可以避免重复的URL 请求。但是,我在包含 ETag 的 HTTP 请求中遇到了问题。

根据 ETag( https://en.wikipedia.org/wiki/HTTP_ETag ),如果你想比较之前的 Etag 和当前的 URL 请求结果,你应该在 HTTP Header 中发送该信息,包含在 HTTP Header Field 中的键值对应该有这样的形式这个

 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 repo GitPocket ,希望有人可以直接在 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的问题。

关于swift - 如何将引号(“)包含到 Swift 中 HTTP Head 字段使用的字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31258243/

相关文章:

Swift - 调用中的额外参数 'count'?

node.js - URL 中的尾部斜线是什么?

github - 如何在没有合并提交或使用 CLI 的情况下使 GitHub fork 保持最新?

git - 为现有的 pull 请求做出贡献

ios - 考虑场景工具包 iOS 中的欧拉值,围绕 y 轴旋转节点

ios - 计算 GMSPolygon 面积

class - Swift 中的静态函数和类函数有什么区别?

java - HttpURLConnection 在 Java 中工作但在 Android 中不工作

algorithm - 为 FTP 和 HTTP 传输选择缓冲区大小

python - 当我未超出速率限制时收到 Github APi 403 错误