pear_warranty 0.0.1
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 +7 -0
- data/.gitignore +16 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +67 -0
- data/Rakefile +8 -0
- data/lib/pear_warranty.rb +81 -0
- data/lib/pear_warranty/version.rb +3 -0
- data/pear_warranty.gemspec +28 -0
- data/spec/pear_warranty_spec.rb +141 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/support/proxy_error.html +94 -0
- data/spec/support/uncorrect_warranty.html +467 -0
- data/spec/support/with_warranty.html +496 -0
- data/spec/support/without_warranty.html +496 -0
- metadata +149 -0
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
data/Gemfile
ADDED
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,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,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
|
data/spec/spec_helper.rb
ADDED
@@ -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> <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&key=437fd4e09b8b824d&bit=1&fl=norefer">Reload https://selfsolve.apple.com/wcResults.do?sn=[013977000323877,013896000639712]&Continue=Continue&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>
|