Como llegar a 302 ubicación de redirección en Rails? (Han intentado HTTParty, Net / HTTP y RedirectFollower)

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

Pregunta

Hola
Estoy tratando de llegar a la vista de la cubierta del álbum de usuario de Facebook.
como se dice en la página de la API, devuelve "un HTTP 302 con la URL de la foto de la portada del álbum" al conseguir:
http s:? //graph.facebook.com/ [album_id]} / imagen señal_acceso = blahblahblah ...
documentos aquí: http://developers.facebook.com/docs/reference/api/album

He intentado HTTParty, neto: HTTP y también la clase RedirectFollower
HTTParty devuelve la imagen de la imagen en sí, y no "localización" (URL) información en cualquier lugar
NET: HTTP y RedirectFollower son un poco complicado ...
si yo no uso URI.encode cuando pasa la URL en el método get, que causa "malo uri" error
pero si yo uso URI.encode para pasar el URI codificado, hace que EOFError (final del archivo alcanzado)
lo que es sorprendente es que puedo ver la URL de la ubicación utilizando las API de FB Apigee

aquí es el método de redirección que se recomienda en la red: HTTP documentos:
nada debe ser modificado? o ¿hay alguna manera más fácil de hacer esto? gracias !!

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
¿Fue útil?

Solución 2

Esto es lo que después de terminar con un poco de ensayo y error:

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]

las miradas header_str devueltos como
"HTTP bla, bla, bla Ubicación: http: //xxxxxxx/xxxx.jpg bla, bla, bla"
así que me las arreglé para obtener la URL mediante el uso de 2 split ()
el resultado final es una URL limpia
También el curl.follow_location debe ser falsa por lo que no va a volver el cuerpo de esa página

Otros consejos

Si no les importa usar una joya, curb lo hará por ti. Es todo acerca del uso del parámetro 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

Esta no es la única biblioteca con esta característica, sin embargo.

Como nota, muchas veces se obtendrá una ubicación no válida en la cabecera y tendrá que ser interpretado por el agente de usuario para que sea en algo útil. tendrá que ser reescrito como un encabezado Location: / antes de que pueda ser exagerado. Otras veces obtendrá una cabecera como Location: uri=... y usted tendrá que sacar la ubicación de allí. Es realmente mejor dejarlo a su biblioteca de re-escritura que usted mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top