概要
http リクエストの並列実行が行える typhoeus (テュポーン) を試してみました
環境
- macOS 11.7.6
- Ruby 3.2.1
- typhoeus 1.4.0
インストール
- vim Gemfile
gem 'typhoeus'
サンプルコード POST
# frozen_string_literal: true
require 'json'
require 'typhoeus'
request = Typhoeus::Request.new(
'https://request-dumper.kakakikikeke.com',
method: :post,
body: 'this is a request body',
params: { field1: 'a field' },
headers: { Accept: 'text/html' }
)
request.on_complete do |response|
if response.success?
puts response.body
puts JSON.parse(response.body)['method']
elsif response.timed_out?
puts 'got a time out'
elsif response.code.zero?
puts response.return_message
else
puts "HTTP request failed: #{response.code}"
end
end
request.run
他のメソッドをコールしたい場合は
method: :post
の部分を method: :get
にすれば OK です
並列実行
Typhoeus::Hydra
を使います
使い方としてはこちらがメインになるケースが多いのかもしれません
queue に request オブジェクトをどんどん追加すれば OK です
# frozen_string_literal: true
require 'json'
require 'typhoeus'
request = Typhoeus::Request.new(
'https://request-dumper.kakakikikeke.com',
method: :get,
body: 'this is a request body',
params: { field1: 'a field' },
headers: { Accept: 'text/html' }
)
hydra = Typhoeus::Hydra.new
hydra.queue(request)
request.on_complete do |response|
if response.success?
puts response.body
puts JSON.parse(response.body)['method']
elsif response.timed_out?
puts 'got a time out'
elsif response.code.zero?
puts response.return_message
else
puts "HTTP request failed: #{response.code}"
end
end
request.run
0 件のコメント:
コメントを投稿