pear_warranty 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 086f27db47c2ed6f529fea9454293d5a18bca2e6
4
+ data.tar.gz: 87648ce44ae4fb431961434263cf478c00cec9b2
5
+ SHA512:
6
+ metadata.gz: 7a40fcf34bc2255cba241999f107b0d1ece0a97be9928393bbe93dfc83e63da35dbb0361a51131edb9d5bf3a82624bb7db17b445ec61dd2e626a3264e7c355d1
7
+ data.tar.gz: b472ff190e744f59065edd747dae1460bf5eb3518c133a2b06ffc63909cd73b65e8926a0fbacd2a2dd4a7b30129e5fdee7556d8cf43c67ef7915b080d15f723d
data/.gitignore ADDED
@@ -0,0 +1,16 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ *.gem
15
+ mkmf.log
16
+ /.idea/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pear_warranty.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Roman Kalnytsky
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,67 @@
1
+ # PearWarranty
2
+
3
+ An easy to use simple gem that allow you to check your IPhone warranty information from _https://selfsolve.apple.com_ using your IMEI. One more thing - no GSX account needed.
4
+
5
+ This gem use _https://www.proxfree.com_ to not be banned by IP. That`s why we get a little bit slowly request but there is no another free and simple way to get access to your warranty information.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'pear_warranty'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install pear_warranty
22
+
23
+ ## Usage
24
+
25
+ To get warranty information about your IPhone just call:
26
+ ```
27
+ PearWarranty.check('your IMEI here')
28
+ ```
29
+ That call return hash with warranty information. If your device is out of Repairs and Service Coverage it will return hash:
30
+ ```
31
+ {
32
+ warranty: false,
33
+ date: nil
34
+ }
35
+ ```
36
+ In another situation it returns hash with `true` for `:warranty` key and `Date` object of estimated expiration date for `:date`. If there is error with proxy server or your IMEI hash with `:error` key and description message will be returned.
37
+
38
+ Also your can specify proxy index domain by passing `proxy_index` parameter:
39
+ ```
40
+ PearWarranty.check('your IMEI here', 0)
41
+ ```
42
+ Proxy index must be in range of 0 and `PearWarranty::PROXIES.size`. If it goes out randomly chosen will be used.
43
+
44
+ ## Dependencies
45
+
46
+ - mechanize
47
+ - http-cookie
48
+ - ruby 1.9.2 or newer
49
+
50
+ ## Developers
51
+
52
+ Run all tests with:
53
+ ```
54
+ rspec spec
55
+ ```
56
+
57
+ ## Contributing
58
+
59
+ 1. Fork it ( https://github.com/imdrasil/pear_warranty/fork )
60
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
61
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
62
+ 4. Push to the branch (`git push origin my-new-feature`)
63
+ 5. Create a new Pull Request
64
+
65
+ ## License
66
+
67
+ This gem is distributed under the MIT license. Please see the LICENSE file.
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
7
+ task :test => :spec
8
+
@@ -0,0 +1,81 @@
1
+ require "pear_warranty/version"
2
+ require 'mechanize'
3
+
4
+ module PearWarranty
5
+
6
+ TRIES = 10
7
+ PROXIES = ['qc', 'de', 'al', 'nl', 'fr', 'no', 'tx', 'nj', 'il', 'ga' ]
8
+ COOKIES = {'_ga' => 'GA1.2.343285711.1435218476', '_gat' => '1', 's' => '3fd5f4953c541474c867c23b28853ad2', 'token' => 'acc1de9efdac455d'}
9
+
10
+ def self.check(serial, proxy_index = nil)
11
+ agent = Mechanize.new
12
+ proxy_index ||= rand(COOKIES.size)
13
+ page = nil
14
+ error = true
15
+ TRIES.times do
16
+ form = get_form(proxy_index, "https://selfsolve.apple.com/wcResults.do?sn=#{serial}&Continue=Continue&num=0", agent)
17
+ set_cookie(agent)
18
+ begin
19
+ page = agent.submit(form)
20
+ rescue Net::HTTP::Persistent::Error
21
+ next
22
+ end
23
+ page = page.body
24
+ unless page =~ /pferror/
25
+ error = false
26
+ break
27
+ end
28
+ proxy_index = rand(COOKIES.size)
29
+ end
30
+ if error
31
+ {error: 'Problem with proxy'}
32
+ else
33
+ if page =~ /but this serial number is not valid/
34
+ { error: 'There is no such imei or service is not available at this moment' }
35
+ else
36
+ text = page.split('warrantyPage.warrantycheck.displayPHSupportInfo')[1].scan(/\(.*\)/)[0].delete('()')
37
+ params = text.split(', ')
38
+ warranty = to_boolean(params.first.delete ' ')
39
+ {
40
+ warranty: warranty,
41
+ date: (Date.parse(params[2][/Estimated Expiration Date: (.*)/, 1] + ' ' + params[3][0..3]) if warranty)
42
+ }
43
+ end
44
+ end
45
+ end
46
+
47
+ private
48
+
49
+ def self.get_url(proxy)
50
+ "https://#{PROXIES[proxy] || PROXIES[0]}.proxfree.com/request.php?do=go"
51
+ end
52
+
53
+ def self.to_boolean(str)
54
+ str == 'true'
55
+ end
56
+
57
+ def self.get_form(proxy, value, agent)
58
+ url = get_url(proxy)
59
+ builder = Nokogiri::HTML::Builder.new do |doc|
60
+ doc.form_ :method=>'POST', :action=>url, name: 'main_submission' do
61
+ doc.input :type=>'hidden', :name=>'pfserverDropdown', :value => url
62
+ doc.input :type=>'hidden', :name=>'allowCookies', :value => 'on'
63
+ doc.input :type=>'hidden', :name=>'pfipDropdown', :value => 'default'
64
+ doc.input type: 'text', name: 'get', value: value
65
+ end
66
+ end
67
+ node = Nokogiri::HTML(builder.to_html)
68
+ form = Mechanize::Form.new(node.at('form'), agent)
69
+ form
70
+ end
71
+
72
+ def self.set_cookie(agent)
73
+ COOKIES.each_pair do |k,v|
74
+ cookie = Mechanize::Cookie.new(k, v)
75
+ cookie.domain = '.proxfree.com'
76
+ cookie.path = '/'
77
+ agent.cookie_jar.add(cookie)
78
+ end
79
+ end
80
+
81
+ end
@@ -0,0 +1,3 @@
1
+ module PearWarranty
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'pear_warranty/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "pear_warranty"
8
+ spec.version = PearWarranty::VERSION
9
+ spec.authors = ["Roman Kalnytsky"]
10
+ spec.email = ["moranibaca@gmail.com"]
11
+ spec.summary = %q{Get IPhone warranty information}
12
+ spec.description = %q{Get IPhone warranty information form https://selfsolve.apple.com by device imei}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency 'rspec'
24
+ spec.add_development_dependency 'webmock'
25
+
26
+ spec.add_dependency 'http-cookie'
27
+ spec.add_dependency 'mechanize'
28
+ end
@@ -0,0 +1,141 @@
1
+ require 'rspec'
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe PearWarranty do
5
+ subject(:class1) { PearWarranty }
6
+
7
+ context :to_boolean do
8
+ it 'should return true if argument is "true"'do
9
+ expect(class1.send(:to_boolean, 'true')).to be true
10
+ end
11
+
12
+ it 'should return false with "false" argument' do
13
+ expect(class1.send(:to_boolean, 'false')).to be false
14
+ end
15
+
16
+ it 'should return false with "asd" argument' do
17
+ expect(class1.send(:to_boolean, 'asd')).to be false
18
+ end
19
+ end
20
+
21
+ context :get_url do
22
+ it 'should return correct url for last proxy' do
23
+ expect(class1.send(:get_url, class1::PROXIES.size - 1)).to eq("https://#{class1::PROXIES.last}.proxfree.com/request.php?do=go")
24
+ end
25
+
26
+ it 'should return first url for incorrect proxy index' do
27
+ expect(class1.send(:get_url, class1::PROXIES.size)).to eq("https://#{class1::PROXIES[0]}.proxfree.com/request.php?do=go")
28
+ end
29
+ end
30
+
31
+ context :get_form do
32
+ let(:proxy) { 0 }
33
+ let(:value) { 'value' }
34
+ subject(:form) { class1.send(:get_form, proxy, value, Mechanize.new) }
35
+
36
+ it 'should return Mechanize::Form object' do
37
+ expect(form).to be_instance_of(Mechanize::Form)
38
+ end
39
+
40
+ it 'should return form with correct form attributes' do
41
+ expect([form.action, form.name, form.send(:method)]).to eq([PearWarranty.send(:get_url, proxy), 'main_submission', 'POST'])
42
+ end
43
+
44
+ it 'should return form with important fields' do
45
+ h = 'hidden'
46
+ url = class1.send(:get_url, proxy)
47
+ array = [
48
+ [h, 'pfserverDropdown', url],
49
+ [h, 'allowCookies', 'on'],
50
+ [h, 'pfipDropdown', 'default'],
51
+ ['text', 'get', value]
52
+ ]
53
+ expect(form.fields.map{ |f| [f.type, f.name, f.value] }).to eq(array)
54
+ end
55
+ end
56
+
57
+ context :set_cookie do
58
+ subject(:cookies) {
59
+ agent = Mechanize.new
60
+ class1.send(:set_cookie, agent)
61
+ agent.cookies
62
+ }
63
+ let(:domain) { 'proxfree.com' }
64
+
65
+ it 'should add to agent needed number of cookies' do
66
+ expect(cookies.size).to eq(class1::COOKIES.size)
67
+ end
68
+
69
+ it 'should add cookies with correct domain' do
70
+ expect(cookies.map{ |c| c.domain }).to eq(Array.new(class1::COOKIES.size){ domain })
71
+ end
72
+
73
+ it 'should add cookies with correct path' do
74
+ expect(cookies.map{ |c| c.path }).to eq(Array.new(class1::COOKIES.size){ '/' })
75
+ end
76
+
77
+ it 'should add cookies with correct names and values' do
78
+ values = []
79
+ class1::COOKIES.each_pair{ |k, v| values << [k, v] }
80
+ expect(cookies.map{ |c| [c.name, c.value] }).to eq(values)
81
+ end
82
+ end
83
+
84
+ context :check, type: :request do
85
+ let(:date) { Date.new(2015, 9, 9)}
86
+ before :all do
87
+ @without_imei = '013896000639712'
88
+ @with_imei = '013977000323877'
89
+ @uncorrect_imei = '1a312312312312'
90
+ @fake_imei = 'fake_date_to_reproduse_behaviour'
91
+ @without_params = [@without_imei,'without_warranty']
92
+ @with_params = [@with_imei, 'with_warranty']
93
+ @uncorrect_params = [@uncorrect_imei, 'uncorrect_warranty']
94
+ @fake_params = [@fake_imei, 'proxy_error']
95
+ @default_proxy = 0
96
+ end
97
+
98
+ it 'should use given proxy' do
99
+ mock_request(@default_proxy, *@uncorrect_params)
100
+ class1.check(@uncorrect_imei, @default_proxy)
101
+ expect(WebMock).to have_requested(:post, "https://#{class1::PROXIES[0]}.proxfree.com/request.php?do=go")
102
+ end
103
+
104
+ it 'should use random proxy if no one is given'do
105
+ mock_all_request(@fake_imei,@fake_params[1])
106
+ class1.check(@fake_imei)
107
+ expect(a_request(:post, /https\:\/\/(#{class1::PROXIES.join('|')})\.proxfree\.com\/request\.php\?do=go/)).to have_been_made.times(10)
108
+ end
109
+
110
+ it 'return hash with keys :date and :warranty' do
111
+ mock_request(@default_proxy, *@without_params)
112
+ expect(class1.check(@without_imei, @default_proxy).keys).to include(:warranty, :date)
113
+ end
114
+
115
+ it 'return hash with true for :warranty and correct date for :date for imei with warranty' do
116
+ mock_request(@default_proxy, *@with_params)
117
+ expect(class1.check(@with_imei, @default_proxy)).to include(warranty: true, date: date)
118
+ end
119
+
120
+ it 'return hash with false for :warranty and nil for :date for imei without warranty' do
121
+ mock_request(@default_proxy, *@without_params)
122
+ expect(class1.check(@without_imei, @default_proxy)).to include(warranty: false, date: nil)
123
+ end
124
+
125
+ it 'return hash with :error key and message if there is no such key in service' do
126
+ mock_request(@default_proxy, *@uncorrect_params)
127
+ expect(class1.check(@uncorrect_imei, @default_proxy).keys).to include(:error)
128
+ end
129
+
130
+ it 'should make maximum number of tries if an error is occurred'do
131
+ mock_all_request(@fake_imei,@fake_params[1])
132
+ class1.check(@fake_imei)
133
+ expect(a_request(:post, /https\:\/\/(#{class1::PROXIES.join('|')})\.proxfree\.com\/request\.php\?do=go/)).to have_been_made.times(class1::TRIES)
134
+ end
135
+
136
+ it 'should return hash with :error key if there is problem with proxy'do
137
+ mock_all_request(@fake_imei,@fake_params[1])
138
+ expect(class1.check(@fake_imei).keys).to include(:error)
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,31 @@
1
+ require 'pear_warranty'
2
+ require 'bundler/setup'
3
+ require 'webmock/rspec'
4
+ Bundler.setup
5
+ WebMock.disable_net_connect!
6
+
7
+ def spec_folder
8
+ File.expand_path '..', __FILE__
9
+ end
10
+
11
+ def mock_request(proxy, imei, name)
12
+ proxy_url = "https://#{PearWarranty::PROXIES[proxy]}.proxfree.com/request.php?do=go"
13
+ args = {allowCookies: 'on', pfipDropdown: "default", pfserverDropdown: proxy_url}
14
+ stub_request(:post, proxy_url).
15
+ with(body: args.merge(get: "https://selfsolve.apple.com/wcResults.do?sn=#{imei}&Continue=Continue&num=0")).
16
+ to_return(
17
+ :status => 200,
18
+ :body => File.open(spec_folder + "/support/#{name}.html")
19
+ )
20
+ end
21
+
22
+ def mock_all_request(imei, name, without_body = true)
23
+ if without_body
24
+ stub_request(:post, /https\:\/\/(#{class1::PROXIES.join('|')})\.proxfree\.com\/request\.php\?do=go/).
25
+ to_return(:status => 200, :body => File.open(spec_folder + "/support/#{name}.html"))
26
+ else
27
+ PearWarranty::PROXIES.size.times do |p|
28
+ mock_request(p,imei, name)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,94 @@
1
+ <html lang="en"><!--<![endif]--><head>
2
+ <meta charset="utf-8">
3
+ <meta name="description" content="ProxFree error page.">
4
+ <meta name="keywords" content="proxy,error">
5
+ <title>ProxFree: Error!</title>
6
+
7
+ <link href="//proxfree-nitrad.netdna-ssl.com/assets/style.css?new" rel="stylesheet" type="text/css">
8
+ <link rel="apple-touch-icon" sizes="57x57" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-57x57.png">
9
+ <link rel="apple-touch-icon" sizes="60x60" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-60x60.png">
10
+ <link rel="apple-touch-icon" sizes="72x72" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-72x72.png">
11
+ <link rel="apple-touch-icon" sizes="76x76" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-76x76.png">
12
+ <link rel="apple-touch-icon" sizes="114x114" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-114x114.png">
13
+ <link rel="apple-touch-icon" sizes="120x120" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-120x120.png">
14
+ <link rel="apple-touch-icon" sizes="144x144" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-144x144.png">
15
+ <link rel="apple-touch-icon" sizes="152x152" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-152x152.png">
16
+ <link rel="apple-touch-icon" sizes="180x180" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-180x180.png">
17
+ <link rel="icon" type="image/png" href="//proxfree-nitrad.netdna-ssl.com/favicon-32x32.png" sizes="32x32">
18
+ <link rel="icon" type="image/png" href="//proxfree-nitrad.netdna-ssl.com/android-chrome-192x192.png" sizes="192x192">
19
+ <link rel="icon" type="image/png" href="//proxfree-nitrad.netdna-ssl.com/favicon-96x96.png" sizes="96x96">
20
+ <link rel="icon" type="image/png" href="//proxfree-nitrad.netdna-ssl.com/favicon-16x16.png" sizes="16x16">
21
+ <link rel="manifest" href="//proxfree-nitrad.netdna-ssl.com/manifest.json">
22
+ <link rel="shortcut icon" href="//proxfree-nitrad.netdna-ssl.com/favicon.ico">
23
+ <meta name="msapplication-TileColor" content="#2d89ef">
24
+ <meta name="msapplication-TileImage" content="//proxfree-nitrad.netdna-ssl.com/mstile-144x144.png">
25
+ <meta name="msapplication-config" content="//proxfree-nitrad.netdna-ssl.com/browserconfig.xml">
26
+ <meta name="theme-color" content="#ffffff">
27
+
28
+ <link rel="canonical" href="https://www.proxfree.com/">
29
+ <script async="" src="//www.google-analytics.com/analytics.js"></script><script src="//proxfree-nitrad.netdna-ssl.com/assets/minified.js"></script>
30
+
31
+ <script>
32
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
33
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
34
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
35
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
36
+
37
+ ga('create', 'UA-7540624-50', 'auto');
38
+ ga('send', 'pageview');
39
+ </script>
40
+ </head>
41
+ <body onload="fillpfserverDropdown();">
42
+ <div id="pftop2">
43
+ <div class="pfcenterAlign">
44
+ <a href="/" class="pflogo"></a>
45
+ <ul id="pfmenu">
46
+ <li class="pflft"><span><a href="https://www.proxfree.com/">HOME</a></span></li>
47
+ <li><span><a href="https://www.proxfree.com/facebook-proxy.php">FACEBOOK PROXY</a></span></li>
48
+ <li><span><a href="https://www.proxfree.com/youtube-proxy.php">YOUTUBE PROXY</a></span></li>
49
+ <li><span><a href="https://www.proxfree.com/adult-proxy.php">ADULT PROXY</a></span></li>
50
+ <li class="pfrt"><span><a href="https://www.proxfree.com/faq.php">FAQ</a></span></li>
51
+ </ul>
52
+ <div class="pftopad">
53
+
54
+ </div>
55
+ <h1><span>ProxFree</span> Error!</h1>
56
+ </div>
57
+ </div>
58
+ <div id="pfcontent">
59
+ <div class="pfcenterAlign">
60
+ <div class="pfad2">
61
+ </div>
62
+ <div class="pfleftads">
63
+ <div class="pfad3">
64
+ </div>
65
+ <div class="pfad3">
66
+ </div>
67
+ </div>
68
+ <p class="pferror">The requested resource could not be loaded because the server belonging to the target website returned an error:<br> &nbsp; <b>403 Forbidden</b> (<span class="tooltip" onmouseout="exit()" onmouseover="tooltip('');">?</span>). If you want to contact us about this problem, please copy + paste the full error message and tell us which server location you are using (look in the address bar at the top for fr.proxfree.com, tx.proxfree.com etc). Email: <a href="mailto:contact@proxfree.com">contact@proxfree.com</a></p><p class="pfctx2">[<a href="https://de.proxfree.com/page.php?get=B1iQMHx5y8483ljwgphLtB0czIAOO2rbvPqGO04sopjlFdUDcAUN0kF%2B8EHQXCN5raHR4BG0tiTsYsIINNB%2FC0CtApBcQCnQcL5w7Gps2MKrhtdddfb9BkAzDuSuUkiYmaFA8%2Bj0hqjnCi1mZeR4X5w86KobaVlC1n%2BjgB%2FkZQM5qZ2WPvHERnB1KDtQ6lOwMPb8QdiKoBNPekzhFRAp9g%3D%3D&amp;key=437fd4e09b8b824d&amp;bit=1&amp;fl=norefer">Reload https://selfsolve.apple.com/wcResults.do?sn=[013977000323877,013896000639712]&amp;Continue=Continue&amp;num=0</a>]</p> <p></p>
69
+ <p class="pfctx2"><strong>YOUR server location is de.proxfree.com.</strong>
70
+ </p><p class="pfctx2">If you have any problems or aren't sure about an error, please <a href="/contact.php">contact us</a> and don't forget to say what your server location is.
71
+ </p></div>
72
+ </div>
73
+ <div id="pffooter">
74
+ <div class="pfcenterAlign">
75
+ <p>Copyright © 2011-2015 ProxFree.com all rights reserved</p>
76
+ <ul><li><a href="https://m.proxfree.com/">Mobile</a></li>
77
+ <li class="pfsep">|</li>
78
+ <li><a href="https://www.proxfree.com/proxy/">Proxy</a></li>
79
+ <li class="pfsep">|</li>
80
+ <li><a href="https://www.proxfree.com/privacy-policy.php">Privacy Policy</a></li>
81
+ <li class="pfsep">|</li>
82
+ <li><a href="https://www.proxfree.com/terms.php">Terms of Use</a></li>
83
+ <li class="pfsep">|</li>
84
+ <li><a href="https://www.proxfree.com/faq.php">FAQ </a></li>
85
+ <li class="pfsep">|</li>
86
+ <li><a href="https://www.proxfree.com/contact.php">Contact </a></li>
87
+ <li class="pfsep">|</li>
88
+ <li><a href="https://www.proxfree.com/sitemap.php">Site Map</a></li>
89
+ </ul>
90
+ </div>
91
+ </div>
92
+
93
+
94
+ </body></html>