Como llegar a 302 ubicación de redirección en Rails? (Han intentado HTTParty, Net / HTTP y RedirectFollower)
-
09-10-2019 - |
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
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.