Module: Httply::Proxies

Included in:
Client
Defined in:
lib/httply/proxies.rb

Instance Method Summary collapse

Instance Method Details

#determine_proxy(options) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/httply/proxies.rb', line 4

def determine_proxy(options)
  proxy                         =   nil
  
  if options
    proxy                     ||=   {}
    
    if options.is_a?(String)
      proxy                     =   proxy_from_string(options, proxy)
      
    elsif options.is_a?(Hash) && !options.empty?
      proxy                     =   proxy_from_hash(options, proxy)
    
    elsif options.is_a?(Array) && options.any?
      proxy                     =   proxy_from_array(options, proxy)
      
    elsif proxy_model_defined? && options.is_a?(::Proxy)
      proxy                     =   proxy_from_object(options, proxy)
    end
  end
  
  return proxy
end

#generate_faraday_proxy(proxy) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
# File 'lib/httply/proxies.rb', line 106

def generate_faraday_proxy(proxy)
  proxy_options                 =   {}
  
  if proxy && !proxy[:host].to_s.empty? && !proxy[:port].to_s.empty?
    proxy_options[:uri]         =   "http://#{proxy[:host]}:#{proxy[:port]}"
    proxy_options[:user]        =   proxy[:username] unless proxy[:username].to_s.empty?
    proxy_options[:password]    =   proxy[:password] unless proxy[:password].to_s.empty?
  end
  
  return proxy_options
end

#proxy_from_array(options) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/httply/proxies.rb', line 65

def proxy_from_array(options)
  item                          =   options.sample
  
  if item.is_a?(String)
    proxy                       =   proxy_from_string(item, proxy)
  elsif item.is_a?(Hash) && !item.empty?
    proxy                       =   proxy_from_hash(item, proxy)
  elsif proxy_model_defined? && item.is_a?(::Proxy)
    proxy                       =   proxy_from_object(item, proxy)
  end
  
  return proxy
end

#proxy_from_hash(options, proxy) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/httply/proxies.rb', line 39

def proxy_from_hash(options, proxy)
  host                          =   options.fetch(:host, nil)
  port                          =   options.fetch(:port, nil)
  
  username                      =   options.fetch(:username, nil)
  password                      =   options.fetch(:password, nil)
  
  randomize                     =   options.fetch(:randomize, true)
  type                          =   options.fetch(:type, :all)
  protocol                      =   options.fetch(:protocol, :all)
  
  if randomize && proxy_model_defined?
    proxy_object                =   ::Proxy.get_random_proxy(protocol: protocol, proxy_type: type)
    proxy                       =   proxy_from_object(proxy_object, proxy)
  else
    if host && port
      proxy[:host]              =   host
      proxy[:port]              =   port
      
      proxy                     =   set_credentials(username, password, proxy)
    end
  end
  
  return proxy
end

#proxy_from_object(proxy_object, proxy) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/httply/proxies.rb', line 79

def proxy_from_object(proxy_object, proxy)
  if proxy_object
    proxy[:host]                =   proxy_object.host
    proxy[:port]                =   proxy_object.port
    username                    =   !proxy_object.username.to_s.empty? ? proxy_object.username : nil
    password                    =   !proxy_object.password.to_s.empty? ? proxy_object.password : nil
    
    proxy                       =   set_credentials(username, password, proxy)
  end
  
  return proxy
end

#proxy_from_string(options, proxy) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
# File 'lib/httply/proxies.rb', line 27

def proxy_from_string(options, proxy)
  options                       =   options.gsub(/^http(s)?:\/\//i, "")
  parts                         =   options.split(":")

  if parts.size.eql?(2)
    proxy[:host]                =   parts.first
    proxy[:port]                =   parts.second.to_i
  end
  
  return proxy
end

#proxy_model_defined?Boolean

Returns:

  • (Boolean)


99
100
101
102
103
104
# File 'lib/httply/proxies.rb', line 99

def proxy_model_defined?
  defined                       =   Module.const_get("Proxy").is_a?(Class) rescue false
  defined                       =   (defined && ::Proxy.respond_to?(:get_random_proxy))
  
  return defined
end

#set_credentials(username, password, proxy) ⇒ Object



92
93
94
95
96
97
# File 'lib/httply/proxies.rb', line 92

def set_credentials(username, password, proxy)
  proxy[:username]              =   username unless username.to_s.empty?
  proxy[:password]              =   password unless password.to_s.empty?
  
  return proxy
end