Comment obtenir 302 emplacement redirect dans Rails? (Ont essayé HTTParty, Net / Http et RedirectFollower)

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

Question

Bonjour
Je suis en train d'obtenir l'image de couverture de l'album de l'utilisateur Facebook.
comme il est dit dans la page de l'API, il renvoie « HTTP 302 avec l'URL de l'image de couverture de l'album » lors de l'obtention:
http s: //graph.facebook.com/ [album_id]} / image access_token = blahblahblah ...
documents ici: http://developers.facebook.com/docs/reference/api/album

J'ai essayé HTTParty, Net: HTTP et aussi la classe RedirectFollower
HTTParty renvoie l'image de l'image elle-même, et non « emplacement » (URL) des informations partout
NET: HTTP et RedirectFollower sont un peu délicat ...
si je ne l'utilise URI.encode lors du passage de l'URL dans la méthode get, il provoque
d'erreur « mauvais uri » mais si j'utilise URI.encode pour passer l'URI codé, il provoque EOFError (fin de fichier atteint)
Ce qui est étonnant est que je peux voir l'URL d'emplacement lorsque vous utilisez l'API FB de Apigee

ici est la méthode de redirection qui est recommandé sur le Net: documents HTTP:
tout devrait être modifié? ou est-il un moyen plus facile de le faire? Thank you !!

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
Était-ce utile?

La solution 2

Voici ce que je retrouve avec après quelques essais et erreurs:

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]

les regards header_str retournés comme
"HTTP bla bla bla Lieu: http: //xxxxxxx/xxxx.jpg bla bla bla"
donc je réussi à obtenir l'URL en utilisant 2 split ()
le résultat final est une URL propre
aussi le curl.follow_location doit être faux il ne retournera pas le corps de cette page

Autres conseils

Si vous ne me dérange pas l'aide d'un bijou, curb le fera pour vous. Il est tout au sujet de l'aide du paramètre 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

Ce n'est pas la seule bibliothèque avec cette fonctionnalité, cependant.

Comme une note, plusieurs fois, vous obtiendrez un emplacement non valide dans l'en-tête et il devra être interprété par l'agent utilisateur pour le rendre en quelque chose d'utile. Un en-tête comme Location: / devra être ré-écrit avant qu'il puisse être tiré par les cheveux. D'autres fois, vous obtiendrez un en-tête comme Location: uri=... et vous devrez tirer sur l'emplacement à partir de là. Il est vraiment préférable de le laisser à votre bibliothèque que ré-écriture vous-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top