【发布时间】:2018-01-08 10:45:31
【问题描述】:
我请求的 JSON 页面需要字符串类型的密码和用户名。用户名和密码属于开发人员......顺便说一句,它能够访问页面,我只是无法通过身份验证。
这是 api 网址:https://api.intrinio.com/prices?identifier=AAPL
如果我遗漏了一些信息或代码,请告诉我,我会提供。
class ViewController: UIViewController, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource {
//MARK: - Outlets
@IBOutlet weak var labelTwo: UILabel!
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var tickerTextField: UITextField!
//MARK: - Properties
let userPasswordString = ""
let userPassword = ""
//MARK: - View Did Load
override func viewDidLoad() {
tickerTextField.textColor = UIColor.lightGray
tickerTextField.text = "Search Ticker"
tickerTextField.delegate = self
let jsonUrlString = "https://api.intrinio.com/prices?identifier=\(ticker)"
print(jsonUrlString)
guard let url = URL(string: jsonUrlString) else { return }
URLSession.shared.dataTask(with: url) { (data, response, err) in
let dataAsString = String(data: data!, encoding: .utf8)
print(dataAsString!)
guard let data = data else { return }
do {
let jsonDecoder = JSONDecoder()
let tickerPrice = try jsonDecoder.decode(TickerPrice.self, from: data)
DispatchQueue.main.async {
print(tickerPrice.name)
}
} catch let jsonErr {
print("Error serielaising jason", jsonErr)
}
}.resume()
}
【问题讨论】:
-
docs.intrinio.com/#authentication 您需要添加带有登录名/密码的标题。
-
如果我理解正确(考虑逻辑,而不是“未包装的 Swift 错误编码等):
var request = URLRequest.init(url: url!); let userName = "API_USERNAME"; let password = "API_PASSWORD"; let toEncode = "\(userName):\(password)"; let encoded = toEncode.data(using: .utf8)?.base64EncodedString(); request.addValue("Basic \(encoded!)", forHTTPHeaderField: "Authorization")。然后URLSession.shared.dataTask(with: request){}而不是(with: url)。
标签: ios json swift basic-authentication