在 SwiftUI 中发出 HTTP 请求时出现“不支持的 URL”错误

问题描述 投票:0回答:1

我在 SwiftUI 中编写了一个应用程序,我试图向外部服务器发出 HTTP 请求以获取 JSON 数据。我正在使用 URLSession 来执行此请求。但是,当我尝试发出请求时,我收到“不支持的 URL”错误。

我已经仔细检查了 URL 地址,它的格式似乎正确。有什么我忽略的事情或者我需要做些什么来修复这个错误?

我的代码看起来像这样:

struct GroupsResponse: Decodable {
        let results: [Groups]
    }

    struct Groups: Decodable {
        let Id: Int
        let Descriere: String
    }
    
    private func fetchGroupsFromAPI() async throws -> [Groups] {
        let url = URL(string: "http://orar.usarb.md/api/access/getGroups")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        
        let (data, _) = try await URLSession.shared.data(for: request)
        
        let decoded = try JSONDecoder().decode(GroupsResponse.self, from: data)
        print(decoded)
        return decoded.results
    }

 private func button(_ title: String, color: Color) -> some View {
        Button(action: {
            Task {
                do {
                    let movies = try await fetchGroupsFromAPI()

                    print(movies)
                } catch {
                    print(error)
                }
            }
        }) {
            Text(title)
                .frame(height: 40)
                .frame(maxWidth: .infinity)
                .background(color.opacity(0.5))
                .foregroundColor(.black)
        }
    }
}

我尝试提出请求,但出现此错误

错误域=NSURLErrorDomain代码=-1002“不支持的URL”UserInfo={NSLocalizedDescription=不支持的URL,NSErrorFailingURLStringKey=/api/access/getGroups,NSErrorFailingURLKey=/api/access/getGroups,_NSURLErrorRelatedURLSessionTaskErrorKey=( “本地数据任务<39D779DF-E734-4D65-8722-23F3843FB2D9>。<3>” ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <39D779DF-E734-4D65-8722-23F3843FB2D9>.<3>, NSUnderlyingError=0x600000c68390 {错误域=kCFErrorDomainCFNetwork 代码=-1002“(null)”}}

I modify info file

在文档中我有 POST 请求,但没有 GET

我尝试修改信息,我尝试重建项目并对代码结构进行一些更改

struct GroupsResponse: Decodable {
        let results: [Groups]
    }

    struct Groups: Decodable {
        let Id: Int
        let Descriere: String
    }
    
    func fetchGroupsFromAPI() async throws -> [Groups] {
        let url = URL(string: "http://orar.usarb.md/api/access/getGroups")!

        let (data, _) = try await URLSession.shared.data(from: url)

        let decoded = try JSONDecoder().decode(GroupsResponse.self, from: data)

        return decoded.results
    }
    
swift api rest
1个回答
0
投票

默认情况下,出于安全原因,Apple 不允许发出 HTTP 请求,除非您在 Info.plist 文件中启用

Allow Arbitrary Loads
。因此,您可以通过以下方式在 plist 文件中启用该密钥进行测试:

项目 -> 选择目标 -> 信息 -> 添加密钥

© www.soinside.com 2019 - 2024. All rights reserved.