{"cod":401, "message": "使用 Moya 时出现 Open Weather API 错误,API 密钥无效

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

因此我使用 moya 创建了一个对 openweatherAPI 的 API 请求。现在 Postman 的返回似乎没问题,但 X 代码上的 API 调用返回 401: Invalid API key

我已经尝试了很多方法来看看到底哪里出了问题。但我似乎没有找到答案。

import Foundation
import Moya
import UIKit

enum WeatherAPI {

    case showCurrentWeather(cityName: String)
    case showForcasedWeather(cityName: String)
}

extension WeatherAPI: TargetType {

    var task: Task {
        switch self {
        case .showCurrentWeather(cityName: let cityName):
            let params = ["q":cityName , "APPID": Constants.WEATHER_API_KEY]
            return .requestParameters(parameters: params, encoding: JSONEncoding.default)
        case .showForcasedWeather(cityName: let cityName):
             let params = ["q":cityName , "APPID": Constants.WEATHER_API_KEY]
            return .requestParameters(parameters: params, encoding: JSONEncoding.default)
        }
    }

    var baseURL: URL {
        return URL(string: "https://api.openweathermap.org/data/2.5")!
    }

    var path: String {
        switch self {
        case .showCurrentWeather:
            return "/weather"
        case .showForcasedWeather:
            return "/forecast"
        }
    }

    var method: Moya.Method {
        switch self {
        case .showCurrentWeather:
            return .get
        case .showForcasedWeather:
            return .get
        }}

    var sampleData: Data {
        return Data()
    }

    var headers: [String : String]? {
        switch self {
        case .showCurrentWeather:
            return ["Content-type":"application/json"]
        case .showForcasedWeather:
            return ["Content-type":"application/json"]
        }
    }
}

https://api.openweathermap.org/data/2.5/weather?q=london&APPID=dbd3b02d8958d62185d02e944cd5f522

在 Postman 和浏览器上运行良好。

X 代码返回

"cod":401, "message": "API 密钥无效。请参阅 http://openweathermap.org/faq#error401 了解更多信息。"}

ios swift api moya
2个回答
1
投票

您应该在任务变量中将JSONEncoding.default更改为URLEncoding.default


0
投票

不知道这个对你是否有效,你可以尝试一下。 将“appId”更改为“key” 喜欢: 取(

//api.openweathermap.org/data/2.5/weather?lat=44.34&lon=10.99&key=${api_key}
)

这样对我有用!

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