proxy_fetcher 0.10.2 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -1
- data/Gemfile +8 -5
- data/Rakefile +7 -3
- data/gemfiles/nokogiri.gemfile +8 -6
- data/gemfiles/oga.gemfile +8 -6
- data/lib/proxy_fetcher.rb +46 -35
- data/lib/proxy_fetcher/client/client.rb +10 -3
- data/lib/proxy_fetcher/client/request.rb +4 -4
- data/lib/proxy_fetcher/configuration.rb +24 -19
- data/lib/proxy_fetcher/document.rb +0 -9
- data/lib/proxy_fetcher/document/adapters.rb +1 -1
- data/lib/proxy_fetcher/document/adapters/abstract_adapter.rb +3 -12
- data/lib/proxy_fetcher/document/adapters/nokogiri_adapter.rb +1 -1
- data/lib/proxy_fetcher/document/adapters/oga_adapter.rb +1 -1
- data/lib/proxy_fetcher/document/node.rb +2 -2
- data/lib/proxy_fetcher/exceptions.rb +6 -6
- data/lib/proxy_fetcher/manager.rb +42 -9
- data/lib/proxy_fetcher/providers/base.rb +43 -22
- data/lib/proxy_fetcher/providers/free_proxy_list.rb +9 -10
- data/lib/proxy_fetcher/providers/free_proxy_list_socks.rb +58 -0
- data/lib/proxy_fetcher/providers/free_proxy_list_ssl.rb +7 -15
- data/lib/proxy_fetcher/providers/free_proxy_list_us.rb +54 -0
- data/lib/proxy_fetcher/providers/http_tunnel.rb +11 -19
- data/lib/proxy_fetcher/providers/mtpro.rb +43 -0
- data/lib/proxy_fetcher/providers/proxy_list.rb +8 -16
- data/lib/proxy_fetcher/providers/proxypedia.rb +48 -0
- data/lib/proxy_fetcher/providers/proxyscrape_http.rb +65 -0
- data/lib/proxy_fetcher/providers/proxyscrape_socks4.rb +65 -0
- data/lib/proxy_fetcher/providers/proxyscrape_socks5.rb +65 -0
- data/lib/proxy_fetcher/providers/xroxy.rb +9 -17
- data/lib/proxy_fetcher/proxy.rb +16 -4
- data/lib/proxy_fetcher/utils/http_client.rb +7 -12
- data/lib/proxy_fetcher/utils/proxy_list_validator.rb +3 -1
- data/lib/proxy_fetcher/utils/proxy_validator.rb +21 -9
- data/lib/proxy_fetcher/version.rb +3 -3
- data/proxy_fetcher.gemspec +21 -16
- data/spec/fixtures/proxies.txt +14 -0
- data/spec/proxy_fetcher/client/client_spec.rb +72 -57
- data/spec/proxy_fetcher/configuration_spec.rb +11 -11
- data/spec/proxy_fetcher/document/adapters_spec.rb +8 -8
- data/spec/proxy_fetcher/document/node_spec.rb +4 -4
- data/spec/proxy_fetcher/manager_spec.rb +18 -0
- data/spec/proxy_fetcher/providers/base_spec.rb +9 -9
- data/spec/proxy_fetcher/providers/multiple_providers_spec.rb +4 -4
- data/spec/proxy_fetcher/providers/proxy_classes_spec.rb +28 -0
- data/spec/proxy_fetcher/proxy_spec.rb +14 -14
- data/spec/proxy_fetcher/version_spec.rb +2 -0
- data/spec/spec_helper.rb +10 -10
- data/spec/support/manager_examples.rb +21 -21
- metadata +27 -17
- data/lib/proxy_fetcher/providers/gather_proxy.rb +0 -58
- data/spec/proxy_fetcher/providers/free_proxy_list_spec.rb +0 -13
- data/spec/proxy_fetcher/providers/free_proxy_list_ssl_spec.rb +0 -11
- data/spec/proxy_fetcher/providers/gather_proxy_spec.rb +0 -11
- data/spec/proxy_fetcher/providers/http_tunnel_spec.rb +0 -11
- data/spec/proxy_fetcher/providers/proxy_list_spec.rb +0 -11
- data/spec/proxy_fetcher/providers/xroxy_spec.rb +0 -11
@@ -1,26 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "spec_helper"
|
4
4
|
|
5
5
|
describe ProxyFetcher::Document::Adapters do
|
6
|
-
describe
|
7
|
-
it
|
8
|
-
expect(described_class.lookup(
|
6
|
+
describe "#lookup" do
|
7
|
+
it "returns predefined adapters if symbol or string passed" do
|
8
|
+
expect(described_class.lookup("nokogiri")).to eq(ProxyFetcher::Document::NokogiriAdapter)
|
9
9
|
|
10
10
|
expect(described_class.lookup(:oga)).to eq(ProxyFetcher::Document::OgaAdapter)
|
11
11
|
end
|
12
12
|
|
13
|
-
it
|
13
|
+
it "returns self if class passed" do
|
14
14
|
expect(described_class.lookup(Struct)).to eq(Struct)
|
15
15
|
end
|
16
16
|
|
17
|
-
it
|
17
|
+
it "raises an exception if passed value is blank" do
|
18
18
|
expect { described_class.lookup(nil) }.to raise_error(ProxyFetcher::Exceptions::BlankAdapter)
|
19
|
-
expect { described_class.lookup(
|
19
|
+
expect { described_class.lookup("") }.to raise_error(ProxyFetcher::Exceptions::BlankAdapter)
|
20
20
|
end
|
21
21
|
|
22
22
|
it "raises an exception if adapter doesn't exist" do
|
23
|
-
expect { described_class.lookup(
|
23
|
+
expect { described_class.lookup("wrong") }.to raise_error(ProxyFetcher::Exceptions::UnknownAdapter)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "spec_helper"
|
4
4
|
|
5
5
|
describe ProxyFetcher::Document::Node do
|
6
|
-
context
|
7
|
-
it
|
8
|
-
node = ProxyFetcher::Document::Node.new(
|
6
|
+
context "overridable methods" do
|
7
|
+
it "raises an error" do
|
8
|
+
node = ProxyFetcher::Document::Node.new("")
|
9
9
|
|
10
10
|
%w[content html].each do |method|
|
11
11
|
expect { node.public_send(method) }.to raise_error do |error|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
describe ProxyFetcher::Manager do
|
6
|
+
it "can initialize with a proxies from file(s)" do
|
7
|
+
manager = described_class.new(refresh: false, file: "spec/fixtures/proxies.txt")
|
8
|
+
|
9
|
+
expect(manager.proxies.size).to be(14)
|
10
|
+
|
11
|
+
manager = described_class.new(
|
12
|
+
refresh: false,
|
13
|
+
file: ["spec/fixtures/proxies.txt", "spec/fixtures/proxies.txt"]
|
14
|
+
)
|
15
|
+
|
16
|
+
expect(manager.proxies.size).to be(14)
|
17
|
+
end
|
18
|
+
end
|
@@ -1,37 +1,37 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "spec_helper"
|
4
4
|
|
5
5
|
describe ProxyFetcher::Providers::Base do
|
6
6
|
before { ProxyFetcher.config.reset! }
|
7
7
|
after { ProxyFetcher.config.reset! }
|
8
8
|
|
9
|
-
it
|
9
|
+
it "does not allows to use not implemented methods" do
|
10
10
|
NotImplementedCustomProvider = Class.new(ProxyFetcher::Providers::Base)
|
11
11
|
|
12
12
|
ProxyFetcher::Configuration.register_provider(:provider_without_methods, NotImplementedCustomProvider)
|
13
13
|
ProxyFetcher.config.provider = :provider_without_methods
|
14
14
|
|
15
15
|
expect { ProxyFetcher::Manager.new }.to raise_error(NotImplementedError) do |error|
|
16
|
-
expect(error.message).to include(
|
16
|
+
expect(error.message).to include("provider_url")
|
17
17
|
end
|
18
18
|
|
19
19
|
# implement one of the methods
|
20
20
|
NotImplementedCustomProvider.class_eval do
|
21
|
-
def
|
22
|
-
|
21
|
+
def provider_url
|
22
|
+
"http://provider.com"
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
26
|
expect { ProxyFetcher::Manager.new }.to raise_error(NotImplementedError) do |error|
|
27
|
-
expect(error.message).to include(
|
27
|
+
expect(error.message).to include("xpath")
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
it
|
31
|
+
it "logs failed to load proxy providers" do
|
32
32
|
CustomProvider = Class.new(ProxyFetcher::Providers::Base) do
|
33
33
|
def load_proxy_list(*)
|
34
|
-
doc = load_document(
|
34
|
+
doc = load_document("https://google.com", {})
|
35
35
|
doc.xpath('//table[contains(@class, "table")]/tr[(not(@id="proxy-table-header")) and (count(td)>2)]')
|
36
36
|
end
|
37
37
|
end
|
@@ -44,7 +44,7 @@ describe ProxyFetcher::Providers::Base do
|
|
44
44
|
|
45
45
|
allow_any_instance_of(HTTP::Client).to receive(:get).and_raise(StandardError)
|
46
46
|
|
47
|
-
expect(logger).to receive(:warn).with(
|
47
|
+
expect(logger).to receive(:warn).with(%r{Failed to process request to http[s:/]})
|
48
48
|
|
49
49
|
ProxyFetcher::Manager.new
|
50
50
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "spec_helper"
|
4
4
|
|
5
|
-
describe
|
5
|
+
describe "Multiple proxy providers" do
|
6
6
|
before { ProxyFetcher.config.reset! }
|
7
7
|
after { ProxyFetcher.config.reset! }
|
8
8
|
|
9
|
-
it
|
10
|
-
proxy_stub = ProxyFetcher::Proxy.new(addr:
|
9
|
+
it "combine proxies from multiple providers" do
|
10
|
+
proxy_stub = ProxyFetcher::Proxy.new(addr: "192.168.1.1", port: 8080)
|
11
11
|
|
12
12
|
# Each proxy provider will return 2 proxies
|
13
13
|
ProxyFetcher::Configuration.providers_registry.providers.each do |_name, klass|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
describe "Proxy classes" do
|
6
|
+
[
|
7
|
+
[:free_proxy_list, "FreeProxyList"],
|
8
|
+
[:free_proxy_list_socks, "FreeProxyListSocks"],
|
9
|
+
[:free_proxy_list_ssl, "FreeProxyListSSL"],
|
10
|
+
[:free_proxy_list_us, "FreeProxyListUS"],
|
11
|
+
[:http_tunnel, "HTTPTunnel"],
|
12
|
+
[:mtpro, "MTPro"],
|
13
|
+
[:proxy_list, "ProxyList"],
|
14
|
+
[:proxypedia, "Proxypedia"],
|
15
|
+
[:proxyscrape_http, "ProxyscrapeHTTP"],
|
16
|
+
[:proxyscrape_socks4, "ProxyscrapeSOCKS4"],
|
17
|
+
[:proxyscrape_socks5, "ProxyscrapeSOCKS5"],
|
18
|
+
[:xroxy, "XRoxy"]
|
19
|
+
].each do |(provider_name, provider_klass)|
|
20
|
+
describe Object.const_get("ProxyFetcher::Providers::#{provider_klass}") do
|
21
|
+
before :all do
|
22
|
+
ProxyFetcher.config.provider = provider_name
|
23
|
+
end
|
24
|
+
|
25
|
+
it_behaves_like "a manager"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,20 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "spec_helper"
|
4
4
|
|
5
5
|
describe ProxyFetcher::Proxy do
|
6
|
-
let(:proxy) { described_class.new(addr:
|
6
|
+
let(:proxy) { described_class.new(addr: "192.169.1.1", port: 8080, type: "HTTP") }
|
7
7
|
|
8
|
-
it
|
9
|
-
proxy = described_class.new(addr:
|
8
|
+
it "can initialize a new proxy object" do
|
9
|
+
proxy = described_class.new(addr: "192.169.1.1", port: 8080, type: "HTTP")
|
10
10
|
|
11
11
|
expect(proxy).not_to be_nil
|
12
|
-
expect(proxy.addr).to eq(
|
12
|
+
expect(proxy.addr).to eq("192.169.1.1")
|
13
13
|
expect(proxy.port).to eq(8080)
|
14
|
-
expect(proxy.type).to eq(
|
14
|
+
expect(proxy.type).to eq("HTTP")
|
15
15
|
end
|
16
16
|
|
17
|
-
it
|
17
|
+
it "checks schema" do
|
18
18
|
proxy.type = ProxyFetcher::Proxy::HTTP
|
19
19
|
expect(proxy.http?).to be_truthy
|
20
20
|
expect(proxy.https?).to be_falsey
|
@@ -34,28 +34,28 @@ describe ProxyFetcher::Proxy do
|
|
34
34
|
expect(proxy.ssl?).to be_truthy
|
35
35
|
end
|
36
36
|
|
37
|
-
it
|
38
|
-
proxy.addr =
|
37
|
+
it "not connectable if IP addr is wrong" do
|
38
|
+
proxy.addr = "192.168.1.0"
|
39
39
|
expect(proxy.connectable?).to be_falsey
|
40
40
|
end
|
41
41
|
|
42
|
-
it
|
42
|
+
it "not connectable if there are some error during connection request" do
|
43
43
|
allow_any_instance_of(HTTP::Client).to receive(:head).and_raise(HTTP::TimeoutError)
|
44
44
|
expect(proxy.connectable?).to be_falsey
|
45
45
|
end
|
46
46
|
|
47
|
-
it
|
47
|
+
it "returns URI::Generic" do
|
48
48
|
expect(proxy.uri).to be_a(URI::Generic)
|
49
49
|
|
50
50
|
expect(proxy.uri.host).not_to be_empty
|
51
51
|
expect(proxy.uri.port).not_to be_nil
|
52
52
|
end
|
53
53
|
|
54
|
-
it
|
54
|
+
it "returns URL" do
|
55
55
|
expect(proxy.url).to be_a(String)
|
56
56
|
end
|
57
57
|
|
58
|
-
it
|
59
|
-
expect(proxy.url(scheme: true)).to include(
|
58
|
+
it "returns URL with scheme" do
|
59
|
+
expect(proxy.url(scheme: true)).to include("://")
|
60
60
|
end
|
61
61
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
SimpleCov.add_filter
|
5
|
-
SimpleCov.add_filter
|
3
|
+
require "simplecov"
|
4
|
+
SimpleCov.add_filter "spec"
|
5
|
+
SimpleCov.add_filter "version"
|
6
6
|
|
7
|
-
if ENV[
|
8
|
-
require
|
7
|
+
if ENV["CI"] || ENV["TRAVIS"] || ENV["COVERALLS"] || ENV["JENKINS_URL"]
|
8
|
+
require "coveralls"
|
9
9
|
Coveralls.wear!
|
10
10
|
else
|
11
11
|
SimpleCov.start
|
12
12
|
end
|
13
13
|
|
14
|
-
require
|
14
|
+
require "bundler/setup"
|
15
15
|
Bundler.setup
|
16
16
|
|
17
|
-
require
|
17
|
+
require "proxy_fetcher"
|
18
18
|
|
19
|
-
Dir[
|
19
|
+
Dir["./spec/support/**/*.rb"].sort.each { |f| require f }
|
20
20
|
|
21
|
-
adapter = ENV[
|
21
|
+
adapter = ENV["BUNDLE_GEMFILE"][%r{.+/(.+)\.gemfile}i, 1] || :nokogiri
|
22
22
|
puts "Configured adapter: '#{adapter}'"
|
23
23
|
|
24
24
|
ProxyFetcher.configure do |config|
|
@@ -26,5 +26,5 @@ ProxyFetcher.configure do |config|
|
|
26
26
|
end
|
27
27
|
|
28
28
|
RSpec.configure do |config|
|
29
|
-
config.order =
|
29
|
+
config.order = "random"
|
30
30
|
end
|
@@ -1,9 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
RSpec.shared_examples
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
RSpec.shared_examples "a manager" do
|
4
|
+
before :all do
|
5
|
+
@cached_manager = ProxyFetcher::Manager.new
|
6
|
+
end
|
7
|
+
|
8
|
+
it "loads proxy list on initialization by default" do
|
9
|
+
expect(@cached_manager.proxies).not_to be_empty
|
7
10
|
end
|
8
11
|
|
9
12
|
it "doesn't load proxy list on initialization if `refresh` argument was set to false" do
|
@@ -11,11 +14,10 @@ RSpec.shared_examples 'a manager' do
|
|
11
14
|
expect(manager.proxies).to be_empty
|
12
15
|
end
|
13
16
|
|
14
|
-
it
|
15
|
-
|
16
|
-
expect(manager.proxies).to all(be_a(ProxyFetcher::Proxy))
|
17
|
+
it "returns valid Proxy objects" do
|
18
|
+
expect(@cached_manager.proxies).to all(be_a(ProxyFetcher::Proxy))
|
17
19
|
|
18
|
-
|
20
|
+
@cached_manager.proxies.each do |proxy|
|
19
21
|
expect(proxy.addr).to match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/i)
|
20
22
|
expect(proxy.port).to be_a_kind_of(Numeric)
|
21
23
|
expect(proxy.type).not_to be_empty
|
@@ -25,12 +27,11 @@ RSpec.shared_examples 'a manager' do
|
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
28
|
-
it
|
29
|
-
|
30
|
-
expect(manager.raw_proxies).to all(be_a(String))
|
30
|
+
it "returns raw proxies (HOST:PORT)" do
|
31
|
+
expect(@cached_manager.raw_proxies).to all(be_a(String))
|
31
32
|
end
|
32
33
|
|
33
|
-
it
|
34
|
+
it "cleanup proxy list from dead servers" do
|
34
35
|
allow_any_instance_of(ProxyFetcher::Proxy).to receive(:connectable?).and_return(false)
|
35
36
|
|
36
37
|
manager = ProxyFetcher::Manager.new
|
@@ -45,7 +46,7 @@ RSpec.shared_examples 'a manager' do
|
|
45
46
|
expect(manager.inspect).to eq(manager.to_s)
|
46
47
|
end
|
47
48
|
|
48
|
-
it
|
49
|
+
it "returns first proxy" do
|
49
50
|
manager = ProxyFetcher::Manager.new
|
50
51
|
|
51
52
|
first_proxy = manager.proxies.first
|
@@ -54,16 +55,16 @@ RSpec.shared_examples 'a manager' do
|
|
54
55
|
expect(manager.proxies.first).not_to eq(first_proxy)
|
55
56
|
end
|
56
57
|
|
57
|
-
it
|
58
|
+
it "returns first valid proxy" do
|
58
59
|
manager = ProxyFetcher::Manager.new(refresh: false)
|
59
60
|
|
60
|
-
proxies = Array.new(5) { instance_double(
|
61
|
+
proxies = Array.new(5) { instance_double("ProxyFetcher::Proxy", connectable?: false) }
|
61
62
|
manager.instance_variable_set(:@proxies, proxies)
|
62
63
|
|
63
|
-
connectable_proxy = instance_double(
|
64
|
+
connectable_proxy = instance_double("ProxyFetcher::Proxy")
|
64
65
|
allow(connectable_proxy).to receive(:connectable?).and_return(true)
|
65
66
|
|
66
|
-
manager.proxies[0..2].each { |proxy| proxy.instance_variable_set(:@addr,
|
67
|
+
manager.proxies[0..2].each { |proxy| proxy.instance_variable_set(:@addr, "192.168.1.1") }
|
67
68
|
manager.proxies[2] = connectable_proxy
|
68
69
|
|
69
70
|
expect(manager.get!).to eq(connectable_proxy)
|
@@ -73,15 +74,14 @@ RSpec.shared_examples 'a manager' do
|
|
73
74
|
expect(manager.proxies.size).to be(1)
|
74
75
|
end
|
75
76
|
|
76
|
-
it
|
77
|
+
it "returns nothing if proxy list is empty" do
|
77
78
|
manager = ProxyFetcher::Manager.new(refresh: false)
|
78
79
|
|
79
80
|
expect(manager.get).to be_nil
|
80
81
|
expect(manager.get!).to be_nil
|
81
82
|
end
|
82
83
|
|
83
|
-
it
|
84
|
-
|
85
|
-
expect(manager.random).to be_an_instance_of(ProxyFetcher::Proxy)
|
84
|
+
it "returns random proxy" do
|
85
|
+
expect(@cached_manager.random).to be_an_instance_of(ProxyFetcher::Proxy)
|
86
86
|
end
|
87
87
|
end
|
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: proxy_fetcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nikita Bulai
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3'
|
20
|
+
- - "<"
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
22
|
+
version: '5'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3'
|
30
|
+
- - "<"
|
25
31
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
32
|
+
version: '5'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rake
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +50,14 @@ dependencies:
|
|
44
50
|
requirements:
|
45
51
|
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '3.
|
53
|
+
version: '3.9'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
58
|
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: '3.
|
60
|
+
version: '3.9'
|
55
61
|
description: This gem can help your Ruby application to make HTTP(S) requests using
|
56
62
|
proxies by fetching and validating proxy lists from the different providers.
|
57
63
|
email: bulajnikita@gmail.com
|
@@ -88,10 +94,16 @@ files:
|
|
88
94
|
- lib/proxy_fetcher/null_logger.rb
|
89
95
|
- lib/proxy_fetcher/providers/base.rb
|
90
96
|
- lib/proxy_fetcher/providers/free_proxy_list.rb
|
97
|
+
- lib/proxy_fetcher/providers/free_proxy_list_socks.rb
|
91
98
|
- lib/proxy_fetcher/providers/free_proxy_list_ssl.rb
|
92
|
-
- lib/proxy_fetcher/providers/
|
99
|
+
- lib/proxy_fetcher/providers/free_proxy_list_us.rb
|
93
100
|
- lib/proxy_fetcher/providers/http_tunnel.rb
|
101
|
+
- lib/proxy_fetcher/providers/mtpro.rb
|
94
102
|
- lib/proxy_fetcher/providers/proxy_list.rb
|
103
|
+
- lib/proxy_fetcher/providers/proxypedia.rb
|
104
|
+
- lib/proxy_fetcher/providers/proxyscrape_http.rb
|
105
|
+
- lib/proxy_fetcher/providers/proxyscrape_socks4.rb
|
106
|
+
- lib/proxy_fetcher/providers/proxyscrape_socks5.rb
|
95
107
|
- lib/proxy_fetcher/providers/xroxy.rb
|
96
108
|
- lib/proxy_fetcher/proxy.rb
|
97
109
|
- lib/proxy_fetcher/utils/http_client.rb
|
@@ -99,18 +111,15 @@ files:
|
|
99
111
|
- lib/proxy_fetcher/utils/proxy_validator.rb
|
100
112
|
- lib/proxy_fetcher/version.rb
|
101
113
|
- proxy_fetcher.gemspec
|
114
|
+
- spec/fixtures/proxies.txt
|
102
115
|
- spec/proxy_fetcher/client/client_spec.rb
|
103
116
|
- spec/proxy_fetcher/configuration_spec.rb
|
104
117
|
- spec/proxy_fetcher/document/adapters_spec.rb
|
105
118
|
- spec/proxy_fetcher/document/node_spec.rb
|
119
|
+
- spec/proxy_fetcher/manager_spec.rb
|
106
120
|
- spec/proxy_fetcher/providers/base_spec.rb
|
107
|
-
- spec/proxy_fetcher/providers/free_proxy_list_spec.rb
|
108
|
-
- spec/proxy_fetcher/providers/free_proxy_list_ssl_spec.rb
|
109
|
-
- spec/proxy_fetcher/providers/gather_proxy_spec.rb
|
110
|
-
- spec/proxy_fetcher/providers/http_tunnel_spec.rb
|
111
121
|
- spec/proxy_fetcher/providers/multiple_providers_spec.rb
|
112
|
-
- spec/proxy_fetcher/providers/
|
113
|
-
- spec/proxy_fetcher/providers/xroxy_spec.rb
|
122
|
+
- spec/proxy_fetcher/providers/proxy_classes_spec.rb
|
114
123
|
- spec/proxy_fetcher/proxy_spec.rb
|
115
124
|
- spec/proxy_fetcher/version_spec.rb
|
116
125
|
- spec/spec_helper.rb
|
@@ -127,14 +136,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
127
136
|
requirements:
|
128
137
|
- - ">="
|
129
138
|
- !ruby/object:Gem::Version
|
130
|
-
version: 2.
|
139
|
+
version: 2.3.0
|
131
140
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
141
|
requirements:
|
133
142
|
- - ">="
|
134
143
|
- !ruby/object:Gem::Version
|
135
144
|
version: '0'
|
136
145
|
requirements: []
|
137
|
-
|
146
|
+
rubyforge_project:
|
147
|
+
rubygems_version: 2.7.9
|
138
148
|
signing_key:
|
139
149
|
specification_version: 4
|
140
150
|
summary: Ruby gem for dealing with proxy lists from different providers
|