【发布时间】:2020-10-29 17:23:22
【问题描述】:
嘿,所以我对 Swift 比较陌生,我已经成功地从公共 API 获取数据,但还有另一个需要身份验证。我确实有一个帐户,并且我已经验证了凭据是否有效,但是我不清楚如何使用 Basic Auth 编写 POST 请求
我在基本身份验证的 Wiki 页面上看到它说要使用用户配置 URL 并像这样传递:https://Aladdin:OpenSesame@www.example.com/index.html em>,但仅此一项并不能解决此问题,因此我不确定还需要做什么来配置此请求。任何帮助将不胜感激!
struct Response: Codable {
var results: [Result]
}
struct Result: Codable {
var pool_system_type: String
}
struct WaterTestView: View {
@State private var results = [Result]()
var body: some View {
List(results, id: \.trackId) { result in
VStack(alignment: .leading) {
Text(result.pool_system_type)
}
}.onAppear(perform: loadData)
}
func loadData() {
guard let url = URL(string: "https://myemail@email.com:mypassword@biolabhydra.com/api/v3/water_tests") else {
print("Invalid URL")
return
}
let request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data {
if let decodedResponse = try? JSONDecoder().decode(Response.self, from: data) {
DispatchQueue.main.async {
results = decodedResponse.results
}
return
}
}
print("Fetch failed: \(error?.localizedDescription ?? "Unknown error")")
}.resume()
}
}
【问题讨论】:
-
您尝试使用的 API 可能未使用基本身份验证。许多 api 都有一个
signIn端点,您需要使用用户名和密码作为参数调用它,它将返回一个令牌。然后,您将令牌添加到请求的标头以从 API 获取数据。 API 文档应涵盖如何进行身份验证。 -
嘿!它确实使用基本身份验证。在入门页面 (biolabhydra.com/analysis/getting_started) 上显示“所有 Hydra 请求必须通过 https 进行;任何 http 请求都将被重定向到 https。API 请求通过 HTTP 基本身份验证(用户名/密码)进行身份验证。联系我们以接收凭据。”
-
该页面需要登录,所以我看不到它。它们可能不支持 URL 编码,您需要将授权放在标头中,这也显示在 wiki 文章中。
标签: swift post swiftui httprequest basic-authentication