Wie 302-Umleitung Lage in Rails zu bekommen? (Haben versucht HTTParty, Net / Http und RedirectFollower)

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

Frage

Hallo
Ich versuche, Facebook Benutzer-Album Titelbild zu erhalten.
wie es in der API-Seite gesagt, gibt es „ein HTTP-302 mit der URL des Titelbildes des Albums“, wenn immer:
http s:? //graph.facebook.com/ [album_id]} / Bild access_token = blahblahblah ...
hier Dokumente: http://developers.facebook.com/docs/reference/api/album

Ich habe versucht HTTParty, Net: HTTP und auch die RedirectFollower Klasse
HTTParty gibt das Bild Bild selbst, und keine „Ort“ (URL) Informationen überall
NET: HTTP und RedirectFollower ist ein bisschen schwierig ...
wenn ich URI.encode nicht verwenden, wenn die URL in die get-Methode übergeben, verursacht es „schlechte uri“ Fehler
aber wenn ich URI.encode verwenden, um die codierten URI passieren, es verursacht EOFError (Ende der Datei erreicht)
was erstaunlich ist, dass ich den Standort URL sehen kann, wenn Apigee des FB API

mit

Hier ist die Umleitungsmethode, die auf dem Netz empfohlen wird: HTTP-Dokumente:
etwas geändert werden sollte? oder gibt es eine einfachere Möglichkeit, dies zu tun? danke !!

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
War es hilfreich?

Lösung 2

Hier ist, was ich mit nach einigem Versuch und Irrtum am Ende:

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]

die zurück header_str sieht aus wie
"HTTP-bla bla bla Ort: http: //xxxxxxx/xxxx.jpg bla bla bla"
so dass ich unter Verwendung von 2 Split die URL erhalten verwaltet ()
das Endergebnis ist eine saubere URL
auch sollte die curl.follow_location falsch sein, damit es nicht den Körper von dieser Seite

zurückkehren

Andere Tipps

Wenn Sie nichts dagegen haben ein Juwel mit, curb wird dies für Sie tun. Es ist alles über den follow_location Parameter verwendet:

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

Dies ist nicht die einzige Bibliothek mit dieser Funktion, though.

Als Hinweis, viele Male werden Sie eine ungültige Stelle im Header erhalten und es wird durch den User-Agent interpretiert werden, um es in etwas Nützliches zu machen. Ein Header wie Location: / müssen neu geschrieben werden, bevor sie abgerufen werden können. Andere Zeiten können Sie einen Header wie Location: uri=... erhalten und Sie werden die Lage von dort herausziehen müssen. Es ist wirklich am besten zu Ihrer Bibliothek als neu schreiben zu lassen, dass sich selbst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top