Ruby的错误URI

Ric*_*wis 4 ruby uri ruby-on-rails facebook-graph-api

我正在对facebook api进行oauth调用,以获得access_token

def access_token
  token_uri = URI("https://graph.facebook.com/oauth/access_token?client_id=#{CLIENT_ID}&client_secret=#{CLIENT_SECRET}&grant_type=client_credentials")
  token_response = HTTParty.get(token_uri)
  Rails.logger.info(token_response)
  return token_response
end
Run Code Online (Sandbox Code Playgroud)

我得到一个响应并生成一个access_token,让我们说吧

access_token=123456789|abcdefghijk
Run Code Online (Sandbox Code Playgroud)

但是,当我然后尝试使用此令牌

def get_feed
  fb_access_token = access_token
 uri = URI("https://graph.facebook.com/#{VANDALS_ID}/posts/?#{fb_access_token}")
Run Code Online (Sandbox Code Playgroud)

结束

我收到一个错误

URI::InvalidURIError: bad URI(is not URI?)
Run Code Online (Sandbox Code Playgroud)

并且uri生成停在| 即使管道后面有更多字符来完成我的access_key

https://graph.facebook.com/id-here/posts/?access_token=123456789|
Run Code Online (Sandbox Code Playgroud)

如何获取URI中可用的完整访问令牌

任何帮助赞赏

谢谢

Bro*_*tse 7

您收到错误的原因|是在正确的URI中不允许使用符号,因此需要在解析之前对其进行转义.URI附带了一个方法来为您完成:

uri = URI(URI.escape "https://graph.facebook.com/#{VANDALS_ID}/posts/?#{fb_access_token}")
uri.to_s     #=> https://graph.facebook.com/id-here/posts/?access_token=123456789%7Cabcdefghijk
Run Code Online (Sandbox Code Playgroud)

当请求url时,服务器应该自动解码它,所以所有都应该按预期工作.