Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift中的基本身份验证请求_Swift_Post_Swiftui_Httprequest_Basic Authentication - Fatal编程技术网

Swift中的基本身份验证请求

Swift中的基本身份验证请求,swift,post,swiftui,httprequest,basic-authentication,Swift,Post,Swiftui,Httprequest,Basic Authentication,嘿,我对Swift比较陌生,我已经成功地从一个公共API获取了数据,但还有一个需要身份验证。我确实有一个帐户,并且我已经验证了凭据是否有效,但是我不清楚如何使用Basic Auth编写POST请求 我在Wiki页面上看到了Basic Auth,上面说要用用户配置URL并按如下方式传递:https://Aladdin:OpenSesame@www.example.com/index.html,但这并不能解决问题,因此我不确定配置此请求还需要做什么。任何帮助都将不胜感激 struct Respons

嘿,我对Swift比较陌生,我已经成功地从一个公共API获取了数据,但还有一个需要身份验证。我确实有一个帐户,并且我已经验证了凭据是否有效,但是我不清楚如何使用Basic Auth编写POST请求

我在Wiki页面上看到了Basic Auth,上面说要用用户配置URL并按如下方式传递:https://Aladdin:OpenSesame@www.example.com/index.html,但这并不能解决问题,因此我不确定配置此请求还需要做什么。任何帮助都将不胜感激

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()
    }
}

对于基本身份验证,将身份验证数据放在HTTP头字段中

extension URLRequest {
    mutating func setBasicAuth(username: String, password: String) {
        let encodedAuthInfo = String(format: "%@:%@", username, password)
            .data(using: String.Encoding.utf8)!
            .base64EncodedString()
        addValue("Basic \(encodedAuthInfo)", forHTTPHeaderField: "Authorization")
    }
}

var request = URLRequest(url: URL(string: "https://www.awesome.com/")!)
request.setBasicAuth(username: "awesomeUser", password: "awesomePass")
request.httpMethod = "POST"

对于基本身份验证,将身份验证数据放在HTTP头字段中

extension URLRequest {
    mutating func setBasicAuth(username: String, password: String) {
        let encodedAuthInfo = String(format: "%@:%@", username, password)
            .data(using: String.Encoding.utf8)!
            .base64EncodedString()
        addValue("Basic \(encodedAuthInfo)", forHTTPHeaderField: "Authorization")
    }
}

var request = URLRequest(url: URL(string: "https://www.awesome.com/")!)
request.setBasicAuth(username: "awesomeUser", password: "awesomePass")
request.httpMethod = "POST"

您尝试使用的API可能不使用基本身份验证。许多API都有一个登录端点,您需要使用用户名和密码作为参数进行调用,它将返回一个令牌。然后将令牌添加到请求的头中,以从API获取数据。API文档应该包括如何进行身份验证。嘿!它确实使用基本身份验证。在入门页面上,它说所有Hydra请求都必须通过https进行;任何http请求都将重定向到https。API请求通过HTTP基本身份验证用户名/密码进行身份验证。请与我们联系以接收凭据。该页面需要登录,因此我无法查看。可能他们不支持URL编码,您需要将授权放在标题中,这也在wiki文章中显示。可能您尝试使用的API不使用基本授权。许多API都有一个登录端点,您需要使用用户名和密码作为参数进行调用,它将返回一个令牌。然后将令牌添加到请求的头中,以从API获取数据。API文档应该包括如何进行身份验证。嘿!它确实使用基本身份验证。在入门页面上,它说所有Hydra请求都必须通过https进行;任何http请求都将重定向到https。API请求通过HTTP基本身份验证用户名/密码进行身份验证。请与我们联系以接收凭据。该页面需要登录,因此我无法查看。它们可能不支持URL编码,您需要将授权放在标题中,这也在wiki文章中显示。