当前位置: 首页 > 知识库问答 >
问题:

如何用Alamofire检测304状态码

颛孙喜
2023-03-14

有没有一种方法来检测304未修改响应与Alamofire 4?我发现Alamofireresponse.statusCode总是200,即使服务器响应304。

网络呼叫设置:

Alamofire 
    .request("http://domain.com/api/path", method: .get)
    .validate(statusCode: 200..<300)
    .validate(contentType: ["application/json"])
    .responseJSON { response in 
        print(response.response?.statusCode)
}

Alamofire响应报头

<NSHTTPURLResponse: 0x61800003e1c0> { URL: http://domain.com/api/path } { status code: 200, headers {
    "Access-Control-Allow-Headers" = "content-type, authorization";
    "Access-Control-Allow-Methods" = "GET, PUT, POST, DELETE, HEAD, OPTIONS";
    "Access-Control-Allow-Origin" = "*";
    "Cache-Control" = "private, must-revalidate";
    Connection = "keep-alive";
    "Content-Type" = "application/json";
    Date = "Mon, 23 Jan 2017 23:35:00 GMT";
    Etag = "\"f641...cbb6\"";
    "Proxy-Connection" = "Keep-alive";
    Server = "nginx/1.10.1";
    "Transfer-Encoding" = Identity;
} }

服务器响应

HTTP/1.1 304 Not Modified
Server: nginx/1.10.1
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: content-type, authorization
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS
Cache-Control: private, must-revalidate
ETag: "f641...cbb6"
Date: Mon, 23 Jan 2017 23:35:00 GMT

共有2个答案

孟和怡
2023-03-14

您可以对Alamofire使用手动响应验证,如下所述。

Alamofire.request("https://httpbin.org/get")
    .validate(statusCode: 200..<300)
    .validate(contentType: ["application/json"])
    .responseData { response in
        switch response.result {
        case .success:
            print("Validation Successful")
        case .failure(let error):
            print(error)
        }
    }
凌照
2023-03-14

由于NSURLSessions的默认行为是通过始终返回200个响应(但不是实际重新加载数据)从缓存的304个响应中提取,因此我首先必须更改cachingPolicy,如下所示:

urlRequest.cachePolicy = .reloadIgnoringCacheData

然后,我调整了valester函数的状态代码以接受3xx响应,并相应地处理了代码:

Alamofire.request("https://httpbin.org/get")
        .validate(statusCode: 200..<400)
        .responseData { response in
            switch response.response?.statusCode {
                case 304?:
                    print("304 Not Modified")
                default:
                    switch response.result {
                    case .success:
                        print("200 Success")
                    case .failure:
                        print ("Error")
                    }
                }
            }
 类似资料:
  • 本文向大家介绍HTTP 状态码 304 的含义?什么时候用304?相关面试题,主要包含被问及HTTP 状态码 304 的含义?什么时候用304?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 304:如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。    

  • 我使用的服务器在HTTP状态消息中返回错误消息。例如,它将返回“400个用户已经存在”,而不是“400个错误请求”。 我想访问Alamofire调用的响应方法中的字符串“用户已经存在”。但是,我找不到任何方法来访问这个字符串。 我已经在StackOverflow上发现了这个问题:Swift Alamofire:如何获取HTTP响应状态代码 不幸的是,没有人回答这个问题。:( 以下是Chrome显示

  • 问题内容: 如何检查jQuery.ajax()请求标头状态是否为“ 304未修改”? 通常返回,即使请求的标头是“ 304 Not Modified”。 并没有太大帮助,因为它中断了XHR数据请求。 问题答案: 如果不手动处理高速缓存头,则不可能。通常,XHR API无法提供304个响应: 对于由于用户代理生成的条件请求 而 产生的304未修改响应, 用户代理必须像服务器给出200 OK响应并提供

  • 我希望检索HTTP响应状态代码(例如,400、401、403、503等),以防请求失败(理想情况下也是成功)。在这段代码中,我使用HTTP Basic执行用户身份验证,并希望能够在用户错误键入密码时向用户发送身份验证失败的消息。 不幸的是,产生的错误似乎并不表示实际收到了HTTP状态代码409: 此外,在发生错误时检索HTTP正文会很好,因为我的服务器端将在那里放置错误的文本描述。 问题 是否可以

  • 本文向大家介绍HTTP 状态码 304和 200 的区别?相关面试题,主要包含被问及HTTP 状态码 304和 200 的区别?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 状态码200:请求已成功,请求所希望的响应头或数据体将随此响应返回。即返回的数据为全量的数据,如果文件不通过GZIP压缩的话,文件是多大,则要有多大传输量。 状态码304:如果客户端发送了一个带条件的 GET 请求且

  • 问题内容: 当用鼠标单击时,如何检测JRadioButton从“未选中”更改为“选中”?我曾尝试在按钮上使用ActionListener,但是每次单击单选按钮时都会触发该事件,而不仅仅是在将状态更改为“选定”时触发。 我曾想过要维护一个记住按钮状态的布尔变量,并在ActionListener中对其进行测试以查看是否更改其状态,但是我想知道是否有更好或更干净的解决方案。 问题答案: 看一下JRadi