【问题标题】:Swift twitter search API could not authenticate you response, errorSwift twitter 搜索 API 无法验证您的响应,错误
【发布时间】:2019-05-18 19:12:51
【问题描述】:

当我第一次调用 api 时,我得到了预期的响应。但是,一旦我更改了参数值,响应就会显示为“消息”:“无法验证您:

var params = ["q":"fashion"]

var header = ["authorization":"OAuth 
oauth_consumer_key=\"consumer_key\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"1545130242\",oauth_nonce=\"nonce\",oauth_version=\"1.0\",oauth_signature=\"signature\""]

Alamofire.request(url, method: .get, parameters: params,headers: headers).responseJSON { (response) in
        if (response.result.isSuccess){
            print("Success! got the weather data")
            let twitterJSON: JSON = JSON(response.result.value!)
            // self.updateWeatherData(json: weatherJSON)
            print("\(twitterJSON)")
            self.updateTwittes(json: twitterJSON)
        }else{
            print("Error \(String(describing: response.result.error)) ")
        }
    }

【问题讨论】:

  • headers: headers(实际变量名是header)。您是否还有另一个名为 headers 的变量或属性?
  • 通过使用邮递员,每当我更改参数值时,一切都会很好,我会根据查询值获得 JSON 响应。我认为授权值正在通过 Alamofire 大写等方式发生变化。
  • 你是怎么改的?
  • "header" 变量被传递给另一个包含 Alamofire 函数的函数,它看起来像这样: func getTwitterData(url: String,headers: [String:String] ,Params: [String: String]) @Scriptable
  • 我知道发生了什么!,每当我更改参数值时,oauth_signature 值应该根据该值更改,例如 var params = ["q":"fashion"] Postman api 框架生成的某个 oauth_signature 值可以生成不同于 var params = ["q":"tree"]。但是,我正在寻找为特定参数值自动生成的 oauth_signature。在前面的示例中,我第一次从 Postman 复制了标头值,它为某个查询提供了正确的 oauth_signature

标签: ios swift api twitter alamofire


【解决方案1】:

TwitterAPI 请求应该使用 BrearerToken 调用,可以通过 curl 命令获取:

        let params = ["query":"\(searchText) lang:en","maxResults":"10"]
        let headers = ["authorization":"bearer <BrearerToken>","content-type":"application/json"]
        getTwitterData(url: url,headers: headers ,Params: params)

func getTwitterData(url: String,headers: [String:String] ,Params: [String: String]){


    Alamofire.request(url, method: .post, parameters: Params,encoding:JSONEncoding.default,headers: headers).responseJSON { (response) in
        if (response.result.isSuccess){
            print("Success! got the twitter data")
            let twitterJSON: JSON = JSON(response.result.value!)

            print("\(twitterJSON)")
            self.updateTwittes(json: twitterJSON)
        }else{
            print("Error \(String(describing: response.result.error)) ")
        }
    }
}

【讨论】:

    猜你喜欢
    • 2016-07-26
    • 2023-04-02
    • 2016-10-15
    • 2019-03-13
    • 2013-11-28
    • 2015-03-22
    • 2019-05-06
    • 2013-06-28
    • 2013-12-17
    相关资源
    最近更新 更多