2023年6月6日火曜日

Typhoeus超入門

Typhoeus超入門

概要

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 件のコメント:

コメントを投稿