如何从 Swift 3 上的响应字符串中检索标题字段?

Posted

技术标签:

【中文标题】如何从 Swift 3 上的响应字符串中检索标题字段?【英文标题】:How to retrieve header fields from a response string on Swift 3? 【发布时间】:2017-06-13 05:43:51 【问题描述】:

我正在使用 Swift 3 和 Alamofire 进行服务器调用。这是我的代码

let headers: HTTPHeaders = [
        "Accept": "application/json",
        "Content-Type": "application/json"
    ]

    Alamofire.request(
        url,
        method: .post,
        parameters: parameters,
        headers: headers)
        .responseString response in
            switch response.result 
            case .success(let value):
                print("response headerfields ", response.response?.allHeaderFields ?? "no headerfields")
                //completionHandler(value as? NSDictionary, nil)
            case .failure(let error):
                print("signin_post error: ", error)
                completionHandler(nil, error)
            
    

如何从上述响应中正确获取标题字段?我的响应结果得到了成功,但就是这样。我有一个用 Objective-c 编写的代码,它工作正常。

[manager POST:url parameters:parameters progress:nil success:^(NSURLSessionTask *task, id responseObject) 
        NSLog(@"signInWithUserName Success JSON: %@", responseObject);

        if ([task.response isKindOfClass:[NSHTTPURLResponse class]]) 
            NSHTTPURLResponse *r = (NSHTTPURLResponse *)task.response;
            NSString *responsString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

            if(responsString != nil)
                NSString *authToken = [[r allHeaderFields] valueForKey:XAUTHTOKEN];
                NSLog(@"X-AUTH-TOKEN %@ ", authToken);

            //....

如果有人能指导我如何使用 Swift 3 做到这一点,我将不胜感激。

【问题讨论】:

你能打印response.response 吗?你得到了什么? 【参考方案1】:

您可以使用response.request.allHTTPHeaderFields 从 alamofire 响应对象中获取标头。 试试这个,

Alamofire.request(
        url,
        method: .post,
        parameters: parameters,
        headers: headers)
        .responseString response in
            switch response.result 
            case .success(let value):
                print("response headerfields \(response.request?.allHTTPHeaderFields)")
                //completionHandler(value as? NSDictionary, nil)
            case .failure(let error):
                print("signin_post error: ", error)
                completionHandler(nil, error)
            
    

【讨论】:

以上是关于如何从 Swift 3 上的响应字符串中检索标题字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Swift 类中检索目标 C 类中的 Userdefault?

如何保存响应 JSON 数组并在 swift 中使用用户默认值进行检索

如何从 Cloud Firestore 上的对象中检索值?迅速

使用swift 3如何从firebase中检索另一个数据中的数据[关闭]

如何在swift中将json数组保存和检索到用户默认值?

如何通过 android 中的改造从 php 中检索“字符串响应”?