Class: Clients::HttpClient

Inherits:
Object
  • Object
show all
Defined in:
lib/clients/http_client.rb,
lib/clients/http_client/response.rb

Direct Known Subclasses

Recaptcha::Client

Defined Under Namespace

Classes: Response

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(proxy: nil, logger: nil) ⇒ HttpClient

Returns a new instance of HttpClient.



11
12
13
14
15
16
17
# File 'lib/clients/http_client.rb', line 11

def initialize(
  proxy: nil,
  logger: nil
)
  @proxy = proxy
  @logger = logger
end

Class Attribute Details

.user_agentsObject



93
94
95
# File 'lib/clients/http_client.rb', line 93

def user_agents
  @user_agents ||= File.readlines user_agents_path
end

Instance Attribute Details

#cookiesObject



80
81
82
# File 'lib/clients/http_client.rb', line 80

def cookies
  @cookies ||= HTTP::CookieJar.new
end

#proxyObject

Returns the value of attribute proxy.



9
10
11
# File 'lib/clients/http_client.rb', line 9

def proxy
  @proxy
end

#user_agentObject



84
85
86
# File 'lib/clients/http_client.rb', line 84

def user_agent
  @user_agent ||= sample_user_agent
end

Class Method Details

.user_agents_pathObject



97
98
99
# File 'lib/clients/http_client.rb', line 97

def user_agents_path
  File.join File.dirname(__FILE__), "../../data/user_agents.txt"
end

Instance Method Details

#get(url, **options, &block) ⇒ Object



27
28
29
# File 'lib/clients/http_client.rb', line 27

def get(url, **options, &block)
  request :get, url, **options, &block
end

#has_cookies?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/clients/http_client.rb', line 23

def has_cookies?
  cookies.any?
end

#head(url, **options, &block) ⇒ Object



35
36
37
# File 'lib/clients/http_client.rb', line 35

def head(url, **options, &block)
  request :head, url, **options, &block
end

#post(url, **options, &block) ⇒ Object



31
32
33
# File 'lib/clients/http_client.rb', line 31

def post(url, **options, &block)
  request :post, url, **options, &block
end

#proxy?Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/clients/http_client.rb', line 19

def proxy?
  !!proxy
end

#request(verb, url, **options) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/clients/http_client.rb', line 39

def request(verb, url, **options)
  options = options.merge(ssl_context: ssl_context)

  request = setup_request options.delete(:follow_redirects)
  request = yield request if block_given?

  response = make_request(request, verb, url, **options)

  Response.new response
rescue
  raise HttpClientError.new(url: url, proxy: proxy)
end

#resetObject



52
53
54
55
56
# File 'lib/clients/http_client.rb', line 52

def reset
  reset_user_agent
  reset_proxy
  reset_cookies
end

#reset_cookiesObject



76
77
78
# File 'lib/clients/http_client.rb', line 76

def reset_cookies
  @cookies = nil
end

#reset_proxyObject



62
63
64
65
66
67
# File 'lib/clients/http_client.rb', line 62

def reset_proxy
  return unless proxy

  log "Reset proxy to #{proxy.host}:#{proxy.port}"
  proxy.reset!
end

#reset_user_agentObject



58
59
60
# File 'lib/clients/http_client.rb', line 58

def reset_user_agent
  self.user_agent = nil
end

#store_cookies(cookies) ⇒ Object



69
70
71
72
73
74
# File 'lib/clients/http_client.rb', line 69

def store_cookies(cookies)
  return if cookies.empty?
  cookies.each do |cookie|
    self.cookies << cookie
  end
end