2

認証を介してFacebookのアバターを取得しようとしています。これが私がやっていることです:

def image_uri
  require 'net/http'
  image = URI.parse(params[:image]) # https://graph.facebook.com/565515262/picture
  fetch = Net::HTTP.get_response(image)
  based = 'data:image/jpg;base64,' << Base64.encode64(fetch)
  render :text => based
end

次のエラーが表示されます (新しいエラー — 編集済み):

Connection reset by peer

グーグルで調べてみましたが、解決策が得られないようです。アイデアはありますか?

私は基本的にPHPの正確な機能を探していますfile_get_contents()

4

2 に答える 2

1

解析する前に URI をエスケープしてみてください。

URI.parse URI.escape(params[:image])

params[:image]解析したいURIが含まれていることを確認してください...代わりにユーザーIDを渡し、それをURIに補間します。

URI.parse URI.escape("https://graph.facebook.com/#{params[:image]}/picture)"

于 2012-08-23T15:08:26.777 に答える
0
  1. 静的文字列「https://graph.facebook.com/565515262/picture」を使用すると、同じエラーがスローされますか

  2. あなたがするとき、それは何を言いますか

    render :text => params[:image]
    
  3. 上記の両方で質問に答えられない場合は、HTTPS の使用を指定してみてください。

    uri = URI('https://secure.example.com/some_path?query=string')
    Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https').start do |http|
        request = Net::HTTP::Get.new uri.request_uri
        response = http.request request # Net::HTTPResponse object
    end
    

Ruby < 1.9.3 を使用していると仮定すると、次のことも行う必要があります。

require 'net/https'

Ruby 1.9.3 を使用している場合は、何もする必要はありません。

編集

最新バージョンを使用している場合は、次のように簡単に実行できます。

open(params[:image]) # http://graph.facebook.com/#{@user.facebook_id}/picture
于 2012-08-23T15:13:11.987 に答える