0

これは、HTTPSプロトコルを介してcapybaraがアクセスするページ上の画像タグです。

<img src="path">

どんな種類のドライバーでもカピバラを使ってページから画像ファイルを取得する方法はありますか?

画像にはHTTPS経由でのみアクセスできるため、File.read('path')のようなものは使用できません。私の最近の研究は、そのような種類の解決策に私をもたらしました:

  1. ページにアクセス
  2. ページをpngに保存(webkitドライバーにはそのような便利な機能があります)
  3. クロップ画像

しかし、私はかなりの解決策が存在すると信じています。

編集1:

paddeのソリューションを試しましたが、応答本文は次のとおりです。

<html><head><title>Object moved</title></head> 
    <body>
        <h2>Object moved to <a href=\"/Bledy/Blad404.aspx?aspxerrorpath=/CaptchaType.ashx\">here</a>.</h2> 
    </body>
</html>

編集2:

> curl -I image_path

5860cf30abf5d5480
HTTP/1.1 302 Found
Cache-Control: private
Content-Length: 168
Content-Type: text/html; charset=utf-8
Location: /Bledy/Blad404.aspx?aspxerrorpath=/CaptchaType.ashx
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Sat, 03 Nov 2012 17:18:55 GMT
4

1 に答える 1

2

私がこれを正しく理解すれば、おそらくあなたが望むのはRubyからのHTTPSリクエストです。試す:

require 'net/https'

url = URI.parse('path')

Net::HTTP.start(url.host, url.port, :use_ssl => true, :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|
  res = http.get(url.request_uri)
  open("image.png", "wb") do |f|
    f.write(res.body)
  end
end

chunky_pngトリミングには、 (純粋なRuby)またはrmagick(ImageMagickが必要)のいずれかを使用できます

編集:リダイレクトをフォローしたい場合は、

require 'net/https'

def process_image( content )
  # do your cropping here

  open("image.png", "wb") do |f|
    f.write(content)
  end
end

def fetch( url )
  Net::HTTP.start(url.host, url.port, :use_ssl => true, :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|
    response = http.get(url.request_uri)
    case response.code
    when Net::HTTPRedirection
      fetch response['location']
    else
      process_image response.body
    end
  end
end

fetch URI.parse('path')
于 2012-11-03T14:41:25.957 に答える