为什么Alamofire中Http Headers中的“Authorization”字段会自动设置?

时间:2017-12-17 14:05:23

标签: ios web-services alamofire swift4

我想将Alamofire中的apiKey标题发送到我的网络服务。但无论我测试多少次,我仍然无法在我的网络服务中获得apiKey的价值。

我的网络服务始终会返回此错误,导致无法获得标题中的apiKey

{
  "error": true,
  "message": "Api key is missing"
}

这就是我提出请求的方式,我认为我没有做错任何事,但是网络服务仍然无法获得apiKey的价值。

    let My_URL = "My_url"
    let params : [String : Any]=["param1":value1,"param2":value2]
    let headers : HTTPHeaders = [
        "Content-Type":"application/x-www-form-urlencoded",
        "authorization" : apiKey //<--this is the value I need to 
                                      get in header of web service
    ]

    Alamofire.request(MY_URL,method: .post ,parameters : params ,headers:headers).responseJSON {
        response in
        debugPrint(response)
    }

我的网络服务目前正在为Android和网络版提供服务。运行良好,但我真的不知道为什么标题中的ApiKey无法从网络服务中获取。

完全不知道出了什么问题。有人请帮忙!!!!

修改

我在这里附上debugPrint的结果,请看一下,让我知道问题是什么,我怀疑问题是由下面结果中的“授权”标记引起的,“授权”字段不是我设置的字段,而且值也不是我想要的值。

但为什么会这样呢?以及如何解决这个问题?

[Response]: <NSHTTPURLResponse: 0x60c00003d4c0> { URL: http://My_URL} { Status Code: 400, Headers {
    "Access-Control-Allow-Headers" =     (
        Authorization
    );
    "Access-Control-Allow-Methods" =     (
        "GET, POST, PUT, DELETE, OPTIONS"
    );
    "Access-Control-Allow-Origin" =     (
        "*"
    );
    Authorization =     ( // <--why this authorization appear
        16ebe49c51039ddfbb09e5df8519e755  //this is not the value I set
    );
    Connection =     (
        close
    );
    "Content-Length" =     (
        45
    );
    "Content-Type" =     (
        "application/json"
    );
    Date =     (
        "Sun, 14 Dec 2017 14:20:59 GMT"
    );
    Server =     (
        "Apach(Ubuntu)"
    );
    "X-Powered-By" =     (
        "PHP/5.5.9-1"
    );
} }

修改 为解决上述问题,我阅读了以下问题

iOS Alamofire Incorrect Authorization Header

How to disable the URLCache completely with Alamofire

因此,我修改了我的请求,但问题仍然相同,debugPrint的结果仍与上述相同。

let configuration = URLSessionConfiguration.default
configuration.urlCache = nil
let sessionManager = Alamofire.SessionManager(configuration: configuration)

let params : [String : Any]=["param1":value1,"param2":value2]
let headers : HTTPHeaders = [
    "Content-Type":"application/x-www-form-urlencoded",
    "authorization" : apiKey //<--this is the value I need to 
                                          get in header of web service
]

sessionManager.request(MY_URL,method: .post ,parameters : params ,headers:headers).responseJSON {
            response in
            debugPrint(response)
        }.session.finishTasksAndInvalidate()

1 个答案:

答案 0 :(得分:0)

我知道这个问题是很久以前问过的,但是我想回答其他人的问题。

删除Authorization标头值不是alamofire lib造成的错误。该密钥和某些其他密钥是NSURLSession保留密钥,因此根据apple document这些密钥的值可能会更改。为避免此问题,您必须将标头名称更改为Authorization-App或API小组确认的任何其他键。