Ruby on Rails调用API报Authorization has been denied授权被拒绝问题
解决方案
核心错误原因
你的授权错误完全由URL拼接不规范导致,共存在3处语法问题:
- URL参数分隔符使用错误:HTTP协议规定URL中首个查询参数前用
?,后续所有参数需用&拼接。你的代码中millesime=2020后错误使用?拼接token参数,会导致服务端无法正常识别token参数,直接判定授权失败。 - 字符串未启用插值逻辑:你用单引号包裹URL,Ruby中单引号字符串不会解析内部的变量、占位符表达式,导致路径里的
siren占位符、KEY变量都不会被替换为实际值。 - 占位符格式错误:Ruby字符串插值的语法为
#{变量名},你使用的(siren)不符合语法规范,无法被识别为动态参数。
修复后的代码
写法1:直接修正URL拼接逻辑
def find_with(siren) # 改用双引号,修正参数分隔符和插值语法,把KEY替换为你实际的有效API密钥 @request = HTTParty.get("https://api.datainfogreffe.fr/api/v1/Entreprise/notapme/performance/#{siren}?millesime=2020&token=KEY") @result = JSON.parse(@request.body) end
写法2:用HTTParty内置参数传递(更规范,避免手动拼URL出错)
def find_with(siren) @request = HTTParty.get( "https://api.datainfogreffe.fr/api/v1/Entreprise/notapme/performance/#{siren}", query: { millesime: 2020, token: "你的实际API密钥" } ) @result = JSON.parse(@request.body) end
验证方法
如果修改后仍有问题,可以在请求后加一行代码打印实际请求地址,和你命令行调用成功的地址做对比即可快速定位差异:
puts @request.request.uri.to_s
内容的提问来源于stack exchange,提问作者GGoirand
相关产品推荐
相关产品推荐

