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
26
27
28
29
# 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
    
    if proxy && !proxy.empty?
      proxy                     =   proxy.has_key?(:uri) ? proxy : generate_faraday_proxy(proxy)
    end
  end
  
  return proxy
end

#generate_faraday_proxy(proxy) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
# File 'lib/httply/proxies.rb', line 113

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



72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/httply/proxies.rb', line 72

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



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/httply/proxies.rb', line 43

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

#proxy_from_object(proxy_object, proxy) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/httply/proxies.rb', line 86

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



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/httply/proxies.rb', line 31

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)


106
107
108
109
110
111
# File 'lib/httply/proxies.rb', line 106

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



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

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