首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS NSMutableURLRequest授权头

iOS NSMutableURLRequest授权头
EN

Stack Overflow用户
提问于 2015-07-31 19:51:20
回答 1查看 382关注 0票数 1

我在访问API调用时遇到了问题,我认为它与授权头有关。我正在使用AlamoFire并打印出令牌,因此我知道它是有效的。

代码语言:javascript
复制
var URLRequest: NSURLRequest {
    let URL = NSURL(string: Router.baseURLString + path)!
    let mutableURLRequest = NSMutableURLRequest(URL: URL)
    mutableURLRequest.HTTPMethod = method.rawValue

    println(Router.OAuthToken)
    if let token = Router.OAuthToken {
        mutableURLRequest.setValue("Token token=\(token)", forHTTPHeaderField: "Authorization")
    }

    println(mutableURLRequest)

    switch self {
    default:
        return mutableURLRequest
    }
}

这就是文档中所说的,它可以在终端中使用auth令牌:

代码语言:javascript
复制
curl -H "Authorization: Token token=<ACCESS_TOKEN>" http://10x.xx.xx.xxx/api/v1/users/feed

下面是我收到的错误:

代码语言:javascript
复制
Optional(Error Domain=com.alamofire.error Code=-1 "The operation couldn’t be completed. (com.alamofire.error error -1.)")

import Foundation
import Alamofire
import CoreData

enum Router: URLRequestConvertible {
    static let baseURLString = "http://104.131.81.230/api/v1"
    static var OAuthToken: String?

    case UserProfile
    case FacebookAuth(String)
    case Classes

    var method: Alamofire.Method {
        switch self {
        case .UserProfile:
            return .POST
        case .FacebookAuth:
            return .POST
        case .Classes:
            return .POST
        }
    }

    var path: String {
        switch self {
        case UserProfile:
            return "/users/me"
        case FacebookAuth(let fbAuthToken):
            return "/authentications/?access_token=\(fbAuthToken)"
        case Classes:
            return "/classes/"
        }
    }

    var URLRequest: NSURLRequest {
        let URL = NSURL(string: Router.baseURLString + path)!
        let mutableURLRequest = NSMutableURLRequest(URL: URL)
        mutableURLRequest.HTTPMethod = method.rawValue

        println(Router.OAuthToken)
        if let token = Router.OAuthToken {
            println("got token")

            mutableURLRequest.setValue("Token token=<\(token)>", forHTTPHeaderField: "Authorization")
        }

        println(mutableURLRequest)

        switch self {
        default:
            return mutableURLRequest
        }
    }
}

Alamofire.request(Router.Classes).validate(statusCode: 200 ..< 300).responseJSON(completionHandler: { (request, response, JSON, error) in
        println(JSON)
        println(error)
        if let _json = JSON as? [Dictionary<String, AnyObject>] {
            println(_json)
            for json in _json {

            }
        }
    })

这是使用debugPrintln()输出的Alamofire请求,我得到了一个404错误。

代码语言:javascript
复制
    $ curl -i \
        -X POST \
        -H "Authorization: Token token=f804414300d84a929b7cec4148fcfd7f" \
        -H "Accept-Language: en;q=1.0,fr;q=0.9,de;q=0.8,zh-Hans;q=0.7,zh-Hant;q=0.6,ja;q=0.5" \
        -H "Accept-Encoding: gzip;q=1.0,compress;q=0.5" \
        -H "User-Agent: xxx/com.xxx.xxxx (1; OS Version 8.4 (Build 12H141))" \
"http://10X.XXX.XX.XX/api/v1/classes/"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-02 01:47:01

您正在获得错误,因为您很可能从服务器获得401响应,这将导致状态代码验证失败。我建议打印出您正在收到的response。这很可能会用401状态代码显示身份验证问题。

在这里,您可以使用Alamofire中的debugPrintln(request)功能来调试正在生成的cURL命令。我猜授权头并不是按照您预期的方式组装的。您应该尝试以下几种方法:

代码语言:javascript
复制
let request = Alamofire.request(Router.Classes)
    .responseJSON { request, response, json, error in
        println(request)
        println(response)
        println(json)
        println(error)
    }

debugPrintln(request)

这将帮助您调试最有可能得到401响应的原因。如果你能试一试并回复我,我会相应地更新我的答案。

祝你好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31754118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档