2013-09-16 1 views
1

Как вы знаете, некоторые captchas генерируют с использованием пользовательского сеанса, и я должен каким-то образом сохранить на компьютере этот образ, для тестирования нашего приложения, но как и что лучше выбрать?Получить изображение с url с cookies в ruby ​​

Например, на HTTP :: получить у меня есть такой код, с печеньем:

http = Net::HTTP.new('***', 443) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
path = '****' 


# GET request -> so the host can set his cookies 
resp, data = http.get(path) 
body_text = resp.body 
#puts "Body = #{body_text}" 

cookie = resp.response['set-cookie'].split('; ')[0] 
@captcha_url = (/BotDetectCaptcha.ashx?get=image&c=***;t=(.*)" \/>/.match body_text) 
# POST request -> logging in 
puts "captcha_url = #{@captcha_url}" 
data = 'BotDetectCaptcha.ashx?get=image&c=****&t=#{@captcha_url}' 
headers = { 
    'Cookie' => cookie, 
    'Referer' => '****', 
    'Content-Type' => 'image-jpeg' 
} 

resp, data = http.post(path, data, headers) 

так, может быть, у меня есть образ, что мне нужно, но! как я могу его сохранить? Все статьи google'd говорят мне, что я должен использовать open-uri, но как быть, когда мне также нужно использовать сеанс? Может быть, я могу сделать это как-то с http-классом от рубина?

Так как я могу загрузить изображение с загруженной страницы или по URL-адресу?

+0

оформления покупок Mechanize камень это позволяет установить сеанс и скачивать файлы. – engineersmnky

ответ

0

Вы можете получить изображение с переменным и сохранить его:

IMG_PATH = '/var/www/pics/' 

Class Img 
    def self.download(data, filename) 
    open(IMG_PATH + filename, 'wb') do |file| 
     file << open(data).read 
    end 
    return true 
    end 
end 

img = Img.download(data, filename)