【问题标题】:Swfit 4 JSON adding custom headerSwift 4 JSON 添加自定义标头
【发布时间】:2018-03-26 10:59:12
【问题描述】:

如何在服务器上发送 GET 请求时添加自定义标头。 我试过了

var request = URLRequest(url: URL(string: URL)!)
    request.httpMethod = "GET"
    //        request.addValue("2", forHTTPHeaderField: "x-api-version")
    request.addValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
    request.addValue("application/json", forHTTPHeaderField: "Accept")

P.S 我是初学者,如有错误请指出并帮助我改进。提前谢谢你。

【问题讨论】:

  • 您以正确的方式添加它,除了添加授权头字段。苹果说你不应该那样做。你有什么问题?
  • 我无法获取我的数据,它曾经抛出 401 Unauthenticated 错误

标签: json swift request swift4


【解决方案1】:

如果您的目的是使用令牌对 API 进行身份验证,则您为 Authorization 标头设置了错误的格式。令牌授权也称为“不记名授权”,格式如下:

let url = URL(string: "https://httpbin.org/get")!
let token = "abcdef"

var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")

URLSession.shared.dataTask(with: request) { data, response, error in
    guard error == nil else { print(error!); return }
    guard let data = data else { print("No data"); return }

    if let str = String(data: data, encoding: .utf8) {
        print(str)
    }
}.resume()

您不需要 Content-Type 标头,因为 GET 请求没有正文内容。

【讨论】:

  • 我刚刚用你的代码 sn-p 再次尝试,仍然得到验证错误。
  • 您使用的是什么 API?文档通常会告诉您如何使用它进行身份验证
【解决方案2】:

试试下面的代码:

func setHeader() -> [String : String] {
    let dictionary = [
        "Accept":"application/json",
        "Content-Type":"application/json",
        "Authorization": "your_authtoken"
        // more headers here
    ]
    return dictionary
}

// calling
request(endPoint, method: .post, parameters: params, encoding:JSONEncoding.default, headers: setHeader())

【讨论】:

  • 感谢您的快速帮助,是否需要 Content-Type?
  • 你在用 alamofire 吗?
  • 实际上我提供了与Alamofire 兼容的ans,为此您只需要安装pod ‘Alamofire’ 并导入您想要使用的库并使用我的ans ..
  • 我在不使用任何库的情况下寻找答案。不管怎样,谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
相关资源
最近更新 更多