302のリダイレクトロケーションをレールで取得するにはどうすればよいですか? (httparty、net/http、redirectfollowerを試しました)

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

質問

こんにちは
Facebookユーザーのアルバムのカバー画像を入手しようとしています。
APIページで言われているように、「アルバムのカバー画像のURLが付いたHTTP 302」を取得すると、次のように戻ります。
http s://graph.facebook.com/ [album_id]}/picture?access_token = blahblahblah ...
ここの文書: http://developers.facebook.com/docs/reference/api/album

私はHTTPARTY、NET:HTTPとRedirectFollowerクラスを試しました
httpartyは画像自体を返し、「場所」(url)情報はどこにも返されません
ネット:HTTPとRedirectFollowerは少し難しいです...
URLをGETメソッドに渡すときにuri.encodeを使用しない場合、「bad 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 BLAH BLAH BLAH LOCATION: http://xxxxxx/xxxx.jpg 何とか何とか何とか"
だから私は2分割()を使用して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