Alamofire Accept и Content-Type JSON

Я пытаюсь сделать запрос GET с Alamofire в Swift. Мне нужно установить следующие заголовки:

Content-Type: application/json
Accept: application/json

Я мог бы взломать его и сделать это напрямую, указав заголовки для запроса, но я хочу сделать это с помощью ParameterEncoding предлагается в библиотеке. Пока у меня есть это:

Alamofire.request(.GET, url, encoding: .JSON)
    .validate()
    .responseJSON { (req, res, json, error) in
        if (error != nil) {
            NSLog("Error: \(error)")
            println(req)
            println(res)
        } else {
            NSLog("Success: \(url)")
            var json = JSON(json!)
        }
}

Content-Type установлено, но не Accept. Как я могу сделать это правильно?

10 голосов | спросил jlhonora 6 FebruaryEurope/MoscowbFri, 06 Feb 2015 23:44:47 +0300000000pmFri, 06 Feb 2015 23:44:47 +030015 2015, 23:44:47

5 ответов


0

В итоге я использовал URLRequestConvertible https://github.com/Alamofire/Alamofire#urlrequestconvertible

enum Router: URLRequestConvertible {
    static let baseUrlString = "someUrl"

    case Get(url: String)

    var URLRequest: NSMutableURLRequest {
        let path: String = {
            switch self {
            case .Get(let url):
                return "/\(url)"
            }
        }()

        let URL = NSURL(string: Router.baseUrlString)!
        let URLRequest = NSMutableURLRequest(URL:
                           URL.URLByAppendingPathComponent(path))

        // set header fields
        URLRequest.setValue("application/json",
                            forHTTPHeaderField: "Content-Type")
        URLRequest.setValue("application/json",
                            forHTTPHeaderField: "Accept")

        return URLRequest.0
    }
}

А потом просто:

Alamofire.request(Router.Get(url: ""))
    .validate()
    .responseJSON { (req, res, json, error) in
        if (error != nil) {
            NSLog("Error: \(error)")
            println(req)
            println(res)
        } else {
            NSLog("Success")
            var json = JSON(json!)
            NSLog("\(json)")
        }
}

Еще один способ сделать это - указать его для всей сессии, проверьте @ комментарий Дэвида выше:

Alamofire.Manager.sharedInstance.session.configuration
         .HTTPAdditionalHeaders?.updateValue("application/json",
                                             forKey: "Accept")
ответил jlhonora 7 FebruaryEurope/MoscowbSat, 07 Feb 2015 00:26:39 +0300000000amSat, 07 Feb 2015 00:26:39 +030015 2015, 00:26:39
0

Пример непосредственно со страницы Glamub Alamofire:

Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
         .validate(statusCode: 200..<300)
         .validate(contentType: ["application/json"])
         .response { (_, _, _, error) in
                  println(error)
         }

В вашем случае добавьте, что вы хотите:

Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
         .validate(statusCode: 200..<300)
         .validate(contentType: ["application/json"])
         .validate(Accept: ["application/json"])
         .response { (_, _, _, error) in
                  println(error)
         }
ответил hasan 6 FebruaryEurope/MoscowbFri, 06 Feb 2015 23:47:49 +0300000000pmFri, 06 Feb 2015 23:47:49 +030015 2015, 23:47:49
0

Попробуйте это:

URLRequest.setValue("application/json",
                    forHTTPHeaderField: "Content-Type")
URLRequest.setValue("application/json",
                    forHTTPHeaderField: "Accept")
ответил Jaydip 21 J000000Friday17 2017, 13:06:24
0
Alamofire.request(url, method: .post, parameters:parameters, encoding: JSONEncoding.default).responseJSON { response in
     ...      
}

это работа

ответил YI-KUN Chiang 3 AMpTue, 03 Apr 2018 11:37:54 +030037Tuesday 2018, 11:37:54
0

Простой способ использования метода get с картой запросов и типом ответа json

var parameters: [String:Any] = [
            "id": "3"  
        ]
var headers: HTTPHeaders = [
            "Content-Type":"application/json",
            "Accept": "application/json"
        ]
Alamofire.request(url, method: .get,
 parameters: parameters,
encoding: URLEncoding.queryString,headers:headers)
.validate(statusCode: 200..<300)
            .responseData { response in     
                switch response.result {
                case .success(let value):  
                case .failure(let error):    
                }
ответил Sachin Agrawal 11 Jam1000000amThu, 11 Jan 2018 10:03:14 +030018 2018, 10:03:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132