我试图按照Last.fm的教程在iOS应用程序中使用他们的API(使用Swift),但我不知道我的代码出了什么问题。他们要求做一些叫做Last.fm方法签名的东西,我不知道如何将其插入到我的程序中。下面是我尝试遵循的教程的链接:https://www.last.fm/api/mobileauth
以下是我的当前代码:
import UIKit
struct LoginRequestBody: Codable {
var username: String
var password: String
var api_key: String
var api_sig: String
}
enum AuthenticationError: Error {
case invalidCredentials
case custom(errorMessage: String)
}
class APIService {
func requestAPI(username: String, password: String, api_key: String, api_sig: String) {
guard let url = URL(string: "http://www.last.fm/api/auth/?api_key=xxx") else {
return
}
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "POST"
let body = LoginRequestBody(username: username, password: password, api_key: api_key, api_sig: api_sig)
let bodyStr = [
"username": "\(body.username)",
"password": "\(body.password)",
"api_key": "\(body.api_key)",
"api_sig": "\(body.api_sig)"]
urlRequest.httpBody = try? JSONSerialization.data(withJSONObject: bodyStr, options: .fragmentsAllowed)
let task = URLSession.shared.dataTask(with: urlRequest) { data, _, error in
guard let data = data, error == nil else {
return
}
do {
let response = try JSONSerialization.jsonObject(with: data, options: .fragmentsAllowed)
print(response)
} catch {
print(error)
}
}
task.resume()
}
}
1条答案
按热度按时间0sgqnhkj1#
您在评论中提到的错误是因为您尝试使用
http
而不是https
连接到端点,而Apples App Transport Security机制阻止您这样做。你有两个选择(可能更多:))
1.查看www.example.com是否Last.fm支持
https
,如果支持,则使用它1.允许您的应用改用
http
。您可以通过将其添加到您的info.plist
来实现此目的但在此之前,请参阅this great answer,其中描述了在使用
http
而不是https
时所承担的所有风险