如何在Rails中获得302重定向位置? (尝试过HTTPARTY,NET/HTTP和REDIRECTFOLLOWER)

StackOverflow https://stackoverflow.com/questions/4379700

你好
我正在尝试获取Facebook用户的专辑的封面图片。
正如API页面所说的那样,它返回“ A http 302,带有专辑封面图片的URL”时:
http s://graph.facebook.com/ [peram_id]}/picture?access_token = blahblahblah ...
文档此处: http://developers.facebook.com/docs/reference/api/album

我尝试了httparty,net:http和redirectFollower类
httparty返回图像本身,没有“位置”(URL)信息
NET:HTTP和RedirectFollower有点棘手...
如果我在将URL传递到GET方法中时不使用Uri.Encode,则会导致“不良URI”错误
但是,如果我使用uri.Encode通过编码的URI,则会导致Eoferror(到达文件结束)
令人惊讶的是,我可以在使用Apigee的FB API时看到位置URL

这是网络上建议的重定向方法:HTTP文档:
什么应该修改?还是有任何更简单的方法可以做到这一点?谢谢你!!

def self.fetch(uri_str, limit = 10)
  response = Net::HTTP.get_response(URI.parse(uri_str))
  case response
    when Net::HTTPSuccess     then response
    when Net::HTTPRedirection then fetch(response['location'], limit - 1)
  else
    response.error!
  end
end
有帮助吗?

解决方案 2

这是我经过一些反复试验后最终得到的:

uri_str = URI.encode(https://graph.facebook.com/[album_id]}/picture?access_token=blahblahblah...)

result = Curl::Easy.http_get(uri_str) do |curl|
  curl.follow_location = false
end
puts result.header_str.split('Location: ')[1].split(' ')[0]

返回的header_str看起来像
“ http等等等等地点: http://xxxxxxxx/xxxx.jpg 等等等等等等”
因此,我设法通过使用2个split()来获取URL
最终结果是干净的URL
另外curl.follow_location应该是错误的,因此它不会返回该页面的正文

其他提示

如果您不介意使用宝石, curb 会为您做这个。这都是关于使用 follow_location 范围:

gem 'curb'
require 'curb'

# http://www.stackoverflow.com/ redirects to http://stackoverflow.com/

result = Curl::Easy.http_get("http://www.stackoverflow.com/") do |curl|
 curl.follow_location = true
end

puts result.body_str

不过,这并不是唯一具有此功能的库。

值得注意的是,很多时候您会在标题中获得无效的位置,并且必须由用户代理来解释它以将其渲染成有用的东西。标题喜欢 Location: / 需要在获取之前重写。其他时候,您会得到像 Location: uri=... 而且您必须从那里拉出位置。最好把它留给您的图书馆,而不是重写自己。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top