Version Description
Download this release
Release Info
Developer | mailmunch |
Plugin | MailMunch – Grow your Email List |
Version | 1.4.2 |
Comparing to | |
See all releases |
Code changes from version 1.3.4 to 1.4.2
- css/admin.css +19 -2
- inc/Requests/.coveralls.yml +0 -4
- inc/Requests/.travis.yml +0 -27
- inc/Requests/CHANGELOG.md +0 -48
- inc/Requests/LICENSE +0 -49
- inc/Requests/README.md +0 -143
- inc/Requests/bin/create_pear_package.php +0 -55
- inc/Requests/composer.json +0 -24
- inc/Requests/docs/README.md +0 -28
- inc/Requests/docs/authentication-custom.md +0 -44
- inc/Requests/docs/authentication.md +0 -31
- inc/Requests/docs/goals.md +0 -29
- inc/Requests/docs/hooks.md +0 -92
- inc/Requests/docs/proxy.md +0 -23
- inc/Requests/docs/usage-advanced.md +0 -74
- inc/Requests/docs/usage.md +0 -154
- inc/Requests/docs/why-requests.md +0 -192
- inc/Requests/examples/basic-auth.php +0 -16
- inc/Requests/examples/get.php +0 -13
- inc/Requests/examples/multiple.php +0 -45
- inc/Requests/examples/post.php +0 -13
- inc/Requests/examples/proxy.php +0 -18
- inc/Requests/examples/session.php +0 -24
- inc/Requests/examples/timeout.php +0 -17
- inc/Requests/library/Requests.php +0 -869
- inc/Requests/library/Requests/Auth.php +0 -33
- inc/Requests/library/Requests/Auth/Basic.php +0 -88
- inc/Requests/library/Requests/Cookie.php +0 -374
- inc/Requests/library/Requests/Cookie/Jar.php +0 -158
- inc/Requests/library/Requests/Exception.php +0 -62
- inc/Requests/library/Requests/Exception/HTTP.php +0 -67
- inc/Requests/library/Requests/Exception/HTTP/400.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/401.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/402.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/403.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/404.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/405.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/406.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/407.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/408.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/409.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/410.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/411.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/412.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/413.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/414.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/415.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/416.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/417.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/418.php +0 -29
- inc/Requests/library/Requests/Exception/HTTP/428.php +0 -29
- inc/Requests/library/Requests/Exception/HTTP/429.php +0 -29
- inc/Requests/library/Requests/Exception/HTTP/431.php +0 -29
- inc/Requests/library/Requests/Exception/HTTP/500.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/501.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/502.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/503.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/504.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/505.php +0 -27
- inc/Requests/library/Requests/Exception/HTTP/511.php +0 -29
- inc/Requests/library/Requests/Exception/HTTP/Unknown.php +0 -44
- inc/Requests/library/Requests/Hooker.php +0 -33
- inc/Requests/library/Requests/Hooks.php +0 -61
- inc/Requests/library/Requests/IDNAEncoder.php +0 -390
- inc/Requests/library/Requests/IPv6.php +0 -221
- inc/Requests/library/Requests/IRI.php +0 -1220
- inc/Requests/library/Requests/Proxy.php +0 -35
- inc/Requests/library/Requests/Proxy/HTTP.php +0 -150
- inc/Requests/library/Requests/Response.php +0 -95
- inc/Requests/library/Requests/Response/Headers.php +0 -95
- inc/Requests/library/Requests/SSL.php +0 -151
- inc/Requests/library/Requests/Session.php +0 -258
- inc/Requests/library/Requests/Transport.php +0 -41
- inc/Requests/library/Requests/Transport/cURL.php +0 -372
- inc/Requests/library/Requests/Transport/cacert.pem +0 -3554
- inc/Requests/library/Requests/Transport/fsockopen.php +0 -404
- inc/Requests/library/Requests/Utility/CaseInsensitiveDictionary.php +0 -91
- inc/Requests/library/Requests/Utility/FilteredIterator.php +0 -38
- inc/Requests/package.xml.tpl +0 -60
- inc/Requests/tests/Auth/Basic.php +0 -87
- inc/Requests/tests/ChunkedEncoding.php +0 -68
- inc/Requests/tests/Cookies.php +0 -346
- inc/Requests/tests/Encoding.php +0 -94
- inc/Requests/tests/IDNAEncoder.php +0 -102
- inc/Requests/tests/IRI.php +0 -418
- inc/Requests/tests/Requests.php +0 -148
- inc/Requests/tests/Response/Headers.php +0 -55
- inc/Requests/tests/SSL.php +0 -108
- inc/Requests/tests/Session.php +0 -86
- inc/Requests/tests/Transport/Base.php +0 -683
- inc/Requests/tests/Transport/cURL.php +0 -5
- inc/Requests/tests/Transport/fsockopen.php +0 -5
- inc/Requests/tests/bootstrap.php +0 -139
- inc/Requests/tests/phpunit.xml.dist +0 -35
- inc/common.php +57 -35
- inc/mailmunchapi.php +82 -23
- inc/sidebar_widget.php +131 -0
- js/admin.js +17 -1
- mailmunch.php +270 -164
- readme.txt +11 -5
- uninstall.php +9 -0
css/admin.css
CHANGED
@@ -11,6 +11,23 @@
|
|
11 |
text-decoration: underline;
|
12 |
}
|
13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
#mailmunch_frame {
|
15 |
width: 720px;
|
16 |
height: 650px;
|
@@ -82,7 +99,7 @@
|
|
82 |
border: 1px solid transparent;
|
83 |
border-radius: 4px;
|
84 |
}
|
85 |
-
.alert h4 {
|
86 |
margin-top: 0;
|
87 |
color: inherit;
|
88 |
}
|
@@ -759,4 +776,4 @@ input[type="button"].btn-block {
|
|
759 |
}
|
760 |
.clearfix {
|
761 |
clear: both;
|
762 |
-
}
|
11 |
text-decoration: underline;
|
12 |
}
|
13 |
|
14 |
+
#why-account-btn {
|
15 |
+
cursor: pointer;
|
16 |
+
}
|
17 |
+
|
18 |
+
#why-account h4 {
|
19 |
+
margin-top: 0px;
|
20 |
+
margin-bottom: 0px;
|
21 |
+
}
|
22 |
+
|
23 |
+
#why-account p {
|
24 |
+
margin-top: 0px;
|
25 |
+
}
|
26 |
+
|
27 |
+
.create-account-btn {
|
28 |
+
cursor: pointer;
|
29 |
+
}
|
30 |
+
|
31 |
#mailmunch_frame {
|
32 |
width: 720px;
|
33 |
height: 650px;
|
99 |
border: 1px solid transparent;
|
100 |
border-radius: 4px;
|
101 |
}
|
102 |
+
.alert h4, .alert h3 {
|
103 |
margin-top: 0;
|
104 |
color: inherit;
|
105 |
}
|
776 |
}
|
777 |
.clearfix {
|
778 |
clear: both;
|
779 |
+
}
|
inc/Requests/.coveralls.yml
DELETED
@@ -1,4 +0,0 @@
|
|
1 |
-
src_dir: library
|
2 |
-
coverage_clover: tests/clover.xml
|
3 |
-
json_path: tests/coveralls.json
|
4 |
-
service_name: travis-ci
|
|
|
|
|
|
|
|
inc/Requests/.travis.yml
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
language: php
|
2 |
-
before_script:
|
3 |
-
# Setup Coveralls and httpbin-php
|
4 |
-
- phpenv local 5.5
|
5 |
-
- composer install --dev --no-interaction
|
6 |
-
|
7 |
-
- TESTPHPBIN=$(phpenv which php)
|
8 |
-
- sudo PHPBIN=$TESTPHPBIN vendor/bin/start.sh
|
9 |
-
- export REQUESTS_TEST_HOST_HTTP=localhost
|
10 |
-
- phpenv local --unset
|
11 |
-
|
12 |
-
# Work out of the tests directory
|
13 |
-
- cd tests
|
14 |
-
script:
|
15 |
-
- phpunit --coverage-clover clover.xml
|
16 |
-
after_script:
|
17 |
-
- cd ..
|
18 |
-
- phpenv local 5.5
|
19 |
-
- sudo PATH=$PATH vendor/bin/stop.sh
|
20 |
-
- php vendor/bin/coveralls -v
|
21 |
-
- phpenv local --unset
|
22 |
-
php:
|
23 |
-
- 5.2
|
24 |
-
- 5.3
|
25 |
-
- 5.4
|
26 |
-
- 5.5
|
27 |
-
- hhvm
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/CHANGELOG.md
DELETED
@@ -1,48 +0,0 @@
|
|
1 |
-
Changelog
|
2 |
-
=========
|
3 |
-
|
4 |
-
1.6.0
|
5 |
-
-----
|
6 |
-
- [Add multiple request support][#23] - Send multiple HTTP requests with both
|
7 |
-
fsockopen and cURL, transparently falling back to synchronous when
|
8 |
-
not supported.
|
9 |
-
|
10 |
-
- [Add proxy support][#70] - HTTP proxies are now natively supported via a
|
11 |
-
[high-level API][docs/proxy]. Major props to Ozh for his fantastic work
|
12 |
-
on this.
|
13 |
-
|
14 |
-
- [Verify host name for SSL requests][#63] - Requests is now the first and only
|
15 |
-
standalone HTTP library to fully verify SSL hostnames even with socket
|
16 |
-
connections. Thanks to Michael Adams, Dion Hulse, Jon Cave, and Pádraic Brady
|
17 |
-
for reviewing the crucial code behind this.
|
18 |
-
|
19 |
-
- [Add cookie support][#64] - Adds built-in support for cookies (built entirely
|
20 |
-
as a high-level API)
|
21 |
-
|
22 |
-
- [Add sessions][#62] - To compliment cookies, [sessions][docs/usage-advanced]
|
23 |
-
can be created with a base URL and default options, plus a shared cookie jar.
|
24 |
-
|
25 |
-
- Add [PUT][#1], [DELETE][#3], and [PATCH][#2] request support
|
26 |
-
|
27 |
-
- [Add Composer support][#6] - You can now install Requests via the
|
28 |
-
`rmccue/requests` package on Composer
|
29 |
-
|
30 |
-
[docs/proxy]: http://requests.ryanmccue.info/docs/proxy.html
|
31 |
-
[docs/usage-advanced]: http://requests.ryanmccue.info/docs/usage-advanced.html
|
32 |
-
|
33 |
-
[#1]: https://github.com/rmccue/Requests/issues/1
|
34 |
-
[#2]: https://github.com/rmccue/Requests/issues/2
|
35 |
-
[#3]: https://github.com/rmccue/Requests/issues/3
|
36 |
-
[#6]: https://github.com/rmccue/Requests/issues/6
|
37 |
-
[#9]: https://github.com/rmccue/Requests/issues/9
|
38 |
-
[#23]: https://github.com/rmccue/Requests/issues/23
|
39 |
-
[#62]: https://github.com/rmccue/Requests/issues/62
|
40 |
-
[#63]: https://github.com/rmccue/Requests/issues/63
|
41 |
-
[#64]: https://github.com/rmccue/Requests/issues/64
|
42 |
-
[#70]: https://github.com/rmccue/Requests/issues/70
|
43 |
-
|
44 |
-
[View all changes][https://github.com/rmccue/Requests/compare/v1.5.0...v1.6.0]
|
45 |
-
|
46 |
-
1.5.0
|
47 |
-
-----
|
48 |
-
Initial release!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/LICENSE
DELETED
@@ -1,49 +0,0 @@
|
|
1 |
-
Requests
|
2 |
-
========
|
3 |
-
|
4 |
-
Copyright (c) 2010-2012 Ryan McCue and contributors
|
5 |
-
|
6 |
-
Permission to use, copy, modify, and/or distribute this software for any
|
7 |
-
purpose with or without fee is hereby granted, provided that the above
|
8 |
-
copyright notice and this permission notice appear in all copies.
|
9 |
-
|
10 |
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
11 |
-
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
12 |
-
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
13 |
-
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
14 |
-
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
15 |
-
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
16 |
-
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
17 |
-
|
18 |
-
|
19 |
-
ComplexPie IRI Parser
|
20 |
-
=====================
|
21 |
-
|
22 |
-
Copyright (c) 2007-2010, Geoffrey Sneddon and Steve Minutillo.
|
23 |
-
All rights reserved.
|
24 |
-
|
25 |
-
Redistribution and use in source and binary forms, with or without
|
26 |
-
modification, are permitted provided that the following conditions are met:
|
27 |
-
|
28 |
-
* Redistributions of source code must retain the above copyright notice,
|
29 |
-
this list of conditions and the following disclaimer.
|
30 |
-
|
31 |
-
* Redistributions in binary form must reproduce the above copyright notice,
|
32 |
-
this list of conditions and the following disclaimer in the documentation
|
33 |
-
and/or other materials provided with the distribution.
|
34 |
-
|
35 |
-
* Neither the name of the SimplePie Team nor the names of its contributors
|
36 |
-
may be used to endorse or promote products derived from this software
|
37 |
-
without specific prior written permission.
|
38 |
-
|
39 |
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
40 |
-
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
41 |
-
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
42 |
-
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
|
43 |
-
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
44 |
-
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
45 |
-
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
46 |
-
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
47 |
-
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
48 |
-
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
49 |
-
POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/README.md
DELETED
@@ -1,143 +0,0 @@
|
|
1 |
-
Requests for PHP
|
2 |
-
================
|
3 |
-
|
4 |
-
Requests is a HTTP library written in PHP, for human beings. It is roughly
|
5 |
-
based on the API from the excellent [Requests Python
|
6 |
-
library](http://python-requests.org/). Requests is [ISC
|
7 |
-
Licensed](https://github.com/rmccue/Requests/blob/master/LICENSE) (similar to
|
8 |
-
the new BSD license) and has no dependencies, except for PHP 5.2+.
|
9 |
-
|
10 |
-
Despite PHP's use as a language for the web, its tools for sending HTTP requests
|
11 |
-
are severely lacking. cURL has an
|
12 |
-
[interesting API](http://php.net/manual/en/function.curl-setopt.php), to say the
|
13 |
-
least, and you can't always rely on it being available. Sockets provide only low
|
14 |
-
level access, and require you to build most of the HTTP response parsing
|
15 |
-
yourself.
|
16 |
-
|
17 |
-
We all have better things to do. That's why Requests was born.
|
18 |
-
|
19 |
-
```php
|
20 |
-
$headers = array('Accept' => 'application/json');
|
21 |
-
$options = array('auth' => array('user', 'pass'));
|
22 |
-
$request = Requests::get('https://api.github.com/gists', $headers, $options);
|
23 |
-
|
24 |
-
var_dump($request->status_code);
|
25 |
-
// int(200)
|
26 |
-
|
27 |
-
var_dump($request->headers['content-type']);
|
28 |
-
// string(31) "application/json; charset=utf-8"
|
29 |
-
|
30 |
-
var_dump($request->body);
|
31 |
-
// string(26891) "[...]"
|
32 |
-
```
|
33 |
-
|
34 |
-
Requests allows you to send **HEAD**, **GET**, **POST**, **PUT**, **DELETE**,
|
35 |
-
and **PATCH** HTTP requests. You can add headers, form data, multipart files,
|
36 |
-
and parameters with simple arrays, and access the response data in the same way.
|
37 |
-
Requests uses cURL and fsockopen, depending on what your system has available,
|
38 |
-
but abstracts all the nasty stuff out of your way, providing a consistent API.
|
39 |
-
|
40 |
-
|
41 |
-
Features
|
42 |
-
--------
|
43 |
-
|
44 |
-
- International Domains and URLs
|
45 |
-
- Browser-style SSL Verification
|
46 |
-
- Basic/Digest Authentication
|
47 |
-
- Automatic Decompression
|
48 |
-
- Connection Timeouts
|
49 |
-
|
50 |
-
|
51 |
-
Installation
|
52 |
-
------------
|
53 |
-
|
54 |
-
### Install with Composer
|
55 |
-
If you're using [Composer](https://github.com/composer/composer) to manage
|
56 |
-
dependencies, you can add Requests with it.
|
57 |
-
|
58 |
-
{
|
59 |
-
"require": {
|
60 |
-
"rmccue/requests": ">=1.0"
|
61 |
-
}
|
62 |
-
}
|
63 |
-
|
64 |
-
### Install source from GitHub
|
65 |
-
To install the source code:
|
66 |
-
|
67 |
-
$ git clone git://github.com/rmccue/Requests.git
|
68 |
-
|
69 |
-
And include it in your scripts:
|
70 |
-
|
71 |
-
require_once '/path/to/Requests/library/Requests.php';
|
72 |
-
|
73 |
-
You'll probably also want to register an autoloader:
|
74 |
-
|
75 |
-
Requests::register_autoloader();
|
76 |
-
|
77 |
-
|
78 |
-
### Install source from zip/tarball
|
79 |
-
Alternatively, you can fetch a [tarball][] or [zipball][]:
|
80 |
-
|
81 |
-
$ curl -L https://github.com/rmccue/Requests/tarball/master | tar xzv
|
82 |
-
(or)
|
83 |
-
$ wget https://github.com/rmccue/Requests/tarball/master -O - | tar xzv
|
84 |
-
|
85 |
-
[tarball]: https://github.com/rmccue/Requests/tarball/master
|
86 |
-
[zipball]: https://github.com/rmccue/Requests/zipball/master
|
87 |
-
|
88 |
-
|
89 |
-
### Using a Class Loader
|
90 |
-
If you're using a class loader (e.g., [Symfony Class Loader][]) for
|
91 |
-
[PSR-0][]-style class loading:
|
92 |
-
|
93 |
-
$loader->registerPrefix('Requests', 'path/to/vendor/Requests/library');
|
94 |
-
|
95 |
-
[Symfony Class Loader]: https://github.com/symfony/ClassLoader
|
96 |
-
[PSR-0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
|
97 |
-
|
98 |
-
|
99 |
-
Documentation
|
100 |
-
-------------
|
101 |
-
The best place to start is our [prose-based documentation][], which will guide
|
102 |
-
you through using Requests.
|
103 |
-
|
104 |
-
After that, take a look at [the documentation for
|
105 |
-
`Requests::request()`][request_method], where all the parameters are fully
|
106 |
-
documented.
|
107 |
-
|
108 |
-
Requests is [100% documented with PHPDoc](http://requests.ryanmccue.info/api/).
|
109 |
-
If you find any problems with it, [create a new
|
110 |
-
issue](https://github.com/rmccue/Requests/issues/new)!
|
111 |
-
|
112 |
-
[prose-based documentation]: https://github.com/rmccue/Requests/blob/master/docs/README.md
|
113 |
-
[request_method]: http://requests.ryanmccue.info/api/class-Requests.html#_request
|
114 |
-
|
115 |
-
Testing
|
116 |
-
-------
|
117 |
-
[![Build Status](https://secure.travis-ci.org/rmccue/Requests.png?branch=master)](http://travis-ci.org/rmccue/Requests)
|
118 |
-
[![Coverage Status](https://coveralls.io/repos/rmccue/Requests/badge.png?branch=master)][coveralls]
|
119 |
-
|
120 |
-
Requests strives to have 100% code-coverage of the library with an extensive
|
121 |
-
set of tests. We're not quite there yet, but [we're getting close][coveralls].
|
122 |
-
|
123 |
-
[coveralls]: https://coveralls.io/r/rmccue/Requests?branch=master
|
124 |
-
|
125 |
-
To run the test suite, simply:
|
126 |
-
|
127 |
-
$ cd tests
|
128 |
-
$ phpunit
|
129 |
-
|
130 |
-
If you'd like to run a single set of tests, specify just the name:
|
131 |
-
|
132 |
-
$ phpunit Transport/cURL
|
133 |
-
|
134 |
-
Contribute
|
135 |
-
----------
|
136 |
-
|
137 |
-
1. Check for open issues or open a new issue for a feature request or a bug
|
138 |
-
2. Fork [the repository][] on Github to start making your changes to the
|
139 |
-
`master` branch (or branch off of it)
|
140 |
-
3. Write a test which shows that the bug was fixed or that the feature works as expected
|
141 |
-
4. Send a pull request and bug me until I merge it
|
142 |
-
|
143 |
-
[the repository]: https://github.com/rmccue/Requests
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/bin/create_pear_package.php
DELETED
@@ -1,55 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* PEAR package builder
|
4 |
-
*
|
5 |
-
* Inspired by Twig's create_pear_package.php.
|
6 |
-
* @link https://raw.github.com/fabpot/Twig/master/bin/create_pear_package.php
|
7 |
-
* @author Twig Team
|
8 |
-
* @license BSD license
|
9 |
-
*/
|
10 |
-
|
11 |
-
if (!isset($argv[1]) || $argv[1] === '-h' || $argv[1] === '--help') {
|
12 |
-
echo 'usage: php ' . $argv[0] . ' <version> <stability>' . PHP_EOL;
|
13 |
-
echo PHP_EOL;
|
14 |
-
echo ' version:' . PHP_EOL;
|
15 |
-
echo ' Version of the package, in the form of major.minor.bug' . PHP_EOL;
|
16 |
-
echo PHP_EOL;
|
17 |
-
echo ' stability:' . PHP_EOL;
|
18 |
-
echo ' One of alpha, beta, stable' . PHP_EOL;
|
19 |
-
die();
|
20 |
-
}
|
21 |
-
|
22 |
-
if (!isset($argv[2])) {
|
23 |
-
die('You must provide the stability (alpha, beta, or stable)');
|
24 |
-
}
|
25 |
-
|
26 |
-
$context = array(
|
27 |
-
'date' => gmdate('Y-m-d'),
|
28 |
-
'time' => gmdate('H:m:00'),
|
29 |
-
'version' => $argv[1],
|
30 |
-
'api_version' => $argv[1],
|
31 |
-
'stability' => $argv[2],
|
32 |
-
'api_stability' => $argv[2],
|
33 |
-
);
|
34 |
-
|
35 |
-
$context['files'] = '';
|
36 |
-
$path = realpath(dirname(__FILE__).'/../library/Requests');
|
37 |
-
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::LEAVES_ONLY) as $file) {
|
38 |
-
if (preg_match('/\.php$/', $file)) {
|
39 |
-
$name = str_replace($path . DIRECTORY_SEPARATOR, '', $file);
|
40 |
-
$name = str_replace(DIRECTORY_SEPARATOR, '/', $name);
|
41 |
-
$context['files'][] = "\t\t\t\t\t" . '<file install-as="Requests/' . $name . '" name="' . $name . '" role="php" />';
|
42 |
-
}
|
43 |
-
}
|
44 |
-
|
45 |
-
$context['files'] = implode("\n", $context['files']);
|
46 |
-
|
47 |
-
$template = file_get_contents(dirname(__FILE__).'/../package.xml.tpl');
|
48 |
-
$content = preg_replace_callback('/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/', 'replace_parameters', $template);
|
49 |
-
file_put_contents(dirname(__FILE__).'/../package.xml', $content);
|
50 |
-
|
51 |
-
function replace_parameters($matches) {
|
52 |
-
global $context;
|
53 |
-
|
54 |
-
return isset($context[$matches[1]]) ? $context[$matches[1]] : null;
|
55 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/composer.json
DELETED
@@ -1,24 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"name": "rmccue/requests",
|
3 |
-
"description": "A HTTP library written in PHP, for human beings.",
|
4 |
-
"homepage": "http://github.com/rmccue/Requests",
|
5 |
-
"license": "ISC",
|
6 |
-
"keywords": ["http", "idna", "iri", "ipv6", "curl", "sockets", "fsockopen"],
|
7 |
-
"authors": [
|
8 |
-
{
|
9 |
-
"name": "Ryan McCue",
|
10 |
-
"homepage": "http://ryanmccue.info"
|
11 |
-
}
|
12 |
-
],
|
13 |
-
"require": {
|
14 |
-
"php": ">=5.2"
|
15 |
-
},
|
16 |
-
"require-dev": {
|
17 |
-
"satooshi/php-coveralls": "dev-master",
|
18 |
-
"requests/test-server": "dev-master"
|
19 |
-
},
|
20 |
-
"type": "library",
|
21 |
-
"autoload": {
|
22 |
-
"psr-0": {"Requests": "library/"}
|
23 |
-
}
|
24 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/docs/README.md
DELETED
@@ -1,28 +0,0 @@
|
|
1 |
-
Documentation
|
2 |
-
=============
|
3 |
-
|
4 |
-
If you're here, you're looking for documentation for Requests! The documents
|
5 |
-
here are prose; you might also want to check out the [API documentation][].
|
6 |
-
|
7 |
-
[API documentation]: http://requests.ryanmccue.info/api/
|
8 |
-
|
9 |
-
* Introduction
|
10 |
-
* [Goals][goals]
|
11 |
-
* [Why should I use Requests instead of X?][why-requests]
|
12 |
-
* Usage
|
13 |
-
* [Making a request][usage]
|
14 |
-
* [Advanced usage][usage-advanced]
|
15 |
-
* [Authenticating your request][authentication]
|
16 |
-
* Advanced Usage
|
17 |
-
* [Custom authentication][authentication-custom]
|
18 |
-
* [Requests through proxy][proxy]
|
19 |
-
* [Hooking system][hooks]
|
20 |
-
|
21 |
-
[goals]: goals.md
|
22 |
-
[why-requests]: why-requests.md
|
23 |
-
[usage]: usage.md
|
24 |
-
[usage-advanced]: usage-advanced.md
|
25 |
-
[authentication]: authentication.md
|
26 |
-
[authentication-custom]: authentication-custom.md
|
27 |
-
[hooks]: hooks.md
|
28 |
-
[proxy]: proxy.md
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/docs/authentication-custom.md
DELETED
@@ -1,44 +0,0 @@
|
|
1 |
-
Custom Authentication
|
2 |
-
=====================
|
3 |
-
Custom authentication handlers are designed to be extremely simple to write.
|
4 |
-
In order to write a handler, you'll need to implement the `Requests_Auth`
|
5 |
-
interface.
|
6 |
-
|
7 |
-
An instance of this handler is then passed in by the user via the `auth`
|
8 |
-
option, just like for normal authentication.
|
9 |
-
|
10 |
-
Let's say we have a HTTP endpoint that checks for the `Hotdog` header and
|
11 |
-
authenticates you if said header is set to `Yummy`. (I don't know of any
|
12 |
-
services that do this; perhaps this is a market waiting to be tapped?)
|
13 |
-
|
14 |
-
```php
|
15 |
-
class MySoftware_Auth_Hotdog implements Requests_Auth {
|
16 |
-
protected $password;
|
17 |
-
|
18 |
-
public function __construct($password) {
|
19 |
-
$this->password = $password;
|
20 |
-
}
|
21 |
-
|
22 |
-
public function register(Requests_Hooks &$hooks) {
|
23 |
-
$hooks->register('requests.before_request', array(&$this, 'before_request'));
|
24 |
-
}
|
25 |
-
|
26 |
-
public function before_request(&$url, &$headers, &$data, &$type, &$options) {
|
27 |
-
$headers['Hotdog'] = $this->password;
|
28 |
-
}
|
29 |
-
}
|
30 |
-
```
|
31 |
-
|
32 |
-
We then use this in our request calls:
|
33 |
-
|
34 |
-
```
|
35 |
-
$options = array(
|
36 |
-
'auth' => new MySoftware_Auth_Hotdog('yummy')
|
37 |
-
);
|
38 |
-
$response = Requests::get('http://hotdogbin.org/admin', array(), $options);
|
39 |
-
```
|
40 |
-
|
41 |
-
(For more information on how to register and use hooks, see the [hooking
|
42 |
-
system documentation][hooks])
|
43 |
-
|
44 |
-
[hooks]: hooks.md
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/docs/authentication.md
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
Authentication
|
2 |
-
==============
|
3 |
-
Many requests that you make will require authentication of some type. Requests
|
4 |
-
includes support out of the box for HTTP Basic authentication, with more
|
5 |
-
built-ins coming soon.
|
6 |
-
|
7 |
-
Making a Basic authenticated call is ridiculously easy:
|
8 |
-
|
9 |
-
```php
|
10 |
-
$options = array(
|
11 |
-
'auth' => new Requests_Auth_Basic(array('user', 'password'))
|
12 |
-
);
|
13 |
-
Requests::get('http://httpbin.org/basic-auth/user/password', array(), $options);
|
14 |
-
```
|
15 |
-
|
16 |
-
As Basic authentication is usually what you want when you specify a username
|
17 |
-
and password, you can also just pass in an array as a shorthand:
|
18 |
-
|
19 |
-
```php
|
20 |
-
$options = array(
|
21 |
-
'auth' => array('user', 'password')
|
22 |
-
);
|
23 |
-
Requests::get('http://httpbin.org/basic-auth/user/password', array(), $options);
|
24 |
-
```
|
25 |
-
|
26 |
-
Note that POST/PUT can also take a data parameter, so you also need that
|
27 |
-
before `$options`:
|
28 |
-
|
29 |
-
```php
|
30 |
-
Requests::post('http://httpbin.org/basic-auth/user/password', array(), null, $options);
|
31 |
-
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/docs/goals.md
DELETED
@@ -1,29 +0,0 @@
|
|
1 |
-
Goals
|
2 |
-
=====
|
3 |
-
|
4 |
-
1. **Simple interface**
|
5 |
-
|
6 |
-
Requests is designed to provide a simple, unified interface to making
|
7 |
-
requests, regardless of what is available on the system. This means not worrying.
|
8 |
-
|
9 |
-
2. **Fully tested code**
|
10 |
-
|
11 |
-
Requests strives to have 90%+ code coverage from the unit tests, aiming for
|
12 |
-
the ideal 100%. Introducing new features always means introducing new tests
|
13 |
-
|
14 |
-
(Note: some parts of the code are not covered by design. These sections are
|
15 |
-
marked with `@codeCoverageIgnore` tags)
|
16 |
-
|
17 |
-
3. **Maximum compatibility**
|
18 |
-
|
19 |
-
No matter what you have installed on your system, you should be able to run
|
20 |
-
Requests. We use cURL if it's available, and fallback to sockets otherwise.
|
21 |
-
We require only a baseline of PHP 5.2, leaving the choice of PHP minimum
|
22 |
-
requirement fully in your hands, and giving you the ability to support many
|
23 |
-
more hosts.
|
24 |
-
|
25 |
-
4. **No dependencies**
|
26 |
-
|
27 |
-
Requests is designed to be entirely self-contained and doesn't require
|
28 |
-
anything else at all. You can run Requests on an entirely stock PHP build
|
29 |
-
without any additional extensions outside the standard library.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/docs/hooks.md
DELETED
@@ -1,92 +0,0 @@
|
|
1 |
-
Hooks
|
2 |
-
=====
|
3 |
-
Requests has a hook system that you can use to manipulate parts of the request
|
4 |
-
process along with internal transport hooks.
|
5 |
-
|
6 |
-
Check out the [API documentation for `Requests_Hooks`][requests_hooks] for more
|
7 |
-
information on how to use the hook system.
|
8 |
-
|
9 |
-
Available Hooks
|
10 |
-
---------------
|
11 |
-
|
12 |
-
* `requests.before_request`
|
13 |
-
|
14 |
-
Alter the request before it's sent to the transport.
|
15 |
-
|
16 |
-
Parameters: `string &$url`, `array &$headers`, `array|string &$data`,
|
17 |
-
`string &$type`, `array &$options`
|
18 |
-
|
19 |
-
* `requests.before_parse`
|
20 |
-
|
21 |
-
Alter the raw HTTP response before parsing
|
22 |
-
|
23 |
-
Parameters: `string &$response`
|
24 |
-
|
25 |
-
* `requests.after_request`
|
26 |
-
|
27 |
-
Alter the response object before it's returned to the user
|
28 |
-
|
29 |
-
Parameters: `Requests_Response &$return`
|
30 |
-
|
31 |
-
* `curl.before_request`
|
32 |
-
|
33 |
-
Set cURL options before the transport sets any (note that Requests may
|
34 |
-
override these)
|
35 |
-
|
36 |
-
Parameters: `cURL resource &$fp`
|
37 |
-
|
38 |
-
* `curl.before_send`
|
39 |
-
|
40 |
-
Set cURL options just before the request is actually sent via `curl_exec`
|
41 |
-
|
42 |
-
Parameters: `cURL resource &$fp`
|
43 |
-
|
44 |
-
* `curl.after_request`
|
45 |
-
|
46 |
-
Alter the raw HTTP response before returning for parsing
|
47 |
-
|
48 |
-
Parameters: `string &$response`
|
49 |
-
|
50 |
-
* `fsockopen.before_request`
|
51 |
-
|
52 |
-
Run events before the transport does anything
|
53 |
-
|
54 |
-
* `fsockopen.after_headers`
|
55 |
-
|
56 |
-
Add extra headers before the body begins (i.e. before `\r\n\r\n`)
|
57 |
-
|
58 |
-
Parameters: `string &$out`
|
59 |
-
|
60 |
-
* `fsockopen.before_send`
|
61 |
-
|
62 |
-
Add body data before sending the request
|
63 |
-
|
64 |
-
Parameters: `string &$out`
|
65 |
-
|
66 |
-
* `fsockopen.after_send`
|
67 |
-
|
68 |
-
Run events after writing the data to the socket
|
69 |
-
|
70 |
-
* `fsockopen.after_request`
|
71 |
-
|
72 |
-
Alter the raw HTTP response before returning for parsing
|
73 |
-
|
74 |
-
Parameters: `string &$response`
|
75 |
-
|
76 |
-
|
77 |
-
Registering Hooks
|
78 |
-
-----------------
|
79 |
-
Note: if you're doing this in an authentication handler, see the [Custom
|
80 |
-
Authentication guide][authentication-custom] instead.
|
81 |
-
|
82 |
-
[authentication-custom]: authentication-custom.md
|
83 |
-
|
84 |
-
In order to register your own hooks, you need to instantiate `Requests_hooks`
|
85 |
-
and pass this in via the 'hooks' option.
|
86 |
-
|
87 |
-
```php
|
88 |
-
$hooks = new Requests_Hooks();
|
89 |
-
$hooks->register('requests.after_request', 'mycallback');
|
90 |
-
|
91 |
-
$request = Requests::get('http://httpbin.org/get', array(), array('hooks' => $hooks));
|
92 |
-
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/docs/proxy.md
DELETED
@@ -1,23 +0,0 @@
|
|
1 |
-
Proxy Support
|
2 |
-
=============
|
3 |
-
|
4 |
-
You can easily make requests through HTTP proxies.
|
5 |
-
|
6 |
-
To make requests through an open proxy, specify the following options:
|
7 |
-
|
8 |
-
```php
|
9 |
-
$options = array(
|
10 |
-
'proxy' => '127.0.0.1:3128'
|
11 |
-
);
|
12 |
-
Requests::get('http://httpbin.org/ip', array(), $options);
|
13 |
-
```
|
14 |
-
|
15 |
-
If your proxy needs you to authenticate, the option will become an array like
|
16 |
-
the following:
|
17 |
-
|
18 |
-
```php
|
19 |
-
$options = array(
|
20 |
-
'proxy' => array( '127.0.0.1:3128', 'my_username', 'my_password' )
|
21 |
-
);
|
22 |
-
Requests::get('http://httpbin.org/ip', array(), $options);
|
23 |
-
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/docs/usage-advanced.md
DELETED
@@ -1,74 +0,0 @@
|
|
1 |
-
Advanced Usage
|
2 |
-
==============
|
3 |
-
|
4 |
-
Session Handling
|
5 |
-
----------------
|
6 |
-
Making multiple requests to the same site with similar options can be a pain,
|
7 |
-
since you end up repeating yourself. The Session object can be used to set
|
8 |
-
default parameters for these.
|
9 |
-
|
10 |
-
Let's simulate communicating with GitHub.
|
11 |
-
|
12 |
-
```php
|
13 |
-
$session = new Requests_Session('https://api.github.com/');
|
14 |
-
$session->headers['X-ContactAuthor'] = 'rmccue';
|
15 |
-
$session->useragent = 'My-Awesome-App';
|
16 |
-
|
17 |
-
$response = $session->get('/zen');
|
18 |
-
```
|
19 |
-
|
20 |
-
You can use the `url`, `headers`, `data` and `options` properties of the Session
|
21 |
-
object to set the defaults for this session, and the constructor also takes
|
22 |
-
parameters in the same order as `Requests::request()`. Accessing any other
|
23 |
-
properties will set the corresponding key in the options array; that is:
|
24 |
-
|
25 |
-
```php
|
26 |
-
// Setting the property...
|
27 |
-
$session->useragent = 'My-Awesome-App';
|
28 |
-
|
29 |
-
// ...is the same as setting the option
|
30 |
-
$session->options['useragent'] = 'My-Awesome-App';
|
31 |
-
```
|
32 |
-
|
33 |
-
|
34 |
-
Secure Requests with SSL
|
35 |
-
------------------------
|
36 |
-
By default, HTTPS requests will use the most secure options available:
|
37 |
-
|
38 |
-
```php
|
39 |
-
$response = Requests::get('https://httpbin.org/');
|
40 |
-
```
|
41 |
-
|
42 |
-
Requests bundles certificates from the [Mozilla certificate authority list][],
|
43 |
-
which is the same list of root certificates used in most browsers. If you're
|
44 |
-
accessing sites with certificates from other CAs, or self-signed certificates,
|
45 |
-
you can point Requests to a custom CA list in PEM form (the same format
|
46 |
-
accepted by cURL and OpenSSL):
|
47 |
-
|
48 |
-
```php
|
49 |
-
$options = array(
|
50 |
-
'verify' => '/path/to/cacert.pem'
|
51 |
-
);
|
52 |
-
$response = Requests::get('https://httpbin.org/', array(), $options);
|
53 |
-
```
|
54 |
-
|
55 |
-
Alternatively, if you want to disable verification completely, this is possible
|
56 |
-
with `'verify' => false`, but note that this is extremely insecure and should be
|
57 |
-
avoided.
|
58 |
-
|
59 |
-
### Security Note
|
60 |
-
Requests supports SSL across both cURL and fsockopen in a transparent manner.
|
61 |
-
Unlike other PHP HTTP libraries, support for verifying the certificate name is
|
62 |
-
built-in; that is, a request for `https://github.com/` will actually verify the
|
63 |
-
certificate's name even with the fsockopen transport. This makes Requests the
|
64 |
-
first and currently only PHP HTTP library that supports full SSL verification.
|
65 |
-
|
66 |
-
(Note that WordPress now also supports this verification, thanks to efforts by
|
67 |
-
the Requests development team.)
|
68 |
-
|
69 |
-
(See also the [related PHP][php-bug-47030] and [OpenSSL-related][php-bug-55820]
|
70 |
-
bugs in PHP for more information on Subject Alternate Name field.)
|
71 |
-
|
72 |
-
[Mozilla certificate authority list]: http://www.mozilla.org/projects/security/certs/
|
73 |
-
[php-bug-47030]: https://bugs.php.net/bug.php?id=47030
|
74 |
-
[php-bug-55820]:https://bugs.php.net/bug.php?id=55820
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/docs/usage.md
DELETED
@@ -1,154 +0,0 @@
|
|
1 |
-
Usage
|
2 |
-
=====
|
3 |
-
|
4 |
-
Ready to go? Make sure you have Requests installed before attempting any of the
|
5 |
-
steps in this guide.
|
6 |
-
|
7 |
-
|
8 |
-
Loading Requests
|
9 |
-
----------------
|
10 |
-
Before we can load Requests up, we'll need to make sure it's loaded. This is a
|
11 |
-
simple two-step:
|
12 |
-
|
13 |
-
```php
|
14 |
-
// First, include Requests
|
15 |
-
include('/path/to/library/Requests.php');
|
16 |
-
|
17 |
-
// Next, make sure Requests can load internal classes
|
18 |
-
Requests::register_autoloader();
|
19 |
-
```
|
20 |
-
|
21 |
-
If you'd like to bring along your own autoloader, you can forget about this
|
22 |
-
completely.
|
23 |
-
|
24 |
-
|
25 |
-
Make a GET Request
|
26 |
-
------------------
|
27 |
-
One of the most basic things you can do with HTTP is make a GET request.
|
28 |
-
|
29 |
-
Let's grab GitHub's public timeline:
|
30 |
-
|
31 |
-
```php
|
32 |
-
$response = Requests::get('https://github.com/timeline.json');
|
33 |
-
```
|
34 |
-
|
35 |
-
`$response` is now a **Requests_Response** object. Response objects are what
|
36 |
-
you'll be working with whenever you want to get data back from your request.
|
37 |
-
|
38 |
-
|
39 |
-
Using the Response Object
|
40 |
-
-------------------------
|
41 |
-
Now that we have the response from GitHub, let's get the body of the response.
|
42 |
-
|
43 |
-
```php
|
44 |
-
var_dump($response->body);
|
45 |
-
// string(42865) "[{"repository":{"url":"...
|
46 |
-
```
|
47 |
-
|
48 |
-
|
49 |
-
Custom Headers
|
50 |
-
--------------
|
51 |
-
If you want to add custom headers to the request, simply pass them in as an
|
52 |
-
associative array as the second parameter:
|
53 |
-
|
54 |
-
```php
|
55 |
-
$response = Requests::get('https://github.com/timeline.json', array('X-Requests' => 'Is Awesome!'));
|
56 |
-
```
|
57 |
-
|
58 |
-
|
59 |
-
Make a POST Request
|
60 |
-
-------------------
|
61 |
-
Making a POST request is very similar to making a GET:
|
62 |
-
|
63 |
-
```php
|
64 |
-
$response = Requests::post('http://httpbin.org/post');
|
65 |
-
```
|
66 |
-
|
67 |
-
You'll probably also want to pass in some data. You can pass in either a
|
68 |
-
string, an array or an object (Requests uses [`http_build_query`][build_query]
|
69 |
-
internally) as the third parameter (after the URL and headers):
|
70 |
-
|
71 |
-
[build_query]: http://php.net/http_build_query
|
72 |
-
|
73 |
-
```php
|
74 |
-
$data = array('key1' => 'value1', 'key2' => 'value2');
|
75 |
-
$response = Requests::post('http://httpbin.org/post', array(), $data);
|
76 |
-
var_dump($response->body);
|
77 |
-
```
|
78 |
-
|
79 |
-
This gives the output:
|
80 |
-
|
81 |
-
string(503) "{
|
82 |
-
"origin": "124.191.162.147",
|
83 |
-
"files": {},
|
84 |
-
"form": {
|
85 |
-
"key2": "value2",
|
86 |
-
"key1": "value1"
|
87 |
-
},
|
88 |
-
"headers": {
|
89 |
-
"Content-Length": "23",
|
90 |
-
"Accept-Encoding": "deflate;q=1.0, compress;q=0.5, gzip;q=0.5",
|
91 |
-
"X-Forwarded-Port": "80",
|
92 |
-
"Connection": "keep-alive",
|
93 |
-
"User-Agent": "php-requests/1.6-dev",
|
94 |
-
"Host": "httpbin.org",
|
95 |
-
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
|
96 |
-
},
|
97 |
-
"url": "http://httpbin.org/post",
|
98 |
-
"args": {},
|
99 |
-
"data": ""
|
100 |
-
}"
|
101 |
-
|
102 |
-
To send raw data, simply pass in a string instead. You'll probably also want to
|
103 |
-
set the Content-Type header to ensure the remote server knows what you're
|
104 |
-
sending it:
|
105 |
-
|
106 |
-
```php
|
107 |
-
$url = 'https://api.github.com/some/endpoint';
|
108 |
-
$headers = array('Content-Type' => 'application/json');
|
109 |
-
$data = array('some' => 'data');
|
110 |
-
$response = Requests::post($url, $headers, json_encode($data));
|
111 |
-
```
|
112 |
-
|
113 |
-
Note that if you don't manually specify a Content-Type header, Requests has
|
114 |
-
undefined behaviour for the header. It may be set to various values depending
|
115 |
-
on the internal execution path, so it's recommended to set this explicitly if
|
116 |
-
you need to.
|
117 |
-
|
118 |
-
|
119 |
-
Status Codes
|
120 |
-
------------
|
121 |
-
The Response object also gives you access to the status code:
|
122 |
-
|
123 |
-
```php
|
124 |
-
var_dump($response->status_code);
|
125 |
-
// int(200)
|
126 |
-
```
|
127 |
-
|
128 |
-
You can also easily check if this status code is a success code, or if it's an
|
129 |
-
error:
|
130 |
-
|
131 |
-
```php
|
132 |
-
var_dump($response->success);
|
133 |
-
// bool(true)
|
134 |
-
```
|
135 |
-
|
136 |
-
|
137 |
-
Response Headers
|
138 |
-
----------------
|
139 |
-
We can also grab headers pretty easily:
|
140 |
-
|
141 |
-
```php
|
142 |
-
var_dump($response->headers['Date']);
|
143 |
-
// string(29) "Thu, 09 Feb 2012 15:22:06 GMT"
|
144 |
-
```
|
145 |
-
|
146 |
-
Note that this is case-insensitive, so the following are all equivalent:
|
147 |
-
|
148 |
-
* `$response->headers['Date']`
|
149 |
-
* `$response->headers['date']`
|
150 |
-
* `$response->headers['DATE']`
|
151 |
-
* `$response->headers['dAtE']`
|
152 |
-
|
153 |
-
If a header isn't set, this will give `null`. You can also check with
|
154 |
-
`isset($response->headers['date'])`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/docs/why-requests.md
DELETED
@@ -1,192 +0,0 @@
|
|
1 |
-
Why Requests Instead of X?
|
2 |
-
==========================
|
3 |
-
This is a quick look at why you should use Requests instead of another
|
4 |
-
solution. Keep in mind though that these are my point of view, and they may not
|
5 |
-
be issues for you.
|
6 |
-
|
7 |
-
As always with software, you should choose what you think is best.
|
8 |
-
|
9 |
-
|
10 |
-
Why should I use Requests?
|
11 |
-
--------------------------
|
12 |
-
1. **Designed for maximum compatibility**
|
13 |
-
|
14 |
-
The realities of working with widely deployable software mean that awesome
|
15 |
-
PHP features aren't always available. PHP 5.3, cURL, OpenSSL and more are not
|
16 |
-
necessarily going to be available on every system. While you're welcome to
|
17 |
-
require PHP 5.3, 5.4 or even 5.5, it's not our job to force you to use those.
|
18 |
-
|
19 |
-
(The WordPress project estimates [about 60%][wpstats] of hosts are running
|
20 |
-
PHP 5.2, so this is a serious issue for developers working on large
|
21 |
-
deployable projects.)
|
22 |
-
|
23 |
-
Don't worry though, Requests will automatically use better features where
|
24 |
-
possible, giving you an extra speed boost with cURL.
|
25 |
-
|
26 |
-
2. **Simple API**
|
27 |
-
|
28 |
-
Requests' API is designed to be able to be learnt in 10 minutes. Everything
|
29 |
-
from basic requests all the way up to advanced usage involving custom SSL
|
30 |
-
certificates and stored cookies is handled by a simple API.
|
31 |
-
|
32 |
-
Other HTTP libraries optimize for the library developer's time; **Requests
|
33 |
-
optimizes for your time**.
|
34 |
-
|
35 |
-
3. **Thoroughly tested**
|
36 |
-
|
37 |
-
Requests is [continuously integrated with Travis][travis] and test coverage
|
38 |
-
is [constantly monitored with Coveralls][coveralls] to give you confidence in
|
39 |
-
the library. We aim for test coverage **over 90%** at all times, and new
|
40 |
-
features require new tests to go along with them. This ensures that you can
|
41 |
-
be confident in the quality of the code, as well as being able to update to
|
42 |
-
the latest version of Requests without worrying about compatibility.
|
43 |
-
|
44 |
-
4. **Secure by default**
|
45 |
-
|
46 |
-
Unlike other HTTP libraries, Requests is secure by default. Requests is the
|
47 |
-
**first and currently only** standalone HTTP library to
|
48 |
-
**[fully verify][requests_ssl] all HTTPS requests** even without cURL. We
|
49 |
-
also bundle the latest root certificate authorities to ensure that your
|
50 |
-
secure requests are actually secure.
|
51 |
-
|
52 |
-
(Of note is that WordPress as of version 3.7 also supports full checking of
|
53 |
-
the certificates, thanks to [evangelism efforts on our behalf][wpssl].
|
54 |
-
Together, we are the only HTTP libraries in PHP to fully verify certificates
|
55 |
-
to the same level as browsers.)
|
56 |
-
|
57 |
-
5. **Extensible from the core**
|
58 |
-
|
59 |
-
If you need low-level access to Requests' internals, simply plug your
|
60 |
-
callbacks in via the built-in [hooking system][] and mess around as much as
|
61 |
-
you want. Requests' simple hooking system is so powerful that both
|
62 |
-
authentication handlers and cookie support is actually handled internally
|
63 |
-
with hooks.
|
64 |
-
|
65 |
-
[coveralls]: https://coveralls.io/r/rmccue/Requests
|
66 |
-
[hooking system]: hooks.md
|
67 |
-
[requests_ssl]: https://github.com/rmccue/Requests/blob/master/library/Requests/SSL.php
|
68 |
-
[travis]: https://travis-ci.org/rmccue/Requests
|
69 |
-
[wpssl]: http://core.trac.wordpress.org/ticket/25007
|
70 |
-
|
71 |
-
|
72 |
-
Why shouldn't I use...
|
73 |
-
----------------------
|
74 |
-
Requests isn't the first or only HTTP library in PHP and it's important to
|
75 |
-
acknowledge the other solutions out there. Here's why you should use Requests
|
76 |
-
instead of something else, in our opinion.
|
77 |
-
|
78 |
-
|
79 |
-
### cURL
|
80 |
-
|
81 |
-
1. **Not every host has cURL installed**
|
82 |
-
|
83 |
-
cURL is far from being ubiquitous, so you can't rely on it always being
|
84 |
-
available when distributing software. Anecdotal data collected from various
|
85 |
-
projects indicates that cURL is available on roughly 90% of hosts, but that
|
86 |
-
leaves 10% of hosts without it.
|
87 |
-
|
88 |
-
2. **cURL's interface sucks**
|
89 |
-
|
90 |
-
cURL's interface was designed for PHP 4, and hence uses resources with
|
91 |
-
horrible functions such as `curl_setopt()`. Combined with that, it uses 229
|
92 |
-
global constants, polluting the global namespace horribly.
|
93 |
-
|
94 |
-
Requests, on the other hand, exposes only a handful of classes to the
|
95 |
-
global namespace, most of which are for internal use. You can learn to use
|
96 |
-
the `Requests::request()` method and the `Requests_Response` object in the
|
97 |
-
space of 10 minutes and you already know how to use Requests.
|
98 |
-
|
99 |
-
|
100 |
-
### Guzzle
|
101 |
-
|
102 |
-
1. **Requires cURL and PHP 5.3+**
|
103 |
-
|
104 |
-
Guzzle is designed to be a client to fit a large number of installations, but
|
105 |
-
as a result of optimizing for Guzzle developer time, it uses cURL as an
|
106 |
-
underlying transport. As noted above, this is a majority of systems, but
|
107 |
-
far from all.
|
108 |
-
|
109 |
-
The same is true for PHP 5.3+. While we'd all love to rely on PHP's newer
|
110 |
-
features, the fact is that a huge percentage of hosts are still running on
|
111 |
-
PHP 5.2. (The WordPress project estimates [about 60%][wpstats] of hosts are
|
112 |
-
running PHP 5.2.)
|
113 |
-
|
114 |
-
2. **Not just a HTTP client**
|
115 |
-
|
116 |
-
Guzzle is not intended to just be a HTTP client, but rather to be a
|
117 |
-
full-featured REST client. Requests is just a HTTP client, intentionally. Our
|
118 |
-
development strategy is to act as a low-level library that REST clients can
|
119 |
-
easily be built on, not to provide the whole kitchen sink for you.
|
120 |
-
|
121 |
-
If you want to rapidly develop a web service client using a framework, Guzzle
|
122 |
-
will suit you perfectly. On the other hand, if you want a HTTP client without
|
123 |
-
all the rest, Requests is the way to go.
|
124 |
-
|
125 |
-
[wpstats]: http://wordpress.org/about/stats/
|
126 |
-
|
127 |
-
|
128 |
-
### Buzz
|
129 |
-
|
130 |
-
1. **Requires PHP 5.3+**
|
131 |
-
|
132 |
-
As with Guzzle, while PHP 5.3+ is awesome, you can't always rely on it being
|
133 |
-
on a host. With widely distributable software, this is a huge problem.
|
134 |
-
|
135 |
-
2. **Not transport-transparent**
|
136 |
-
|
137 |
-
For making certain types of requests, such as multi-requests, you can't rely
|
138 |
-
on a high-level abstraction and instead have to use the low-level transports.
|
139 |
-
This really gains nothing (other than a fancy interface) over just using the
|
140 |
-
methods directly and means that you can't rely on features to be available.
|
141 |
-
|
142 |
-
|
143 |
-
### fsockopen
|
144 |
-
|
145 |
-
1. **Very low-level**
|
146 |
-
|
147 |
-
fsockopen is used for working with sockets directly, so it only knows about
|
148 |
-
the transport layer (TCP in our case), not anything higher (i.e. HTTP on the
|
149 |
-
application layer). To be able to use fsockopen as a HTTP client, you need
|
150 |
-
to write all the HTTP code yourself, and once you're done, you'll end up
|
151 |
-
with something that is almost exactly like Requests.
|
152 |
-
|
153 |
-
|
154 |
-
### PEAR HTTP_Request2
|
155 |
-
|
156 |
-
1. **Requires PEAR**
|
157 |
-
|
158 |
-
PEAR is (in theory) a great distribution system (with a less than wonderful
|
159 |
-
implementation), however it is not ubiquitous, as many hosts disable it to
|
160 |
-
save on space that most people aren't going to use anyway.
|
161 |
-
|
162 |
-
PEAR is also a pain for users. Users want to be able to download a zip of
|
163 |
-
your project without needing to install anything else from PEAR.
|
164 |
-
|
165 |
-
(If you really want though, Requests is available via PEAR. Check the README
|
166 |
-
to see how to grab it.)
|
167 |
-
|
168 |
-
2. **Depends on other PEAR utilities**
|
169 |
-
|
170 |
-
HTTP\_Request2 requires Net_URL2 in order to function, locking you in to
|
171 |
-
using PEAR for your project.
|
172 |
-
|
173 |
-
Requests is entirely self-contained, and includes all the libraries it needs
|
174 |
-
(for example, Requests\_IRI is based on ComplexPie\_IRI by Geoffrey Sneddon).
|
175 |
-
|
176 |
-
|
177 |
-
### PECL HttpRequest
|
178 |
-
|
179 |
-
1. **Requires a PECL extension**
|
180 |
-
|
181 |
-
Similar to PEAR, users aren't big fans of installing extra libraries. Unlike
|
182 |
-
PEAR though, PECL extensions require compiling, which end users will be
|
183 |
-
unfamiliar with. In addition, on systems where users do not have full
|
184 |
-
control over PHP, they will be unable to install custom extensions.
|
185 |
-
|
186 |
-
|
187 |
-
### Zend Framework's Zend\_Http\_Client
|
188 |
-
|
189 |
-
1. **Requires other parts of the Zend Framework**
|
190 |
-
|
191 |
-
Similar to HTTP_Request2, Zend's client is not fully self-contained and
|
192 |
-
requires other components from the framework.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/examples/basic-auth.php
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// First, include Requests
|
4 |
-
include('../library/Requests.php');
|
5 |
-
|
6 |
-
// Next, make sure Requests can load internal classes
|
7 |
-
Requests::register_autoloader();
|
8 |
-
|
9 |
-
// Now let's make a request!
|
10 |
-
$options = array(
|
11 |
-
'auth' => array('someuser', 'password')
|
12 |
-
);
|
13 |
-
$request = Requests::get('http://httpbin.org/basic-auth/someuser/password', array(), $options);
|
14 |
-
|
15 |
-
// Check what we received
|
16 |
-
var_dump($request);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/examples/get.php
DELETED
@@ -1,13 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// First, include Requests
|
4 |
-
include('../library/Requests.php');
|
5 |
-
|
6 |
-
// Next, make sure Requests can load internal classes
|
7 |
-
Requests::register_autoloader();
|
8 |
-
|
9 |
-
// Now let's make a request!
|
10 |
-
$request = Requests::get('http://httpbin.org/get', array('Accept' => 'application/json'));
|
11 |
-
|
12 |
-
// Check what we received
|
13 |
-
var_dump($request);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/examples/multiple.php
DELETED
@@ -1,45 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// First, include Requests
|
4 |
-
include('../library/Requests.php');
|
5 |
-
|
6 |
-
// Next, make sure Requests can load internal classes
|
7 |
-
Requests::register_autoloader();
|
8 |
-
|
9 |
-
// Setup what we want to request
|
10 |
-
$requests = array(
|
11 |
-
array(
|
12 |
-
'url' => 'http://httpbin.org/get',
|
13 |
-
'headers' => array('Accept' => 'application/javascript'),
|
14 |
-
),
|
15 |
-
'post' => array(
|
16 |
-
'url' => 'http://httpbin.org/post',
|
17 |
-
'data' => array('mydata' => 'something'),
|
18 |
-
),
|
19 |
-
'delayed' => array(
|
20 |
-
'url' => 'http://httpbin.org/delay/10',
|
21 |
-
'options' => array(
|
22 |
-
'timeout' => 20,
|
23 |
-
),
|
24 |
-
),
|
25 |
-
);
|
26 |
-
|
27 |
-
// Setup a callback
|
28 |
-
function my_callback(&$request, $id) {
|
29 |
-
var_dump($id, $request);
|
30 |
-
}
|
31 |
-
|
32 |
-
// Tell Requests to use the callback
|
33 |
-
$options = array(
|
34 |
-
'complete' => 'my_callback',
|
35 |
-
);
|
36 |
-
|
37 |
-
// Send the request!
|
38 |
-
$responses = Requests::request_multiple($requests, $options);
|
39 |
-
|
40 |
-
// Note: the response from the above call will be an associative array matching
|
41 |
-
// $requests with the response data, however we've already handled it in
|
42 |
-
// my_callback() anyway!
|
43 |
-
//
|
44 |
-
// If you don't believe me, uncomment this:
|
45 |
-
# var_dump($responses);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/examples/post.php
DELETED
@@ -1,13 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// First, include Requests
|
4 |
-
include('../library/Requests.php');
|
5 |
-
|
6 |
-
// Next, make sure Requests can load internal classes
|
7 |
-
Requests::register_autoloader();
|
8 |
-
|
9 |
-
// Now let's make a request!
|
10 |
-
$request = Requests::post('http://httpbin.org/post', array(), array('mydata' => 'something'));
|
11 |
-
|
12 |
-
// Check what we received
|
13 |
-
var_dump($request);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/examples/proxy.php
DELETED
@@ -1,18 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// First, include Requests
|
4 |
-
include('../library/Requests.php');
|
5 |
-
|
6 |
-
// Next, make sure Requests can load internal classes
|
7 |
-
Requests::register_autoloader();
|
8 |
-
|
9 |
-
// Now let's make a request via a proxy.
|
10 |
-
$options = array(
|
11 |
-
'proxy' => '127.0.0.1:8080', // syntax: host:port, eg 12.13.14.14:8080 or someproxy.com:3128
|
12 |
-
// If you need to authenticate, use the following syntax:
|
13 |
-
// 'proxy' => array( '127.0.0.1:8080', 'username', 'password' ),
|
14 |
-
);
|
15 |
-
$request = Requests::get('http://httpbin.org/ip', array(), $options );
|
16 |
-
|
17 |
-
// See result
|
18 |
-
var_dump($request->body);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/examples/session.php
DELETED
@@ -1,24 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// First, include Requests
|
4 |
-
include('../library/Requests.php');
|
5 |
-
|
6 |
-
// Next, make sure Requests can load internal classes
|
7 |
-
Requests::register_autoloader();
|
8 |
-
|
9 |
-
// Set up our session
|
10 |
-
$session = new Requests_Session('http://httpbin.org/');
|
11 |
-
$session->headers['Accept'] = 'application/json';
|
12 |
-
$session->useragent = 'Awesomesauce';
|
13 |
-
|
14 |
-
// Now let's make a request!
|
15 |
-
$request = $session->get('/get');
|
16 |
-
|
17 |
-
// Check what we received
|
18 |
-
var_dump($request);
|
19 |
-
|
20 |
-
// Let's check our user agent!
|
21 |
-
$request = $session->get('/user-agent');
|
22 |
-
|
23 |
-
// And check again
|
24 |
-
var_dump($request);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/examples/timeout.php
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// First, include Requests
|
4 |
-
include('../library/Requests.php');
|
5 |
-
|
6 |
-
// Next, make sure Requests can load internal classes
|
7 |
-
Requests::register_autoloader();
|
8 |
-
|
9 |
-
// Define a timeout of 2.5 seconds
|
10 |
-
$options = array(
|
11 |
-
'timeout' => 2.5,
|
12 |
-
);
|
13 |
-
|
14 |
-
// Now let's make a request to a page that will delay its response by 3 seconds
|
15 |
-
$request = Requests::get('http://httpbin.org/delay/3', array(), $options);
|
16 |
-
|
17 |
-
// An exception will be thrown, stating a timeout of the request !
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests.php
DELETED
@@ -1,869 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Requests for PHP
|
4 |
-
*
|
5 |
-
* Inspired by Requests for Python.
|
6 |
-
*
|
7 |
-
* Based on concepts from SimplePie_File, RequestCore and WP_Http.
|
8 |
-
*
|
9 |
-
* @package Requests
|
10 |
-
*/
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Requests for PHP
|
14 |
-
*
|
15 |
-
* Inspired by Requests for Python.
|
16 |
-
*
|
17 |
-
* Based on concepts from SimplePie_File, RequestCore and WP_Http.
|
18 |
-
*
|
19 |
-
* @package Requests
|
20 |
-
*/
|
21 |
-
class Requests {
|
22 |
-
/**
|
23 |
-
* POST method
|
24 |
-
*
|
25 |
-
* @var string
|
26 |
-
*/
|
27 |
-
const POST = 'POST';
|
28 |
-
|
29 |
-
/**
|
30 |
-
* PUT method
|
31 |
-
*
|
32 |
-
* @var string
|
33 |
-
*/
|
34 |
-
const PUT = 'PUT';
|
35 |
-
|
36 |
-
/**
|
37 |
-
* GET method
|
38 |
-
*
|
39 |
-
* @var string
|
40 |
-
*/
|
41 |
-
const GET = 'GET';
|
42 |
-
|
43 |
-
/**
|
44 |
-
* HEAD method
|
45 |
-
*
|
46 |
-
* @var string
|
47 |
-
*/
|
48 |
-
const HEAD = 'HEAD';
|
49 |
-
|
50 |
-
/**
|
51 |
-
* DELETE method
|
52 |
-
*
|
53 |
-
* @var string
|
54 |
-
*/
|
55 |
-
const DELETE = 'DELETE';
|
56 |
-
|
57 |
-
/**
|
58 |
-
* PATCH method
|
59 |
-
*
|
60 |
-
* @link http://tools.ietf.org/html/rfc5789
|
61 |
-
* @var string
|
62 |
-
*/
|
63 |
-
const PATCH = 'PATCH';
|
64 |
-
|
65 |
-
/**
|
66 |
-
* Current version of Requests
|
67 |
-
*
|
68 |
-
* @var string
|
69 |
-
*/
|
70 |
-
const VERSION = '1.6';
|
71 |
-
|
72 |
-
/**
|
73 |
-
* Registered transport classes
|
74 |
-
*
|
75 |
-
* @var array
|
76 |
-
*/
|
77 |
-
protected static $transports = array();
|
78 |
-
|
79 |
-
/**
|
80 |
-
* Selected transport name
|
81 |
-
*
|
82 |
-
* Use {@see get_transport()} instead
|
83 |
-
*
|
84 |
-
* @var array
|
85 |
-
*/
|
86 |
-
public static $transport = array();
|
87 |
-
|
88 |
-
/**
|
89 |
-
* This is a static class, do not instantiate it
|
90 |
-
*
|
91 |
-
* @codeCoverageIgnore
|
92 |
-
*/
|
93 |
-
private function __construct() {}
|
94 |
-
|
95 |
-
/**
|
96 |
-
* Autoloader for Requests
|
97 |
-
*
|
98 |
-
* Register this with {@see register_autoloader()} if you'd like to avoid
|
99 |
-
* having to create your own.
|
100 |
-
*
|
101 |
-
* (You can also use `spl_autoload_register` directly if you'd prefer.)
|
102 |
-
*
|
103 |
-
* @codeCoverageIgnore
|
104 |
-
*
|
105 |
-
* @param string $class Class name to load
|
106 |
-
*/
|
107 |
-
public static function autoloader($class) {
|
108 |
-
// Check that the class starts with "Requests"
|
109 |
-
if (strpos($class, 'Requests') !== 0) {
|
110 |
-
return;
|
111 |
-
}
|
112 |
-
|
113 |
-
$file = str_replace('_', '/', $class);
|
114 |
-
if (file_exists(dirname(__FILE__) . '/' . $file . '.php')) {
|
115 |
-
require_once(dirname(__FILE__) . '/' . $file . '.php');
|
116 |
-
}
|
117 |
-
}
|
118 |
-
|
119 |
-
/**
|
120 |
-
* Register the built-in autoloader
|
121 |
-
*
|
122 |
-
* @codeCoverageIgnore
|
123 |
-
*/
|
124 |
-
public static function register_autoloader() {
|
125 |
-
spl_autoload_register(array('Requests', 'autoloader'));
|
126 |
-
}
|
127 |
-
|
128 |
-
/**
|
129 |
-
* Register a transport
|
130 |
-
*
|
131 |
-
* @param string $transport Transport class to add, must support the Requests_Transport interface
|
132 |
-
*/
|
133 |
-
public static function add_transport($transport) {
|
134 |
-
if (empty(self::$transports)) {
|
135 |
-
self::$transports = array(
|
136 |
-
'Requests_Transport_cURL',
|
137 |
-
'Requests_Transport_fsockopen',
|
138 |
-
);
|
139 |
-
}
|
140 |
-
|
141 |
-
self::$transports = array_merge(self::$transports, array($transport));
|
142 |
-
}
|
143 |
-
|
144 |
-
/**
|
145 |
-
* Get a working transport
|
146 |
-
*
|
147 |
-
* @throws Requests_Exception If no valid transport is found (`notransport`)
|
148 |
-
* @return Requests_Transport
|
149 |
-
*/
|
150 |
-
protected static function get_transport($capabilities = array()) {
|
151 |
-
// Caching code, don't bother testing coverage
|
152 |
-
// @codeCoverageIgnoreStart
|
153 |
-
// array of capabilities as a string to be used as an array key
|
154 |
-
ksort($capabilities);
|
155 |
-
$cap_string = serialize($capabilities);
|
156 |
-
|
157 |
-
// Don't search for a transport if it's already been done for these $capabilities
|
158 |
-
if (isset(self::$transport[$cap_string]) && self::$transport[$cap_string] !== null) {
|
159 |
-
return new self::$transport[$cap_string]();
|
160 |
-
}
|
161 |
-
// @codeCoverageIgnoreEnd
|
162 |
-
|
163 |
-
if (empty(self::$transports)) {
|
164 |
-
self::$transports = array(
|
165 |
-
'Requests_Transport_cURL',
|
166 |
-
'Requests_Transport_fsockopen',
|
167 |
-
);
|
168 |
-
}
|
169 |
-
|
170 |
-
// Find us a working transport
|
171 |
-
foreach (self::$transports as $class) {
|
172 |
-
if (!class_exists($class))
|
173 |
-
continue;
|
174 |
-
|
175 |
-
$result = call_user_func(array($class, 'test'), $capabilities);
|
176 |
-
if ($result) {
|
177 |
-
self::$transport[$cap_string] = $class;
|
178 |
-
break;
|
179 |
-
}
|
180 |
-
}
|
181 |
-
if (self::$transport[$cap_string] === null) {
|
182 |
-
throw new Requests_Exception('No working transports found', 'notransport', self::$transports);
|
183 |
-
}
|
184 |
-
|
185 |
-
return new self::$transport[$cap_string]();
|
186 |
-
}
|
187 |
-
|
188 |
-
/**#@+
|
189 |
-
* @see request()
|
190 |
-
* @param string $url
|
191 |
-
* @param array $headers
|
192 |
-
* @param array $options
|
193 |
-
* @return Requests_Response
|
194 |
-
*/
|
195 |
-
/**
|
196 |
-
* Send a GET request
|
197 |
-
*/
|
198 |
-
public static function get($url, $headers = array(), $options = array()) {
|
199 |
-
return self::request($url, $headers, null, self::GET, $options);
|
200 |
-
}
|
201 |
-
|
202 |
-
/**
|
203 |
-
* Send a HEAD request
|
204 |
-
*/
|
205 |
-
public static function head($url, $headers = array(), $options = array()) {
|
206 |
-
return self::request($url, $headers, null, self::HEAD, $options);
|
207 |
-
}
|
208 |
-
|
209 |
-
/**
|
210 |
-
* Send a DELETE request
|
211 |
-
*/
|
212 |
-
public static function delete($url, $headers = array(), $options = array()) {
|
213 |
-
return self::request($url, $headers, null, self::DELETE, $options);
|
214 |
-
}
|
215 |
-
/**#@-*/
|
216 |
-
|
217 |
-
/**#@+
|
218 |
-
* @see request()
|
219 |
-
* @param string $url
|
220 |
-
* @param array $headers
|
221 |
-
* @param array $data
|
222 |
-
* @param array $options
|
223 |
-
* @return Requests_Response
|
224 |
-
*/
|
225 |
-
/**
|
226 |
-
* Send a POST request
|
227 |
-
*/
|
228 |
-
public static function post($url, $headers = array(), $data = array(), $options = array()) {
|
229 |
-
return self::request($url, $headers, $data, self::POST, $options);
|
230 |
-
}
|
231 |
-
/**
|
232 |
-
* Send a PUT request
|
233 |
-
*/
|
234 |
-
public static function put($url, $headers = array(), $data = array(), $options = array()) {
|
235 |
-
return self::request($url, $headers, $data, self::PUT, $options);
|
236 |
-
}
|
237 |
-
|
238 |
-
/**
|
239 |
-
* Send a PATCH request
|
240 |
-
*
|
241 |
-
* Note: Unlike {@see post} and {@see put}, `$headers` is required, as the
|
242 |
-
* specification recommends that should send an ETag
|
243 |
-
*
|
244 |
-
* @link http://tools.ietf.org/html/rfc5789
|
245 |
-
*/
|
246 |
-
public static function patch($url, $headers, $data = array(), $options = array()) {
|
247 |
-
return self::request($url, $headers, $data, self::PATCH, $options);
|
248 |
-
}
|
249 |
-
/**#@-*/
|
250 |
-
|
251 |
-
/**
|
252 |
-
* Main interface for HTTP requests
|
253 |
-
*
|
254 |
-
* This method initiates a request and sends it via a transport before
|
255 |
-
* parsing.
|
256 |
-
*
|
257 |
-
* The `$options` parameter takes an associative array with the following
|
258 |
-
* options:
|
259 |
-
*
|
260 |
-
* - `timeout`: How long should we wait for a response?
|
261 |
-
* (float, seconds with a millisecond precision, default: 10, example: 0.01)
|
262 |
-
* - `connect_timeout`: How long should we wait while trying to connect?
|
263 |
-
* (float, seconds with a millisecond precision, default: 10, example: 0.01)
|
264 |
-
* - `useragent`: Useragent to send to the server
|
265 |
-
* (string, default: php-requests/$version)
|
266 |
-
* - `follow_redirects`: Should we follow 3xx redirects?
|
267 |
-
* (boolean, default: true)
|
268 |
-
* - `redirects`: How many times should we redirect before erroring?
|
269 |
-
* (integer, default: 10)
|
270 |
-
* - `blocking`: Should we block processing on this request?
|
271 |
-
* (boolean, default: true)
|
272 |
-
* - `filename`: File to stream the body to instead.
|
273 |
-
* (string|boolean, default: false)
|
274 |
-
* - `auth`: Authentication handler or array of user/password details to use
|
275 |
-
* for Basic authentication
|
276 |
-
* (Requests_Auth|array|boolean, default: false)
|
277 |
-
* - `proxy`: Proxy details to use for proxy by-passing and authentication
|
278 |
-
* (Requests_Proxy|array|boolean, default: false)
|
279 |
-
* - `idn`: Enable IDN parsing
|
280 |
-
* (boolean, default: true)
|
281 |
-
* - `transport`: Custom transport. Either a class name, or a
|
282 |
-
* transport object. Defaults to the first working transport from
|
283 |
-
* {@see getTransport()}
|
284 |
-
* (string|Requests_Transport, default: {@see getTransport()})
|
285 |
-
* - `hooks`: Hooks handler.
|
286 |
-
* (Requests_Hooker, default: new Requests_Hooks())
|
287 |
-
* - `verify`: Should we verify SSL certificates? Allows passing in a custom
|
288 |
-
* certificate file as a string. (Using true uses the system-wide root
|
289 |
-
* certificate store instead, but this may have different behaviour
|
290 |
-
* across transports.)
|
291 |
-
* (string|boolean, default: library/Requests/Transport/cacert.pem)
|
292 |
-
* - `verifyname`: Should we verify the common name in the SSL certificate?
|
293 |
-
* (boolean: default, true)
|
294 |
-
*
|
295 |
-
* @throws Requests_Exception On invalid URLs (`nonhttp`)
|
296 |
-
*
|
297 |
-
* @param string $url URL to request
|
298 |
-
* @param array $headers Extra headers to send with the request
|
299 |
-
* @param array $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
|
300 |
-
* @param string $type HTTP request type (use Requests constants)
|
301 |
-
* @param array $options Options for the request (see description for more information)
|
302 |
-
* @return Requests_Response
|
303 |
-
*/
|
304 |
-
public static function request($url, $headers = array(), $data = array(), $type = self::GET, $options = array()) {
|
305 |
-
if (empty($options['type'])) {
|
306 |
-
$options['type'] = $type;
|
307 |
-
}
|
308 |
-
$options = array_merge(self::get_default_options(), $options);
|
309 |
-
|
310 |
-
self::set_defaults($url, $headers, $data, $type, $options);
|
311 |
-
|
312 |
-
$options['hooks']->dispatch('requests.before_request', array(&$url, &$headers, &$data, &$type, &$options));
|
313 |
-
|
314 |
-
if (!empty($options['transport'])) {
|
315 |
-
$transport = $options['transport'];
|
316 |
-
|
317 |
-
if (is_string($options['transport'])) {
|
318 |
-
$transport = new $transport();
|
319 |
-
}
|
320 |
-
} else {
|
321 |
-
$need_ssl = (0 === stripos($url, 'https://'));
|
322 |
-
$capabilities = array('ssl' => $need_ssl);
|
323 |
-
$transport = self::get_transport($capabilities);
|
324 |
-
}
|
325 |
-
$response = $transport->request($url, $headers, $data, $options);
|
326 |
-
|
327 |
-
$options['hooks']->dispatch('requests.before_parse', array(&$response, $url, $headers, $data, $type, $options));
|
328 |
-
|
329 |
-
return self::parse_response($response, $url, $headers, $data, $options);
|
330 |
-
}
|
331 |
-
|
332 |
-
/**
|
333 |
-
* Send multiple HTTP requests simultaneously
|
334 |
-
*
|
335 |
-
* The `$requests` parameter takes an associative or indexed array of
|
336 |
-
* request fields. The key of each request can be used to match up the
|
337 |
-
* request with the returned data, or with the request passed into your
|
338 |
-
* `multiple.request.complete` callback.
|
339 |
-
*
|
340 |
-
* The request fields value is an associative array with the following keys:
|
341 |
-
*
|
342 |
-
* - `url`: Request URL Same as the `$url` parameter to
|
343 |
-
* {@see Requests::request}
|
344 |
-
* (string, required)
|
345 |
-
* - `headers`: Associative array of header fields. Same as the `$headers`
|
346 |
-
* parameter to {@see Requests::request}
|
347 |
-
* (array, default: `array()`)
|
348 |
-
* - `data`: Associative array of data fields or a string. Same as the
|
349 |
-
* `$data` parameter to {@see Requests::request}
|
350 |
-
* (array|string, default: `array()`)
|
351 |
-
* - `type`: HTTP request type (use Requests constants). Same as the `$type`
|
352 |
-
* parameter to {@see Requests::request}
|
353 |
-
* (string, default: `Requests::GET`)
|
354 |
-
* - `cookies`: Associative array of cookie name to value, or cookie jar.
|
355 |
-
* (array|Requests_Cookie_Jar)
|
356 |
-
*
|
357 |
-
* If the `$options` parameter is specified, individual requests will
|
358 |
-
* inherit options from it. This can be used to use a single hooking system,
|
359 |
-
* or set all the types to `Requests::POST`, for example.
|
360 |
-
*
|
361 |
-
* In addition, the `$options` parameter takes the following global options:
|
362 |
-
*
|
363 |
-
* - `complete`: A callback for when a request is complete. Takes two
|
364 |
-
* parameters, a Requests_Response/Requests_Exception reference, and the
|
365 |
-
* ID from the request array (Note: this can also be overridden on a
|
366 |
-
* per-request basis, although that's a little silly)
|
367 |
-
* (callback)
|
368 |
-
*
|
369 |
-
* @param array $requests Requests data (see description for more information)
|
370 |
-
* @param array $options Global and default options (see {@see Requests::request})
|
371 |
-
* @return array Responses (either Requests_Response or a Requests_Exception object)
|
372 |
-
*/
|
373 |
-
public static function request_multiple($requests, $options = array()) {
|
374 |
-
$options = array_merge(self::get_default_options(true), $options);
|
375 |
-
|
376 |
-
if (!empty($options['hooks'])) {
|
377 |
-
$options['hooks']->register('transport.internal.parse_response', array('Requests', 'parse_multiple'));
|
378 |
-
if (!empty($options['complete'])) {
|
379 |
-
$options['hooks']->register('multiple.request.complete', $options['complete']);
|
380 |
-
}
|
381 |
-
}
|
382 |
-
|
383 |
-
foreach ($requests as $id => &$request) {
|
384 |
-
if (!isset($request['headers'])) {
|
385 |
-
$request['headers'] = array();
|
386 |
-
}
|
387 |
-
if (!isset($request['data'])) {
|
388 |
-
$request['data'] = array();
|
389 |
-
}
|
390 |
-
if (!isset($request['type'])) {
|
391 |
-
$request['type'] = self::GET;
|
392 |
-
}
|
393 |
-
if (!isset($request['options'])) {
|
394 |
-
$request['options'] = $options;
|
395 |
-
$request['options']['type'] = $request['type'];
|
396 |
-
}
|
397 |
-
else {
|
398 |
-
if (empty($request['options']['type'])) {
|
399 |
-
$request['options']['type'] = $request['type'];
|
400 |
-
}
|
401 |
-
$request['options'] = array_merge($options, $request['options']);
|
402 |
-
}
|
403 |
-
|
404 |
-
self::set_defaults($request['url'], $request['headers'], $request['data'], $request['type'], $request['options']);
|
405 |
-
|
406 |
-
// Ensure we only hook in once
|
407 |
-
if ($request['options']['hooks'] !== $options['hooks']) {
|
408 |
-
$request['options']['hooks']->register('transport.internal.parse_response', array('Requests', 'parse_multiple'));
|
409 |
-
if (!empty($request['options']['complete'])) {
|
410 |
-
$request['options']['hooks']->register('multiple.request.complete', $request['options']['complete']);
|
411 |
-
}
|
412 |
-
}
|
413 |
-
}
|
414 |
-
unset($request);
|
415 |
-
|
416 |
-
if (!empty($options['transport'])) {
|
417 |
-
$transport = $options['transport'];
|
418 |
-
|
419 |
-
if (is_string($options['transport'])) {
|
420 |
-
$transport = new $transport();
|
421 |
-
}
|
422 |
-
}
|
423 |
-
else {
|
424 |
-
$transport = self::get_transport();
|
425 |
-
}
|
426 |
-
$responses = $transport->request_multiple($requests, $options);
|
427 |
-
|
428 |
-
foreach ($responses as $id => &$response) {
|
429 |
-
// If our hook got messed with somehow, ensure we end up with the
|
430 |
-
// correct response
|
431 |
-
if (is_string($response)) {
|
432 |
-
$request = $requests[$id];
|
433 |
-
self::parse_multiple($response, $request);
|
434 |
-
$request['options']['hooks']->dispatch('multiple.request.complete', array(&$response, $id));
|
435 |
-
}
|
436 |
-
}
|
437 |
-
|
438 |
-
return $responses;
|
439 |
-
}
|
440 |
-
|
441 |
-
/**
|
442 |
-
* Get the default options
|
443 |
-
*
|
444 |
-
* @see Requests::request() for values returned by this method
|
445 |
-
* @param boolean $multirequest Is this a multirequest?
|
446 |
-
* @return array Default option values
|
447 |
-
*/
|
448 |
-
protected static function get_default_options($multirequest = false) {
|
449 |
-
$defaults = array(
|
450 |
-
'timeout' => 10,
|
451 |
-
'connect_timeout' => 10,
|
452 |
-
'useragent' => 'php-requests/' . self::VERSION,
|
453 |
-
'redirected' => 0,
|
454 |
-
'redirects' => 10,
|
455 |
-
'follow_redirects' => true,
|
456 |
-
'blocking' => true,
|
457 |
-
'type' => self::GET,
|
458 |
-
'filename' => false,
|
459 |
-
'auth' => false,
|
460 |
-
'proxy' => false,
|
461 |
-
'cookies' => false,
|
462 |
-
'idn' => true,
|
463 |
-
'hooks' => null,
|
464 |
-
'transport' => null,
|
465 |
-
'verify' => dirname( __FILE__ ) . '/Requests/Transport/cacert.pem',
|
466 |
-
'verifyname' => true,
|
467 |
-
);
|
468 |
-
if ($multirequest !== false) {
|
469 |
-
$defaults['complete'] = null;
|
470 |
-
}
|
471 |
-
return $defaults;
|
472 |
-
}
|
473 |
-
|
474 |
-
/**
|
475 |
-
* Set the default values
|
476 |
-
*
|
477 |
-
* @param string $url URL to request
|
478 |
-
* @param array $headers Extra headers to send with the request
|
479 |
-
* @param array $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
|
480 |
-
* @param string $type HTTP request type
|
481 |
-
* @param array $options Options for the request
|
482 |
-
* @return array $options
|
483 |
-
*/
|
484 |
-
protected static function set_defaults(&$url, &$headers, &$data, &$type, &$options) {
|
485 |
-
if (!preg_match('/^http(s)?:\/\//i', $url, $matches)) {
|
486 |
-
throw new Requests_Exception('Only HTTP requests are handled.', 'nonhttp', $url);
|
487 |
-
}
|
488 |
-
|
489 |
-
if (empty($options['hooks'])) {
|
490 |
-
$options['hooks'] = new Requests_Hooks();
|
491 |
-
}
|
492 |
-
|
493 |
-
if (is_array($options['auth'])) {
|
494 |
-
$options['auth'] = new Requests_Auth_Basic($options['auth']);
|
495 |
-
}
|
496 |
-
if ($options['auth'] !== false) {
|
497 |
-
$options['auth']->register($options['hooks']);
|
498 |
-
}
|
499 |
-
|
500 |
-
if (!empty($options['proxy'])) {
|
501 |
-
$options['proxy'] = new Requests_Proxy_HTTP($options['proxy']);
|
502 |
-
}
|
503 |
-
if ($options['proxy'] !== false) {
|
504 |
-
$options['proxy']->register($options['hooks']);
|
505 |
-
}
|
506 |
-
|
507 |
-
if (is_array($options['cookies'])) {
|
508 |
-
$options['cookies'] = new Requests_Cookie_Jar($options['cookies']);
|
509 |
-
}
|
510 |
-
elseif (empty($options['cookies'])) {
|
511 |
-
$options['cookies'] = new Requests_Cookie_Jar();
|
512 |
-
}
|
513 |
-
if ($options['cookies'] !== false) {
|
514 |
-
$options['cookies']->register($options['hooks']);
|
515 |
-
}
|
516 |
-
|
517 |
-
if ($options['idn'] !== false) {
|
518 |
-
$iri = new Requests_IRI($url);
|
519 |
-
$iri->host = Requests_IDNAEncoder::encode($iri->ihost);
|
520 |
-
$url = $iri->uri;
|
521 |
-
}
|
522 |
-
}
|
523 |
-
|
524 |
-
/**
|
525 |
-
* HTTP response parser
|
526 |
-
*
|
527 |
-
* @throws Requests_Exception On missing head/body separator (`requests.no_crlf_separator`)
|
528 |
-
* @throws Requests_Exception On missing head/body separator (`noversion`)
|
529 |
-
* @throws Requests_Exception On missing head/body separator (`toomanyredirects`)
|
530 |
-
*
|
531 |
-
* @param string $headers Full response text including headers and body
|
532 |
-
* @param string $url Original request URL
|
533 |
-
* @param array $req_headers Original $headers array passed to {@link request()}, in case we need to follow redirects
|
534 |
-
* @param array $req_data Original $data array passed to {@link request()}, in case we need to follow redirects
|
535 |
-
* @param array $options Original $options array passed to {@link request()}, in case we need to follow redirects
|
536 |
-
* @return Requests_Response
|
537 |
-
*/
|
538 |
-
protected static function parse_response($headers, $url, $req_headers, $req_data, $options) {
|
539 |
-
$return = new Requests_Response();
|
540 |
-
if (!$options['blocking']) {
|
541 |
-
return $return;
|
542 |
-
}
|
543 |
-
|
544 |
-
$return->raw = $headers;
|
545 |
-
$return->url = $url;
|
546 |
-
|
547 |
-
if (!$options['filename']) {
|
548 |
-
if (($pos = strpos($headers, "\r\n\r\n")) === false) {
|
549 |
-
// Crap!
|
550 |
-
throw new Requests_Exception('Missing header/body separator', 'requests.no_crlf_separator');
|
551 |
-
}
|
552 |
-
|
553 |
-
$headers = substr($return->raw, 0, $pos);
|
554 |
-
$return->body = substr($return->raw, $pos + strlen("\n\r\n\r"));
|
555 |
-
}
|
556 |
-
else {
|
557 |
-
$return->body = '';
|
558 |
-
}
|
559 |
-
// Pretend CRLF = LF for compatibility (RFC 2616, section 19.3)
|
560 |
-
$headers = str_replace("\r\n", "\n", $headers);
|
561 |
-
// Unfold headers (replace [CRLF] 1*( SP | HT ) with SP) as per RFC 2616 (section 2.2)
|
562 |
-
$headers = preg_replace('/\n[ \t]/', ' ', $headers);
|
563 |
-
$headers = explode("\n", $headers);
|
564 |
-
preg_match('#^HTTP/1\.\d[ \t]+(\d+)#i', array_shift($headers), $matches);
|
565 |
-
if (empty($matches)) {
|
566 |
-
throw new Requests_Exception('Response could not be parsed', 'noversion', $headers);
|
567 |
-
}
|
568 |
-
$return->status_code = (int) $matches[1];
|
569 |
-
if ($return->status_code >= 200 && $return->status_code < 300) {
|
570 |
-
$return->success = true;
|
571 |
-
}
|
572 |
-
|
573 |
-
foreach ($headers as $header) {
|
574 |
-
list($key, $value) = explode(':', $header, 2);
|
575 |
-
$value = trim($value);
|
576 |
-
preg_replace('#(\s+)#i', ' ', $value);
|
577 |
-
$return->headers[$key] = $value;
|
578 |
-
}
|
579 |
-
if (isset($return->headers['transfer-encoding'])) {
|
580 |
-
$return->body = self::decode_chunked($return->body);
|
581 |
-
unset($return->headers['transfer-encoding']);
|
582 |
-
}
|
583 |
-
if (isset($return->headers['content-encoding'])) {
|
584 |
-
$return->body = self::decompress($return->body);
|
585 |
-
}
|
586 |
-
|
587 |
-
//fsockopen and cURL compatibility
|
588 |
-
if (isset($return->headers['connection'])) {
|
589 |
-
unset($return->headers['connection']);
|
590 |
-
}
|
591 |
-
|
592 |
-
$options['hooks']->dispatch('requests.before_redirect_check', array(&$return, $req_headers, $req_data, $options));
|
593 |
-
|
594 |
-
if ((in_array($return->status_code, array(300, 301, 302, 303, 307)) || $return->status_code > 307 && $return->status_code < 400) && $options['follow_redirects'] === true) {
|
595 |
-
if (isset($return->headers['location']) && $options['redirected'] < $options['redirects']) {
|
596 |
-
if ($return->status_code === 303) {
|
597 |
-
$options['type'] = Requests::GET;
|
598 |
-
}
|
599 |
-
$options['redirected']++;
|
600 |
-
$location = $return->headers['location'];
|
601 |
-
if (strpos ($location, 'http://') !== 0 && strpos ($location, 'https://') !== 0) {
|
602 |
-
// relative redirect, for compatibility make it absolute
|
603 |
-
$location = Requests_IRI::absolutize($url, $location);
|
604 |
-
$location = $location->uri;
|
605 |
-
}
|
606 |
-
$redirected = self::request($location, $req_headers, $req_data, false, $options);
|
607 |
-
$redirected->history[] = $return;
|
608 |
-
return $redirected;
|
609 |
-
}
|
610 |
-
elseif ($options['redirected'] >= $options['redirects']) {
|
611 |
-
throw new Requests_Exception('Too many redirects', 'toomanyredirects', $return);
|
612 |
-
}
|
613 |
-
}
|
614 |
-
|
615 |
-
$return->redirects = $options['redirected'];
|
616 |
-
|
617 |
-
$options['hooks']->dispatch('requests.after_request', array(&$return, $req_headers, $req_data, $options));
|
618 |
-
return $return;
|
619 |
-
}
|
620 |
-
|
621 |
-
/**
|
622 |
-
* Callback for `transport.internal.parse_response`
|
623 |
-
*
|
624 |
-
* Internal use only. Converts a raw HTTP response to a Requests_Response
|
625 |
-
* while still executing a multiple request.
|
626 |
-
*
|
627 |
-
* @param string $headers Full response text including headers and body
|
628 |
-
* @param array $request Request data as passed into {@see Requests::request_multiple()}
|
629 |
-
* @return null `$response` is either set to a Requests_Response instance, or a Requests_Exception object
|
630 |
-
*/
|
631 |
-
public static function parse_multiple(&$response, $request) {
|
632 |
-
try {
|
633 |
-
$response = self::parse_response($response, $request['url'], $request['headers'], $request['data'], $request['options']);
|
634 |
-
}
|
635 |
-
catch (Requests_Exception $e) {
|
636 |
-
$response = $e;
|
637 |
-
}
|
638 |
-
}
|
639 |
-
|
640 |
-
/**
|
641 |
-
* Decoded a chunked body as per RFC 2616
|
642 |
-
*
|
643 |
-
* @see http://tools.ietf.org/html/rfc2616#section-3.6.1
|
644 |
-
* @param string $data Chunked body
|
645 |
-
* @return string Decoded body
|
646 |
-
*/
|
647 |
-
protected static function decode_chunked($data) {
|
648 |
-
if (!preg_match('/^([0-9a-f]+)[^\r\n]*\r\n/i', trim($data))) {
|
649 |
-
return $data;
|
650 |
-
}
|
651 |
-
|
652 |
-
$decoded = '';
|
653 |
-
$encoded = $data;
|
654 |
-
|
655 |
-
while (true) {
|
656 |
-
$is_chunked = (bool) preg_match( '/^([0-9a-f]+)[^\r\n]*\r\n/i', $encoded, $matches );
|
657 |
-
if (!$is_chunked) {
|
658 |
-
// Looks like it's not chunked after all
|
659 |
-
return $data;
|
660 |
-
}
|
661 |
-
|
662 |
-
$length = hexdec(trim($matches[1]));
|
663 |
-
if ($length === 0) {
|
664 |
-
// Ignore trailer headers
|
665 |
-
return $decoded;
|
666 |
-
}
|
667 |
-
|
668 |
-
$chunk_length = strlen($matches[0]);
|
669 |
-
$decoded .= $part = substr($encoded, $chunk_length, $length);
|
670 |
-
$encoded = substr($encoded, $chunk_length + $length + 2);
|
671 |
-
|
672 |
-
if (trim($encoded) === '0' || empty($encoded)) {
|
673 |
-
return $decoded;
|
674 |
-
}
|
675 |
-
}
|
676 |
-
|
677 |
-
// We'll never actually get down here
|
678 |
-
// @codeCoverageIgnoreStart
|
679 |
-
}
|
680 |
-
// @codeCoverageIgnoreEnd
|
681 |
-
|
682 |
-
/**
|
683 |
-
* Convert a key => value array to a 'key: value' array for headers
|
684 |
-
*
|
685 |
-
* @param array $array Dictionary of header values
|
686 |
-
* @return array List of headers
|
687 |
-
*/
|
688 |
-
public static function flatten($array) {
|
689 |
-
$return = array();
|
690 |
-
foreach ($array as $key => $value) {
|
691 |
-
$return[] = "$key: $value";
|
692 |
-
}
|
693 |
-
return $return;
|
694 |
-
}
|
695 |
-
|
696 |
-
/**
|
697 |
-
* Convert a key => value array to a 'key: value' array for headers
|
698 |
-
*
|
699 |
-
* @deprecated Misspelling of {@see Requests::flatten}
|
700 |
-
* @param array $array Dictionary of header values
|
701 |
-
* @return array List of headers
|
702 |
-
*/
|
703 |
-
public static function flattern($array) {
|
704 |
-
return self::flatten($array);
|
705 |
-
}
|
706 |
-
|
707 |
-
/**
|
708 |
-
* Decompress an encoded body
|
709 |
-
*
|
710 |
-
* Implements gzip, compress and deflate. Guesses which it is by attempting
|
711 |
-
* to decode.
|
712 |
-
*
|
713 |
-
* @todo Make this smarter by defaulting to whatever the headers say first
|
714 |
-
* @param string $data Compressed data in one of the above formats
|
715 |
-
* @return string Decompressed string
|
716 |
-
*/
|
717 |
-
public static function decompress($data) {
|
718 |
-
if (substr($data, 0, 2) !== "\x1f\x8b" && substr($data, 0, 2) !== "\x78\x9c") {
|
719 |
-
// Not actually compressed. Probably cURL ruining this for us.
|
720 |
-
return $data;
|
721 |
-
}
|
722 |
-
|
723 |
-
if (function_exists('gzdecode') && ($decoded = @gzdecode($data)) !== false) {
|
724 |
-
return $decoded;
|
725 |
-
}
|
726 |
-
elseif (function_exists('gzinflate') && ($decoded = @gzinflate($data)) !== false) {
|
727 |
-
return $decoded;
|
728 |
-
}
|
729 |
-
elseif (($decoded = self::compatible_gzinflate($data)) !== false) {
|
730 |
-
return $decoded;
|
731 |
-
}
|
732 |
-
elseif (function_exists('gzuncompress') && ($decoded = @gzuncompress($data)) !== false) {
|
733 |
-
return $decoded;
|
734 |
-
}
|
735 |
-
|
736 |
-
return $data;
|
737 |
-
}
|
738 |
-
|
739 |
-
/**
|
740 |
-
* Decompression of deflated string while staying compatible with the majority of servers.
|
741 |
-
*
|
742 |
-
* Certain Servers will return deflated data with headers which PHP's gzinflate()
|
743 |
-
* function cannot handle out of the box. The following function has been created from
|
744 |
-
* various snippets on the gzinflate() PHP documentation.
|
745 |
-
*
|
746 |
-
* Warning: Magic numbers within. Due to the potential different formats that the compressed
|
747 |
-
* data may be returned in, some "magic offsets" are needed to ensure proper decompression
|
748 |
-
* takes place. For a simple progmatic way to determine the magic offset in use, see:
|
749 |
-
* http://core.trac.wordpress.org/ticket/18273
|
750 |
-
*
|
751 |
-
* @since 2.8.1
|
752 |
-
* @link http://core.trac.wordpress.org/ticket/18273
|
753 |
-
* @link http://au2.php.net/manual/en/function.gzinflate.php#70875
|
754 |
-
* @link http://au2.php.net/manual/en/function.gzinflate.php#77336
|
755 |
-
*
|
756 |
-
* @param string $gzData String to decompress.
|
757 |
-
* @return string|bool False on failure.
|
758 |
-
*/
|
759 |
-
public static function compatible_gzinflate($gzData) {
|
760 |
-
// Compressed data might contain a full zlib header, if so strip it for
|
761 |
-
// gzinflate()
|
762 |
-
if ( substr($gzData, 0, 3) == "\x1f\x8b\x08" ) {
|
763 |
-
$i = 10;
|
764 |
-
$flg = ord( substr($gzData, 3, 1) );
|
765 |
-
if ( $flg > 0 ) {
|
766 |
-
if ( $flg & 4 ) {
|
767 |
-
list($xlen) = unpack('v', substr($gzData, $i, 2) );
|
768 |
-
$i = $i + 2 + $xlen;
|
769 |
-
}
|
770 |
-
if ( $flg & 8 )
|
771 |
-
$i = strpos($gzData, "\0", $i) + 1;
|
772 |
-
if ( $flg & 16 )
|
773 |
-
$i = strpos($gzData, "\0", $i) + 1;
|
774 |
-
if ( $flg & 2 )
|
775 |
-
$i = $i + 2;
|
776 |
-
}
|
777 |
-
$decompressed = self::compatible_gzinflate( substr( $gzData, $i ) );
|
778 |
-
if ( false !== $decompressed ) {
|
779 |
-
return $decompressed;
|
780 |
-
}
|
781 |
-
}
|
782 |
-
|
783 |
-
// If the data is Huffman Encoded, we must first strip the leading 2
|
784 |
-
// byte Huffman marker for gzinflate()
|
785 |
-
// The response is Huffman coded by many compressors such as
|
786 |
-
// java.util.zip.Deflater, Ruby’s Zlib::Deflate, and .NET's
|
787 |
-
// System.IO.Compression.DeflateStream.
|
788 |
-
//
|
789 |
-
// See http://decompres.blogspot.com/ for a quick explanation of this
|
790 |
-
// data type
|
791 |
-
$huffman_encoded = false;
|
792 |
-
|
793 |
-
// low nibble of first byte should be 0x08
|
794 |
-
list( , $first_nibble ) = unpack( 'h', $gzData );
|
795 |
-
|
796 |
-
// First 2 bytes should be divisible by 0x1F
|
797 |
-
list( , $first_two_bytes ) = unpack( 'n', $gzData );
|
798 |
-
|
799 |
-
if ( 0x08 == $first_nibble && 0 == ( $first_two_bytes % 0x1F ) )
|
800 |
-
$huffman_encoded = true;
|
801 |
-
|
802 |
-
if ( $huffman_encoded ) {
|
803 |
-
if ( false !== ( $decompressed = @gzinflate( substr( $gzData, 2 ) ) ) )
|
804 |
-
return $decompressed;
|
805 |
-
}
|
806 |
-
|
807 |
-
if ( "\x50\x4b\x03\x04" == substr( $gzData, 0, 4 ) ) {
|
808 |
-
// ZIP file format header
|
809 |
-
// Offset 6: 2 bytes, General-purpose field
|
810 |
-
// Offset 26: 2 bytes, filename length
|
811 |
-
// Offset 28: 2 bytes, optional field length
|
812 |
-
// Offset 30: Filename field, followed by optional field, followed
|
813 |
-
// immediately by data
|
814 |
-
list( , $general_purpose_flag ) = unpack( 'v', substr( $gzData, 6, 2 ) );
|
815 |
-
|
816 |
-
// If the file has been compressed on the fly, 0x08 bit is set of
|
817 |
-
// the general purpose field. We can use this to differentiate
|
818 |
-
// between a compressed document, and a ZIP file
|
819 |
-
$zip_compressed_on_the_fly = ( 0x08 == (0x08 & $general_purpose_flag ) );
|
820 |
-
|
821 |
-
if ( ! $zip_compressed_on_the_fly ) {
|
822 |
-
// Don't attempt to decode a compressed zip file
|
823 |
-
return $gzData;
|
824 |
-
}
|
825 |
-
|
826 |
-
// Determine the first byte of data, based on the above ZIP header
|
827 |
-
// offsets:
|
828 |
-
$first_file_start = array_sum( unpack( 'v2', substr( $gzData, 26, 4 ) ) );
|
829 |
-
if ( false !== ( $decompressed = @gzinflate( substr( $gzData, 30 + $first_file_start ) ) ) ) {
|
830 |
-
return $decompressed;
|
831 |
-
}
|
832 |
-
return false;
|
833 |
-
}
|
834 |
-
|
835 |
-
// Finally fall back to straight gzinflate
|
836 |
-
if ( false !== ( $decompressed = @gzinflate( $gzData ) ) ) {
|
837 |
-
return $decompressed;
|
838 |
-
}
|
839 |
-
|
840 |
-
// Fallback for all above failing, not expected, but included for
|
841 |
-
// debugging and preventing regressions and to track stats
|
842 |
-
if ( false !== ( $decompressed = @gzinflate( substr( $gzData, 2 ) ) ) ) {
|
843 |
-
return $decompressed;
|
844 |
-
}
|
845 |
-
|
846 |
-
return false;
|
847 |
-
}
|
848 |
-
|
849 |
-
public static function match_domain($host, $reference) {
|
850 |
-
// Check for a direct match
|
851 |
-
if ($host === $reference) {
|
852 |
-
return true;
|
853 |
-
}
|
854 |
-
|
855 |
-
// Calculate the valid wildcard match if the host is not an IP address
|
856 |
-
// Also validates that the host has 3 parts or more, as per Firefox's
|
857 |
-
// ruleset.
|
858 |
-
$parts = explode('.', $host);
|
859 |
-
if (ip2long($host) === false && count($parts) >= 3) {
|
860 |
-
$parts[0] = '*';
|
861 |
-
$wildcard = implode('.', $parts);
|
862 |
-
if ($wildcard === $reference) {
|
863 |
-
return true;
|
864 |
-
}
|
865 |
-
}
|
866 |
-
|
867 |
-
return false;
|
868 |
-
}
|
869 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Auth.php
DELETED
@@ -1,33 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Authentication provider interface
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Authentication
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Authentication provider interface
|
11 |
-
*
|
12 |
-
* Implement this interface to act as an authentication provider.
|
13 |
-
*
|
14 |
-
* Parameters should be passed via the constructor where possible, as this
|
15 |
-
* makes it much easier for users to use your provider.
|
16 |
-
*
|
17 |
-
* @see Requests_Hooks
|
18 |
-
* @package Requests
|
19 |
-
* @subpackage Authentication
|
20 |
-
*/
|
21 |
-
interface Requests_Auth {
|
22 |
-
/**
|
23 |
-
* Register hooks as needed
|
24 |
-
*
|
25 |
-
* This method is called in {@see Requests::request} when the user has set
|
26 |
-
* an instance as the 'auth' option. Use this callback to register all the
|
27 |
-
* hooks you'll need.
|
28 |
-
*
|
29 |
-
* @see Requests_Hooks::register
|
30 |
-
* @param Requests_Hooks $hooks Hook system
|
31 |
-
*/
|
32 |
-
public function register(Requests_Hooks &$hooks);
|
33 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Auth/Basic.php
DELETED
@@ -1,88 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Basic Authentication provider
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Authentication
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Basic Authentication provider
|
11 |
-
*
|
12 |
-
* Provides a handler for Basic HTTP authentication via the Authorization
|
13 |
-
* header.
|
14 |
-
*
|
15 |
-
* @package Requests
|
16 |
-
* @subpackage Authentication
|
17 |
-
*/
|
18 |
-
class Requests_Auth_Basic implements Requests_Auth {
|
19 |
-
/**
|
20 |
-
* Username
|
21 |
-
*
|
22 |
-
* @var string
|
23 |
-
*/
|
24 |
-
public $user;
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Password
|
28 |
-
*
|
29 |
-
* @var string
|
30 |
-
*/
|
31 |
-
public $pass;
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Constructor
|
35 |
-
*
|
36 |
-
* @throws Requests_Exception On incorrect number of arguments (`authbasicbadargs`)
|
37 |
-
* @param array|null $args Array of user and password. Must have exactly two elements
|
38 |
-
*/
|
39 |
-
public function __construct($args = null) {
|
40 |
-
if (is_array($args)) {
|
41 |
-
if (count($args) !== 2) {
|
42 |
-
throw new Requests_Exception('Invalid number of arguments', 'authbasicbadargs');
|
43 |
-
}
|
44 |
-
|
45 |
-
list($this->user, $this->pass) = $args;
|
46 |
-
}
|
47 |
-
}
|
48 |
-
|
49 |
-
/**
|
50 |
-
* Register the necessary callbacks
|
51 |
-
*
|
52 |
-
* @see curl_before_send
|
53 |
-
* @see fsockopen_header
|
54 |
-
* @param Requests_Hooks $hooks Hook system
|
55 |
-
*/
|
56 |
-
public function register(Requests_Hooks &$hooks) {
|
57 |
-
$hooks->register('curl.before_send', array(&$this, 'curl_before_send'));
|
58 |
-
$hooks->register('fsockopen.after_headers', array(&$this, 'fsockopen_header'));
|
59 |
-
}
|
60 |
-
|
61 |
-
/**
|
62 |
-
* Set cURL parameters before the data is sent
|
63 |
-
*
|
64 |
-
* @param resource $handle cURL resource
|
65 |
-
*/
|
66 |
-
public function curl_before_send(&$handle) {
|
67 |
-
curl_setopt($handle, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
|
68 |
-
curl_setopt($handle, CURLOPT_USERPWD, $this->getAuthString());
|
69 |
-
}
|
70 |
-
|
71 |
-
/**
|
72 |
-
* Add extra headers to the request before sending
|
73 |
-
*
|
74 |
-
* @param string $out HTTP header string
|
75 |
-
*/
|
76 |
-
public function fsockopen_header(&$out) {
|
77 |
-
$out .= "Authorization: Basic " . base64_encode($this->getAuthString()) . "\r\n";
|
78 |
-
}
|
79 |
-
|
80 |
-
/**
|
81 |
-
* Get the authentication string (user:pass)
|
82 |
-
*
|
83 |
-
* @return string
|
84 |
-
*/
|
85 |
-
public function getAuthString() {
|
86 |
-
return $this->user . ':' . $this->pass;
|
87 |
-
}
|
88 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Cookie.php
DELETED
@@ -1,374 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Cookie storage object
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Cookies
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Cookie storage object
|
11 |
-
*
|
12 |
-
* @package Requests
|
13 |
-
* @subpackage Cookies
|
14 |
-
*/
|
15 |
-
class Requests_Cookie {
|
16 |
-
/**
|
17 |
-
*
|
18 |
-
* @var string
|
19 |
-
*/
|
20 |
-
public $name;
|
21 |
-
|
22 |
-
/**
|
23 |
-
* @var string
|
24 |
-
*/
|
25 |
-
public $value;
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Cookie attributes
|
29 |
-
*
|
30 |
-
* Valid keys are (currently) path, domain, expires, max-age, secure and
|
31 |
-
* httponly.
|
32 |
-
*
|
33 |
-
* @var array
|
34 |
-
*/
|
35 |
-
public $attributes = array();
|
36 |
-
|
37 |
-
/**
|
38 |
-
* Cookie flags
|
39 |
-
*
|
40 |
-
* Valid keys are (currently) creation, last-access, persistent and
|
41 |
-
* host-only.
|
42 |
-
*
|
43 |
-
* @var array
|
44 |
-
*/
|
45 |
-
public $flags = array();
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Create a new cookie object
|
49 |
-
*
|
50 |
-
* @param string $name
|
51 |
-
* @param string $value
|
52 |
-
* @param array $attributes Associative array of attribute data
|
53 |
-
*/
|
54 |
-
public function __construct($name, $value, $attributes = array(), $flags = array()) {
|
55 |
-
$this->name = $name;
|
56 |
-
$this->value = $value;
|
57 |
-
$this->attributes = $attributes;
|
58 |
-
$default_flags = array(
|
59 |
-
'creation' => time(),
|
60 |
-
'last-access' => time(),
|
61 |
-
'persistent' => false,
|
62 |
-
'host-only' => true,
|
63 |
-
);
|
64 |
-
$this->flags = array_merge($default_flags, $flags);
|
65 |
-
|
66 |
-
$this->normalize();
|
67 |
-
}
|
68 |
-
|
69 |
-
/**
|
70 |
-
* Check if a cookie is valid for a given URI
|
71 |
-
*
|
72 |
-
* @param Requests_IRI $uri URI to check
|
73 |
-
* @return boolean Whether the cookie is valid for the given URI
|
74 |
-
*/
|
75 |
-
public function uriMatches(Requests_IRI $uri) {
|
76 |
-
if (!$this->domainMatches($uri->host)) {
|
77 |
-
return false;
|
78 |
-
}
|
79 |
-
|
80 |
-
if (!$this->pathMatches($uri->path)) {
|
81 |
-
return false;
|
82 |
-
}
|
83 |
-
|
84 |
-
if (!empty($this->attributes['secure']) && $uri->scheme !== 'https') {
|
85 |
-
return false;
|
86 |
-
}
|
87 |
-
|
88 |
-
return true;
|
89 |
-
}
|
90 |
-
|
91 |
-
/**
|
92 |
-
* Check if a cookie is valid for a given domain
|
93 |
-
*
|
94 |
-
* @param string $string Domain to check
|
95 |
-
* @return boolean Whether the cookie is valid for the given domain
|
96 |
-
*/
|
97 |
-
public function domainMatches($string) {
|
98 |
-
if (!isset($this->attributes['domain'])) {
|
99 |
-
// Cookies created manually; cookies created by Requests will set
|
100 |
-
// the domain to the requested domain
|
101 |
-
return true;
|
102 |
-
}
|
103 |
-
|
104 |
-
$domain_string = $this->attributes['domain'];
|
105 |
-
if ($domain_string === $string) {
|
106 |
-
// The domain string and the string are identical.
|
107 |
-
return true;
|
108 |
-
}
|
109 |
-
|
110 |
-
// If the cookie is marked as host-only and we don't have an exact
|
111 |
-
// match, reject the cookie
|
112 |
-
if ($this->flags['host-only'] === true) {
|
113 |
-
return false;
|
114 |
-
}
|
115 |
-
|
116 |
-
if (strlen($string) <= $domain_string) {
|
117 |
-
// For obvious reasons, the string cannot be a suffix if the domain
|
118 |
-
// is shorter than the domain string
|
119 |
-
return false;
|
120 |
-
}
|
121 |
-
|
122 |
-
if (substr($string, -1 * strlen($domain_string)) !== $domain_string) {
|
123 |
-
// The domain string should be a suffix of the string.
|
124 |
-
return false;
|
125 |
-
}
|
126 |
-
|
127 |
-
$prefix = substr($string, 0, strlen($string) - strlen($domain_string));
|
128 |
-
if (substr($prefix, -1) !== '.') {
|
129 |
-
// The last character of the string that is not included in the
|
130 |
-
// domain string should be a %x2E (".") character.
|
131 |
-
return false;
|
132 |
-
}
|
133 |
-
|
134 |
-
if (preg_match('#^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $string)) {
|
135 |
-
// The string should be a host name (i.e., not an IP address).
|
136 |
-
return false;
|
137 |
-
}
|
138 |
-
|
139 |
-
return true;
|
140 |
-
}
|
141 |
-
|
142 |
-
/**
|
143 |
-
* Check if a cookie is valid for a given path
|
144 |
-
*
|
145 |
-
* From the path-match check in RFC 6265 section 5.1.4
|
146 |
-
*
|
147 |
-
* @param string $request_path Path to check
|
148 |
-
* @return boolean Whether the cookie is valid for the given path
|
149 |
-
*/
|
150 |
-
public function pathMatches($request_path) {
|
151 |
-
if (empty($request_path)) {
|
152 |
-
// Normalize empty path to root
|
153 |
-
$request_path = '/';
|
154 |
-
}
|
155 |
-
|
156 |
-
if (!isset($this->attributes['path'])) {
|
157 |
-
// Cookies created manually; cookies created by Requests will set
|
158 |
-
// the path to the requested path
|
159 |
-
return true;
|
160 |
-
}
|
161 |
-
|
162 |
-
$cookie_path = $this->attributes['path'];
|
163 |
-
|
164 |
-
if ($cookie_path === $request_path) {
|
165 |
-
// The cookie-path and the request-path are identical.
|
166 |
-
return true;
|
167 |
-
}
|
168 |
-
|
169 |
-
if (strlen($request_path) > strlen($cookie_path) && substr($request_path, 0, strlen($cookie_path)) === $cookie_path) {
|
170 |
-
if (substr($cookie_path, -1) === '/') {
|
171 |
-
// The cookie-path is a prefix of the request-path, and the last
|
172 |
-
// character of the cookie-path is %x2F ("/").
|
173 |
-
return true;
|
174 |
-
}
|
175 |
-
|
176 |
-
if (substr($request_path, strlen($cookie_path), 1) === '/') {
|
177 |
-
// The cookie-path is a prefix of the request-path, and the
|
178 |
-
// first character of the request-path that is not included in
|
179 |
-
// the cookie-path is a %x2F ("/") character.
|
180 |
-
return true;
|
181 |
-
}
|
182 |
-
}
|
183 |
-
|
184 |
-
return false;
|
185 |
-
}
|
186 |
-
|
187 |
-
/**
|
188 |
-
* Normalize cookie and attributes
|
189 |
-
*
|
190 |
-
* @return boolean Whether the cookie was successfully normalized
|
191 |
-
*/
|
192 |
-
public function normalize() {
|
193 |
-
foreach ($this->attributes as $key => $value) {
|
194 |
-
$orig_value = $value;
|
195 |
-
switch ($key) {
|
196 |
-
case 'domain':
|
197 |
-
// Domain normalization, as per RFC 6265 section 5.2.3
|
198 |
-
if ($value[0] === '.') {
|
199 |
-
$value = substr($value, 1);
|
200 |
-
}
|
201 |
-
break;
|
202 |
-
}
|
203 |
-
|
204 |
-
if ($value !== $orig_value) {
|
205 |
-
$this->attributes[$key] = $value;
|
206 |
-
}
|
207 |
-
}
|
208 |
-
|
209 |
-
return true;
|
210 |
-
}
|
211 |
-
|
212 |
-
/**
|
213 |
-
* Format a cookie for a Cookie header
|
214 |
-
*
|
215 |
-
* This is used when sending cookies to a server.
|
216 |
-
*
|
217 |
-
* @return string Cookie formatted for Cookie header
|
218 |
-
*/
|
219 |
-
public function formatForHeader() {
|
220 |
-
return sprintf('%s=%s', $this->name, $this->value);
|
221 |
-
}
|
222 |
-
|
223 |
-
/**
|
224 |
-
* Format a cookie for a Set-Cookie header
|
225 |
-
*
|
226 |
-
* This is used when sending cookies to clients. This isn't really
|
227 |
-
* applicable to client-side usage, but might be handy for debugging.
|
228 |
-
*
|
229 |
-
* @return string Cookie formatted for Set-Cookie header
|
230 |
-
*/
|
231 |
-
public function formatForSetCookie() {
|
232 |
-
$header_value = $this->formatForHeader();
|
233 |
-
if (!empty($this->attributes)) {
|
234 |
-
$parts = array();
|
235 |
-
foreach ($this->attributes as $key => $value) {
|
236 |
-
// Ignore non-associative attributes
|
237 |
-
if (is_numeric($key)) {
|
238 |
-
$parts[] = $value;
|
239 |
-
}
|
240 |
-
else {
|
241 |
-
$parts[] = sprintf('%s=%s', $key, $value);
|
242 |
-
}
|
243 |
-
}
|
244 |
-
|
245 |
-
$header_value .= '; ' . implode('; ', $parts);
|
246 |
-
}
|
247 |
-
return $header_value;
|
248 |
-
}
|
249 |
-
|
250 |
-
/**
|
251 |
-
* Get the cookie value
|
252 |
-
*
|
253 |
-
* Attributes and other data can be accessed via methods.
|
254 |
-
*/
|
255 |
-
public function __toString() {
|
256 |
-
return $this->value;
|
257 |
-
}
|
258 |
-
|
259 |
-
/**
|
260 |
-
* Parse a cookie string into a cookie object
|
261 |
-
*
|
262 |
-
* Based on Mozilla's parsing code in Firefox and related projects, which
|
263 |
-
* is an intentional deviation from RFC 2109 and RFC 2616. RFC 6265
|
264 |
-
* specifies some of this handling, but not in a thorough manner.
|
265 |
-
*
|
266 |
-
* @param string Cookie header value (from a Set-Cookie header)
|
267 |
-
* @return Requests_Cookie Parsed cookie object
|
268 |
-
*/
|
269 |
-
public static function parse($string, $name = '') {
|
270 |
-
$parts = explode(';', $string);
|
271 |
-
$kvparts = array_shift($parts);
|
272 |
-
|
273 |
-
if (!empty($name)) {
|
274 |
-
$value = $string;
|
275 |
-
}
|
276 |
-
elseif (strpos($kvparts, '=') === false) {
|
277 |
-
// Some sites might only have a value without the equals separator.
|
278 |
-
// Deviate from RFC 6265 and pretend it was actually a blank name
|
279 |
-
// (`=foo`)
|
280 |
-
//
|
281 |
-
// https://bugzilla.mozilla.org/show_bug.cgi?id=169091
|
282 |
-
$name = '';
|
283 |
-
$value = $kvparts;
|
284 |
-
}
|
285 |
-
else {
|
286 |
-
list($name, $value) = explode('=', $kvparts, 2);
|
287 |
-
}
|
288 |
-
$name = trim($name);
|
289 |
-
$value = trim($value);
|
290 |
-
|
291 |
-
// Attribute key are handled case-insensitively
|
292 |
-
$attributes = new Requests_Utility_CaseInsensitiveDictionary();
|
293 |
-
|
294 |
-
if (!empty($parts)) {
|
295 |
-
foreach ($parts as $part) {
|
296 |
-
if (strpos($part, '=') === false) {
|
297 |
-
$part_key = $part;
|
298 |
-
$part_value = true;
|
299 |
-
}
|
300 |
-
else {
|
301 |
-
list($part_key, $part_value) = explode('=', $part, 2);
|
302 |
-
$part_value = trim($part_value);
|
303 |
-
}
|
304 |
-
|
305 |
-
$part_key = trim($part_key);
|
306 |
-
$attributes[$part_key] = $part_value;
|
307 |
-
}
|
308 |
-
}
|
309 |
-
|
310 |
-
return new Requests_Cookie($name, $value, $attributes);
|
311 |
-
}
|
312 |
-
|
313 |
-
/**
|
314 |
-
* Parse all Set-Cookie headers from request headers
|
315 |
-
*
|
316 |
-
* @param Requests_Response_Headers $headers
|
317 |
-
* @return array
|
318 |
-
*/
|
319 |
-
public static function parseFromHeaders(Requests_Response_Headers $headers, Requests_IRI $origin = null) {
|
320 |
-
$cookie_headers = $headers->getValues('Set-Cookie');
|
321 |
-
if (empty($cookie_headers)) {
|
322 |
-
return array();
|
323 |
-
}
|
324 |
-
|
325 |
-
$cookies = array();
|
326 |
-
foreach ($cookie_headers as $header) {
|
327 |
-
$parsed = self::parse($header);
|
328 |
-
|
329 |
-
// Default domain/path attributes
|
330 |
-
if (empty($parsed->attributes['domain']) && !empty($origin)) {
|
331 |
-
$parsed->attributes['domain'] = $origin->host;
|
332 |
-
$parsed->flags['host-only'] = false;
|
333 |
-
}
|
334 |
-
else {
|
335 |
-
$parsed->flags['host-only'] = true;
|
336 |
-
}
|
337 |
-
|
338 |
-
$path_is_valid = (!empty($parsed->attributes['path']) && $parsed->attributes['path'][0] === '/');
|
339 |
-
if (!$path_is_valid && !empty($origin)) {
|
340 |
-
$path = $origin->path;
|
341 |
-
|
342 |
-
// Default path normalization as per RFC 6265 section 5.1.4
|
343 |
-
if (substr($path, 0, 1) !== '/') {
|
344 |
-
// If the uri-path is empty or if the first character of
|
345 |
-
// the uri-path is not a %x2F ("/") character, output
|
346 |
-
// %x2F ("/") and skip the remaining steps.
|
347 |
-
$path = '/';
|
348 |
-
}
|
349 |
-
elseif (substr_count($path, '/') === 1) {
|
350 |
-
// If the uri-path contains no more than one %x2F ("/")
|
351 |
-
// character, output %x2F ("/") and skip the remaining
|
352 |
-
// step.
|
353 |
-
$path = '/';
|
354 |
-
}
|
355 |
-
else {
|
356 |
-
// Output the characters of the uri-path from the first
|
357 |
-
// character up to, but not including, the right-most
|
358 |
-
// %x2F ("/").
|
359 |
-
$path = substr($path, 0, strrpos($path, '/'));
|
360 |
-
}
|
361 |
-
$parsed->attributes['path'] = $path;
|
362 |
-
}
|
363 |
-
|
364 |
-
// Reject invalid cookie domains
|
365 |
-
if (!$parsed->domainMatches($origin->host)) {
|
366 |
-
continue;
|
367 |
-
}
|
368 |
-
|
369 |
-
$cookies[$parsed->name] = $parsed;
|
370 |
-
}
|
371 |
-
|
372 |
-
return $cookies;
|
373 |
-
}
|
374 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Cookie/Jar.php
DELETED
@@ -1,158 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Cookie holder object
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Cookies
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Cookie holder object
|
11 |
-
*
|
12 |
-
* @package Requests
|
13 |
-
* @subpackage Cookies
|
14 |
-
*/
|
15 |
-
class Requests_Cookie_Jar implements ArrayAccess, IteratorAggregate {
|
16 |
-
/**
|
17 |
-
* Actual item data
|
18 |
-
*
|
19 |
-
* @var array
|
20 |
-
*/
|
21 |
-
protected $cookies = array();
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Create a new jar
|
25 |
-
*
|
26 |
-
* @param array $cookies Existing cookie values
|
27 |
-
*/
|
28 |
-
public function __construct($cookies = array()) {
|
29 |
-
$this->cookies = $cookies;
|
30 |
-
}
|
31 |
-
|
32 |
-
/**
|
33 |
-
* Normalise cookie data into a Requests_Cookie
|
34 |
-
*
|
35 |
-
* @param string|Requests_Cookie $cookie
|
36 |
-
* @return Requests_Cookie
|
37 |
-
*/
|
38 |
-
public function normalizeCookie($cookie, $key = null) {
|
39 |
-
if ($cookie instanceof Requests_Cookie) {
|
40 |
-
return $cookie;
|
41 |
-
}
|
42 |
-
|
43 |
-
return Requests_Cookie::parse($cookie, $key);
|
44 |
-
}
|
45 |
-
|
46 |
-
/**
|
47 |
-
* Check if the given item exists
|
48 |
-
*
|
49 |
-
* @param string $key Item key
|
50 |
-
* @return boolean Does the item exist?
|
51 |
-
*/
|
52 |
-
public function offsetExists($key) {
|
53 |
-
return isset($this->cookies[$key]);
|
54 |
-
}
|
55 |
-
|
56 |
-
/**
|
57 |
-
* Get the value for the item
|
58 |
-
*
|
59 |
-
* @param string $key Item key
|
60 |
-
* @return string Item value
|
61 |
-
*/
|
62 |
-
public function offsetGet($key) {
|
63 |
-
if (!isset($this->cookies[$key]))
|
64 |
-
return null;
|
65 |
-
|
66 |
-
return $this->cookies[$key];
|
67 |
-
}
|
68 |
-
|
69 |
-
/**
|
70 |
-
* Set the given item
|
71 |
-
*
|
72 |
-
* @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
|
73 |
-
*
|
74 |
-
* @param string $key Item name
|
75 |
-
* @param string $value Item value
|
76 |
-
*/
|
77 |
-
public function offsetSet($key, $value) {
|
78 |
-
if ($key === null) {
|
79 |
-
throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
|
80 |
-
}
|
81 |
-
|
82 |
-
$this->cookies[$key] = $value;
|
83 |
-
}
|
84 |
-
|
85 |
-
/**
|
86 |
-
* Unset the given header
|
87 |
-
*
|
88 |
-
* @param string $key
|
89 |
-
*/
|
90 |
-
public function offsetUnset($key) {
|
91 |
-
unset($this->cookies[$key]);
|
92 |
-
}
|
93 |
-
|
94 |
-
/**
|
95 |
-
* Get an iterator for the data
|
96 |
-
*
|
97 |
-
* @return ArrayIterator
|
98 |
-
*/
|
99 |
-
public function getIterator() {
|
100 |
-
return new ArrayIterator($this->cookies);
|
101 |
-
}
|
102 |
-
|
103 |
-
/**
|
104 |
-
* Register the cookie handler with the request's hooking system
|
105 |
-
*
|
106 |
-
* @param Requests_Hooker $hooks Hooking system
|
107 |
-
*/
|
108 |
-
public function register(Requests_Hooker $hooks) {
|
109 |
-
$hooks->register('requests.before_request', array($this, 'before_request'));
|
110 |
-
$hooks->register('requests.before_redirect_check', array($this, 'before_redirect_check'));
|
111 |
-
}
|
112 |
-
|
113 |
-
/**
|
114 |
-
* Add Cookie header to a request if we have any
|
115 |
-
*
|
116 |
-
* As per RFC 6265, cookies are separated by '; '
|
117 |
-
*
|
118 |
-
* @param string $url
|
119 |
-
* @param array $headers
|
120 |
-
* @param array $data
|
121 |
-
* @param string $type
|
122 |
-
* @param array $options
|
123 |
-
*/
|
124 |
-
public function before_request($url, &$headers, &$data, &$type, &$options) {
|
125 |
-
if ( ! $url instanceof Requests_IRI ) {
|
126 |
-
$url = new Requests_IRI($url);
|
127 |
-
}
|
128 |
-
|
129 |
-
if (!empty($this->cookies)) {
|
130 |
-
$cookies = array();
|
131 |
-
foreach ($this->cookies as $key => $cookie) {
|
132 |
-
$cookie = $this->normalizeCookie($cookie, $key);
|
133 |
-
|
134 |
-
if ( $cookie->domainMatches( $url->host ) ) {
|
135 |
-
$cookies[] = $cookie->formatForHeader();
|
136 |
-
}
|
137 |
-
}
|
138 |
-
|
139 |
-
$headers['Cookie'] = implode('; ', $cookies);
|
140 |
-
}
|
141 |
-
}
|
142 |
-
|
143 |
-
/**
|
144 |
-
* Parse all cookies from a response and attach them to the response
|
145 |
-
*
|
146 |
-
* @var Requests_Response $response
|
147 |
-
*/
|
148 |
-
public function before_redirect_check(Requests_Response &$return) {
|
149 |
-
$url = $return->url;
|
150 |
-
if ( ! $url instanceof Requests_IRI ) {
|
151 |
-
$url = new Requests_IRI($url);
|
152 |
-
}
|
153 |
-
|
154 |
-
$cookies = Requests_Cookie::parseFromHeaders($return->headers, $url);
|
155 |
-
$this->cookies = array_merge($this->cookies, $cookies);
|
156 |
-
$return->cookies = $this;
|
157 |
-
}
|
158 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception.php
DELETED
@@ -1,62 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for HTTP requests
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for HTTP requests
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception extends Exception {
|
14 |
-
/**
|
15 |
-
* Type of exception
|
16 |
-
*
|
17 |
-
* @var string
|
18 |
-
*/
|
19 |
-
protected $type;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Data associated with the exception
|
23 |
-
*
|
24 |
-
* @var mixed
|
25 |
-
*/
|
26 |
-
protected $data;
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Create a new exception
|
30 |
-
*
|
31 |
-
* @param string $message Exception message
|
32 |
-
* @param string $type Exception type
|
33 |
-
* @param mixed $data Associated data
|
34 |
-
* @param integer $code Exception numerical code, if applicable
|
35 |
-
*/
|
36 |
-
public function __construct($message, $type, $data = null, $code = 0) {
|
37 |
-
parent::__construct($message, $code);
|
38 |
-
|
39 |
-
$this->type = $type;
|
40 |
-
$this->data = $data;
|
41 |
-
}
|
42 |
-
|
43 |
-
/**
|
44 |
-
* Like {@see getCode()}, but a string code.
|
45 |
-
*
|
46 |
-
* @codeCoverageIgnore
|
47 |
-
* @return string
|
48 |
-
*/
|
49 |
-
public function getType() {
|
50 |
-
return $this->type;
|
51 |
-
}
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Gives any relevant data
|
55 |
-
*
|
56 |
-
* @codeCoverageIgnore
|
57 |
-
* @return mixed
|
58 |
-
*/
|
59 |
-
public function getData() {
|
60 |
-
return $this->data;
|
61 |
-
}
|
62 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP.php
DELETED
@@ -1,67 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception based on HTTP response
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception based on HTTP response
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP extends Requests_Exception {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 0;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Unknown';
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Create a new exception
|
30 |
-
*
|
31 |
-
* There is no mechanism to pass in the status code, as this is set by the
|
32 |
-
* subclass used. Reason phrases can vary, however.
|
33 |
-
*
|
34 |
-
* @param string $reason Reason phrase
|
35 |
-
* @param mixed $data Associated data
|
36 |
-
*/
|
37 |
-
public function __construct($reason = null, $data = null) {
|
38 |
-
if ($reason !== null) {
|
39 |
-
$this->reason = $reason;
|
40 |
-
}
|
41 |
-
|
42 |
-
$message = sprintf('%d %s', $this->code, $this->reason);
|
43 |
-
parent::__construct($message, 'httpresponse', $data, $this->code);
|
44 |
-
}
|
45 |
-
|
46 |
-
/**
|
47 |
-
* Get the status message
|
48 |
-
*/
|
49 |
-
public function getReason() {
|
50 |
-
return $this->reason;
|
51 |
-
}
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Get the correct exception class for a given error code
|
55 |
-
*
|
56 |
-
* @param int $code HTTP status code
|
57 |
-
* @return string Exception class name to use
|
58 |
-
*/
|
59 |
-
public static function get_class($code) {
|
60 |
-
$class = sprintf('Requests_Exception_HTTP_%d', $code);
|
61 |
-
if (class_exists($class)) {
|
62 |
-
return $class;
|
63 |
-
}
|
64 |
-
|
65 |
-
return 'Requests_Exception_HTTP_Unknown';
|
66 |
-
}
|
67 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/400.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 400 Bad Request responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 400 Bad Request responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_400 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 400;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Bad Request';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/401.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 401 Unauthorized responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 401 Unauthorized responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_401 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 401;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Unauthorized';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/402.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 402 Payment Required responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 402 Payment Required responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_402 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 402;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Payment Required';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/403.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 403 Forbidden responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 403 Forbidden responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_403 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 403;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Forbidden';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/404.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 404 Not Found responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 404 Not Found responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_404 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 404;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Not Found';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/405.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 405 Method Not Allowed responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 405 Method Not Allowed responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_405 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 405;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Method Not Allowed';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/406.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 406 Not Acceptable responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 406 Not Acceptable responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_406 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 406;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Not Acceptable';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/407.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 407 Proxy Authentication Required responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 407 Proxy Authentication Required responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_407 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 407;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Proxy Authentication Required';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/408.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 408 Request Timeout responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 408 Request Timeout responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_408 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 408;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Request Timeout';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/409.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 409 Conflict responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 409 Conflict responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_409 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 409;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Conflict';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/410.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 410 Gone responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 410 Gone responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_410 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 410;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Gone';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/411.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 411 Length Required responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 411 Length Required responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_411 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 411;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Length Required';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/412.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 412 Precondition Failed responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 412 Precondition Failed responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_412 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 412;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Precondition Failed';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/413.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 413 Request Entity Too Large responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 413 Request Entity Too Large responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_413 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 413;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Request Entity Too Large';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/414.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 414 Request-URI Too Large responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 414 Request-URI Too Large responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_414 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 414;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Request-URI Too Large';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/415.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 415 Unsupported Media Type responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 415 Unsupported Media Type responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_415 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 415;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Unsupported Media Type';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/416.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 416 Requested Range Not Satisfiable responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 416 Requested Range Not Satisfiable responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_416 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 416;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Requested Range Not Satisfiable';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/417.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 417 Expectation Failed responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 417 Expectation Failed responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_417 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 417;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Expectation Failed';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/418.php
DELETED
@@ -1,29 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 418 I'm A Teapot responses
|
4 |
-
*
|
5 |
-
* @see http://tools.ietf.org/html/rfc2324
|
6 |
-
* @package Requests
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Exception for 418 I'm A Teapot responses
|
11 |
-
*
|
12 |
-
* @see http://tools.ietf.org/html/rfc2324
|
13 |
-
* @package Requests
|
14 |
-
*/
|
15 |
-
class Requests_Exception_HTTP_418 extends Requests_Exception_HTTP {
|
16 |
-
/**
|
17 |
-
* HTTP status code
|
18 |
-
*
|
19 |
-
* @var integer
|
20 |
-
*/
|
21 |
-
protected $code = 418;
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Reason phrase
|
25 |
-
*
|
26 |
-
* @var string
|
27 |
-
*/
|
28 |
-
protected $reason = "I'm A Teapot";
|
29 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/428.php
DELETED
@@ -1,29 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 428 Precondition Required responses
|
4 |
-
*
|
5 |
-
* @see http://tools.ietf.org/html/rfc6585
|
6 |
-
* @package Requests
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Exception for 428 Precondition Required responses
|
11 |
-
*
|
12 |
-
* @see http://tools.ietf.org/html/rfc6585
|
13 |
-
* @package Requests
|
14 |
-
*/
|
15 |
-
class Requests_Exception_HTTP_428 extends Requests_Exception_HTTP {
|
16 |
-
/**
|
17 |
-
* HTTP status code
|
18 |
-
*
|
19 |
-
* @var integer
|
20 |
-
*/
|
21 |
-
protected $code = 428;
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Reason phrase
|
25 |
-
*
|
26 |
-
* @var string
|
27 |
-
*/
|
28 |
-
protected $reason = 'Precondition Required';
|
29 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/429.php
DELETED
@@ -1,29 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 429 Too Many Requests responses
|
4 |
-
*
|
5 |
-
* @see http://tools.ietf.org/html/draft-nottingham-http-new-status-04
|
6 |
-
* @package Requests
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Exception for 429 Too Many Requests responses
|
11 |
-
*
|
12 |
-
* @see http://tools.ietf.org/html/draft-nottingham-http-new-status-04
|
13 |
-
* @package Requests
|
14 |
-
*/
|
15 |
-
class Requests_Exception_HTTP_429 extends Requests_Exception_HTTP {
|
16 |
-
/**
|
17 |
-
* HTTP status code
|
18 |
-
*
|
19 |
-
* @var integer
|
20 |
-
*/
|
21 |
-
protected $code = 429;
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Reason phrase
|
25 |
-
*
|
26 |
-
* @var string
|
27 |
-
*/
|
28 |
-
protected $reason = 'Too Many Requests';
|
29 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/431.php
DELETED
@@ -1,29 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 431 Request Header Fields Too Large responses
|
4 |
-
*
|
5 |
-
* @see http://tools.ietf.org/html/rfc6585
|
6 |
-
* @package Requests
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Exception for 431 Request Header Fields Too Large responses
|
11 |
-
*
|
12 |
-
* @see http://tools.ietf.org/html/rfc6585
|
13 |
-
* @package Requests
|
14 |
-
*/
|
15 |
-
class Requests_Exception_HTTP_431 extends Requests_Exception_HTTP {
|
16 |
-
/**
|
17 |
-
* HTTP status code
|
18 |
-
*
|
19 |
-
* @var integer
|
20 |
-
*/
|
21 |
-
protected $code = 431;
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Reason phrase
|
25 |
-
*
|
26 |
-
* @var string
|
27 |
-
*/
|
28 |
-
protected $reason = 'Request Header Fields Too Large';
|
29 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/500.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 500 Internal Server Error responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 500 Internal Server Error responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_500 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 500;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Internal Server Error';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/501.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 501 Not Implemented responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 501 Not Implemented responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_501 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 501;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Not Implemented';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/502.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 502 Bad Gateway responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 502 Bad Gateway responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_502 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 502;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Bad Gateway';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/503.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 503 Service Unavailable responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 503 Service Unavailable responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_503 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 503;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Service Unavailable';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/504.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 504 Gateway Timeout responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 504 Gateway Timeout responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_504 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 504;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Gateway Timeout';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/505.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 505 HTTP Version Not Supported responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for 505 HTTP Version Not Supported responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_505 extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 505;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'HTTP Version Not Supported';
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/511.php
DELETED
@@ -1,29 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for 511 Network Authentication Required responses
|
4 |
-
*
|
5 |
-
* @see http://tools.ietf.org/html/rfc6585
|
6 |
-
* @package Requests
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Exception for 511 Network Authentication Required responses
|
11 |
-
*
|
12 |
-
* @see http://tools.ietf.org/html/rfc6585
|
13 |
-
* @package Requests
|
14 |
-
*/
|
15 |
-
class Requests_Exception_HTTP_511 extends Requests_Exception_HTTP {
|
16 |
-
/**
|
17 |
-
* HTTP status code
|
18 |
-
*
|
19 |
-
* @var integer
|
20 |
-
*/
|
21 |
-
protected $code = 511;
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Reason phrase
|
25 |
-
*
|
26 |
-
* @var string
|
27 |
-
*/
|
28 |
-
protected $reason = 'Network Authentication Required';
|
29 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Exception/HTTP/Unknown.php
DELETED
@@ -1,44 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Exception for unknown status responses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Exception for unknown status responses
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Exception_HTTP_Unknown extends Requests_Exception_HTTP {
|
14 |
-
/**
|
15 |
-
* HTTP status code
|
16 |
-
*
|
17 |
-
* @var integer
|
18 |
-
*/
|
19 |
-
protected $code = 0;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Reason phrase
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
protected $reason = 'Unknown';
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Create a new exception
|
30 |
-
*
|
31 |
-
* If `$data` is an instance of {@see Requests_Response}, uses the status
|
32 |
-
* code from it. Otherwise, sets as 0
|
33 |
-
*
|
34 |
-
* @param string $reason Reason phrase
|
35 |
-
* @param mixed $data Associated data
|
36 |
-
*/
|
37 |
-
public function __construct($reason = null, $data = null) {
|
38 |
-
if ($data instanceof Requests_Response) {
|
39 |
-
$this->code = $data->status_code;
|
40 |
-
}
|
41 |
-
|
42 |
-
parent::__construct($reason, $data);
|
43 |
-
}
|
44 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Hooker.php
DELETED
@@ -1,33 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Event dispatcher
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Utilities
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Event dispatcher
|
11 |
-
*
|
12 |
-
* @package Requests
|
13 |
-
* @subpackage Utilities
|
14 |
-
*/
|
15 |
-
interface Requests_Hooker {
|
16 |
-
/**
|
17 |
-
* Register a callback for a hook
|
18 |
-
*
|
19 |
-
* @param string $hook Hook name
|
20 |
-
* @param callback $callback Function/method to call on event
|
21 |
-
* @param int $priority Priority number. <0 is executed earlier, >0 is executed later
|
22 |
-
*/
|
23 |
-
public function register($hook, $callback, $priority = 0);
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Dispatch a message
|
27 |
-
*
|
28 |
-
* @param string $hook Hook name
|
29 |
-
* @param array $parameters Parameters to pass to callbacks
|
30 |
-
* @return boolean Successfulness
|
31 |
-
*/
|
32 |
-
public function dispatch($hook, $parameters = array());
|
33 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Hooks.php
DELETED
@@ -1,61 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Handles adding and dispatching events
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Utilities
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Handles adding and dispatching events
|
11 |
-
*
|
12 |
-
* @package Requests
|
13 |
-
* @subpackage Utilities
|
14 |
-
*/
|
15 |
-
class Requests_Hooks implements Requests_Hooker {
|
16 |
-
/**
|
17 |
-
* Constructor
|
18 |
-
*/
|
19 |
-
public function __construct() {
|
20 |
-
// pass
|
21 |
-
}
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Register a callback for a hook
|
25 |
-
*
|
26 |
-
* @param string $hook Hook name
|
27 |
-
* @param callback $callback Function/method to call on event
|
28 |
-
* @param int $priority Priority number. <0 is executed earlier, >0 is executed later
|
29 |
-
*/
|
30 |
-
public function register($hook, $callback, $priority = 0) {
|
31 |
-
if (!isset($this->hooks[$hook])) {
|
32 |
-
$this->hooks[$hook] = array();
|
33 |
-
}
|
34 |
-
if (!isset($this->hooks[$hook][$priority])) {
|
35 |
-
$this->hooks[$hook][$priority] = array();
|
36 |
-
}
|
37 |
-
|
38 |
-
$this->hooks[$hook][$priority][] = $callback;
|
39 |
-
}
|
40 |
-
|
41 |
-
/**
|
42 |
-
* Dispatch a message
|
43 |
-
*
|
44 |
-
* @param string $hook Hook name
|
45 |
-
* @param array $parameters Parameters to pass to callbacks
|
46 |
-
* @return boolean Successfulness
|
47 |
-
*/
|
48 |
-
public function dispatch($hook, $parameters = array()) {
|
49 |
-
if (empty($this->hooks[$hook])) {
|
50 |
-
return false;
|
51 |
-
}
|
52 |
-
|
53 |
-
foreach ($this->hooks[$hook] as $priority => $hooked) {
|
54 |
-
foreach ($hooked as $callback) {
|
55 |
-
call_user_func_array($callback, $parameters);
|
56 |
-
}
|
57 |
-
}
|
58 |
-
|
59 |
-
return true;
|
60 |
-
}
|
61 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/IDNAEncoder.php
DELETED
@@ -1,390 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* IDNA URL encoder
|
5 |
-
*
|
6 |
-
* Note: Not fully compliant, as nameprep does nothing yet.
|
7 |
-
*
|
8 |
-
* @package Requests
|
9 |
-
* @subpackage Utilities
|
10 |
-
* @see http://tools.ietf.org/html/rfc3490 IDNA specification
|
11 |
-
* @see http://tools.ietf.org/html/rfc3492 Punycode/Bootstrap specification
|
12 |
-
*/
|
13 |
-
class Requests_IDNAEncoder {
|
14 |
-
/**
|
15 |
-
* ACE prefix used for IDNA
|
16 |
-
*
|
17 |
-
* @see http://tools.ietf.org/html/rfc3490#section-5
|
18 |
-
* @var string
|
19 |
-
*/
|
20 |
-
const ACE_PREFIX = 'xn--';
|
21 |
-
|
22 |
-
/**#@+
|
23 |
-
* Bootstrap constant for Punycode
|
24 |
-
*
|
25 |
-
* @see http://tools.ietf.org/html/rfc3492#section-5
|
26 |
-
* @var int
|
27 |
-
*/
|
28 |
-
const BOOTSTRAP_BASE = 36;
|
29 |
-
const BOOTSTRAP_TMIN = 1;
|
30 |
-
const BOOTSTRAP_TMAX = 26;
|
31 |
-
const BOOTSTRAP_SKEW = 38;
|
32 |
-
const BOOTSTRAP_DAMP = 700;
|
33 |
-
const BOOTSTRAP_INITIAL_BIAS = 72;
|
34 |
-
const BOOTSTRAP_INITIAL_N = 128;
|
35 |
-
/**#@-*/
|
36 |
-
|
37 |
-
/**
|
38 |
-
* Encode a hostname using Punycode
|
39 |
-
*
|
40 |
-
* @param string $string Hostname
|
41 |
-
* @return string Punycode-encoded hostname
|
42 |
-
*/
|
43 |
-
public static function encode($string) {
|
44 |
-
$parts = explode('.', $string);
|
45 |
-
foreach ($parts as &$part) {
|
46 |
-
$part = self::to_ascii($part);
|
47 |
-
}
|
48 |
-
return implode('.', $parts);
|
49 |
-
}
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Convert a UTF-8 string to an ASCII string using Punycode
|
53 |
-
*
|
54 |
-
* @throws Requests_Exception Provided string longer than 64 ASCII characters (`idna.provided_too_long`)
|
55 |
-
* @throws Requests_Exception Prepared string longer than 64 ASCII characters (`idna.prepared_too_long`)
|
56 |
-
* @throws Requests_Exception Provided string already begins with xn-- (`idna.provided_is_prefixed`)
|
57 |
-
* @throws Requests_Exception Encoded string longer than 64 ASCII characters (`idna.encoded_too_long`)
|
58 |
-
*
|
59 |
-
* @param string $string ASCII or UTF-8 string (max length 64 characters)
|
60 |
-
* @return string ASCII string
|
61 |
-
*/
|
62 |
-
public static function to_ascii($string) {
|
63 |
-
// Step 1: Check if the string is already ASCII
|
64 |
-
if (self::is_ascii($string)) {
|
65 |
-
// Skip to step 7
|
66 |
-
if (strlen($string) < 64) {
|
67 |
-
return $string;
|
68 |
-
}
|
69 |
-
|
70 |
-
throw new Requests_Exception('Provided string is too long', 'idna.provided_too_long', $string);
|
71 |
-
}
|
72 |
-
|
73 |
-
// Step 2: nameprep
|
74 |
-
$string = self::nameprep($string);
|
75 |
-
|
76 |
-
// Step 3: UseSTD3ASCIIRules is false, continue
|
77 |
-
// Step 4: Check if it's ASCII now
|
78 |
-
if (self::is_ascii($string)) {
|
79 |
-
// Skip to step 7
|
80 |
-
if (strlen($string) < 64) {
|
81 |
-
return $string;
|
82 |
-
}
|
83 |
-
|
84 |
-
throw new Requests_Exception('Prepared string is too long', 'idna.prepared_too_long', $string);
|
85 |
-
}
|
86 |
-
|
87 |
-
// Step 5: Check ACE prefix
|
88 |
-
if (strpos($string, self::ACE_PREFIX) === 0) {
|
89 |
-
throw new Requests_Exception('Provided string begins with ACE prefix', 'idna.provided_is_prefixed', $string);
|
90 |
-
}
|
91 |
-
|
92 |
-
// Step 6: Encode with Punycode
|
93 |
-
$string = self::punycode_encode($string);
|
94 |
-
|
95 |
-
// Step 7: Prepend ACE prefix
|
96 |
-
$string = self::ACE_PREFIX . $string;
|
97 |
-
|
98 |
-
// Step 8: Check size
|
99 |
-
if (strlen($string) < 64) {
|
100 |
-
return $string;
|
101 |
-
}
|
102 |
-
|
103 |
-
throw new Requests_Exception('Encoded string is too long', 'idna.encoded_too_long', $string);
|
104 |
-
}
|
105 |
-
|
106 |
-
/**
|
107 |
-
* Check whether a given string contains only ASCII characters
|
108 |
-
*
|
109 |
-
* @internal (Testing found regex was the fastest implementation)
|
110 |
-
*
|
111 |
-
* @param string $string
|
112 |
-
* @return bool Is the string ASCII-only?
|
113 |
-
*/
|
114 |
-
protected static function is_ascii($string) {
|
115 |
-
return (preg_match('/(?:[^\x00-\x7F])/', $string) !== 1);
|
116 |
-
}
|
117 |
-
|
118 |
-
/**
|
119 |
-
* Prepare a string for use as an IDNA name
|
120 |
-
*
|
121 |
-
* @todo Implement this based on RFC 3491 and the newer 5891
|
122 |
-
* @param string $string
|
123 |
-
* @return string Prepared string
|
124 |
-
*/
|
125 |
-
protected static function nameprep($string) {
|
126 |
-
return $string;
|
127 |
-
}
|
128 |
-
|
129 |
-
/**
|
130 |
-
* Convert a UTF-8 string to a UCS-4 codepoint array
|
131 |
-
*
|
132 |
-
* Based on Requests_IRI::replace_invalid_with_pct_encoding()
|
133 |
-
*
|
134 |
-
* @throws Requests_Exception Invalid UTF-8 codepoint (`idna.invalidcodepoint`)
|
135 |
-
* @param string $input
|
136 |
-
* @return array Unicode code points
|
137 |
-
*/
|
138 |
-
protected static function utf8_to_codepoints($input) {
|
139 |
-
$codepoints = array();
|
140 |
-
|
141 |
-
// Get number of bytes
|
142 |
-
$strlen = strlen($input);
|
143 |
-
|
144 |
-
for ($position = 0; $position < $strlen; $position++) {
|
145 |
-
$value = ord($input[$position]);
|
146 |
-
|
147 |
-
// One byte sequence:
|
148 |
-
if ((~$value & 0x80) === 0x80) {
|
149 |
-
$character = $value;
|
150 |
-
$length = 1;
|
151 |
-
$remaining = 0;
|
152 |
-
}
|
153 |
-
// Two byte sequence:
|
154 |
-
elseif (($value & 0xE0) === 0xC0) {
|
155 |
-
$character = ($value & 0x1F) << 6;
|
156 |
-
$length = 2;
|
157 |
-
$remaining = 1;
|
158 |
-
}
|
159 |
-
// Three byte sequence:
|
160 |
-
elseif (($value & 0xF0) === 0xE0) {
|
161 |
-
$character = ($value & 0x0F) << 12;
|
162 |
-
$length = 3;
|
163 |
-
$remaining = 2;
|
164 |
-
}
|
165 |
-
// Four byte sequence:
|
166 |
-
elseif (($value & 0xF8) === 0xF0) {
|
167 |
-
$character = ($value & 0x07) << 18;
|
168 |
-
$length = 4;
|
169 |
-
$remaining = 3;
|
170 |
-
}
|
171 |
-
// Invalid byte:
|
172 |
-
else {
|
173 |
-
throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $value);
|
174 |
-
}
|
175 |
-
|
176 |
-
if ($remaining > 0) {
|
177 |
-
if ($position + $length > $strlen) {
|
178 |
-
throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
|
179 |
-
}
|
180 |
-
for ($position++; $remaining > 0; $position++) {
|
181 |
-
$value = ord($input[$position]);
|
182 |
-
|
183 |
-
// If it is invalid, count the sequence as invalid and reprocess the current byte:
|
184 |
-
if (($value & 0xC0) !== 0x80) {
|
185 |
-
throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
|
186 |
-
}
|
187 |
-
|
188 |
-
$character |= ($value & 0x3F) << (--$remaining * 6);
|
189 |
-
}
|
190 |
-
$position--;
|
191 |
-
}
|
192 |
-
|
193 |
-
if (
|
194 |
-
// Non-shortest form sequences are invalid
|
195 |
-
$length > 1 && $character <= 0x7F
|
196 |
-
|| $length > 2 && $character <= 0x7FF
|
197 |
-
|| $length > 3 && $character <= 0xFFFF
|
198 |
-
// Outside of range of ucschar codepoints
|
199 |
-
// Noncharacters
|
200 |
-
|| ($character & 0xFFFE) === 0xFFFE
|
201 |
-
|| $character >= 0xFDD0 && $character <= 0xFDEF
|
202 |
-
|| (
|
203 |
-
// Everything else not in ucschar
|
204 |
-
$character > 0xD7FF && $character < 0xF900
|
205 |
-
|| $character < 0x20
|
206 |
-
|| $character > 0x7E && $character < 0xA0
|
207 |
-
|| $character > 0xEFFFD
|
208 |
-
)
|
209 |
-
) {
|
210 |
-
throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
|
211 |
-
}
|
212 |
-
|
213 |
-
$codepoints[] = $character;
|
214 |
-
}
|
215 |
-
|
216 |
-
return $codepoints;
|
217 |
-
}
|
218 |
-
|
219 |
-
/**
|
220 |
-
* RFC3492-compliant encoder
|
221 |
-
*
|
222 |
-
* @internal Pseudo-code from Section 6.3 is commented with "#" next to relevant code
|
223 |
-
* @throws Requests_Exception On character outside of the domain (never happens with Punycode) (`idna.character_outside_domain`)
|
224 |
-
*
|
225 |
-
* @param string $input UTF-8 encoded string to encode
|
226 |
-
* @return string Punycode-encoded string
|
227 |
-
*/
|
228 |
-
public static function punycode_encode($input) {
|
229 |
-
$output = '';
|
230 |
-
# let n = initial_n
|
231 |
-
$n = self::BOOTSTRAP_INITIAL_N;
|
232 |
-
# let delta = 0
|
233 |
-
$delta = 0;
|
234 |
-
# let bias = initial_bias
|
235 |
-
$bias = self::BOOTSTRAP_INITIAL_BIAS;
|
236 |
-
# let h = b = the number of basic code points in the input
|
237 |
-
$h = $b = 0; // see loop
|
238 |
-
# copy them to the output in order
|
239 |
-
$codepoints = self::utf8_to_codepoints($input);
|
240 |
-
|
241 |
-
foreach ($codepoints as $char) {
|
242 |
-
if ($char < 128) {
|
243 |
-
// Character is valid ASCII
|
244 |
-
// TODO: this should also check if it's valid for a URL
|
245 |
-
$output .= chr($char);
|
246 |
-
$h++;
|
247 |
-
}
|
248 |
-
// Check if the character is non-ASCII, but below initial n
|
249 |
-
// This never occurs for Punycode, so ignore in coverage
|
250 |
-
// @codeCoverageIgnoreStart
|
251 |
-
elseif ($char < $n) {
|
252 |
-
throw new Requests_Exception('Invalid character', 'idna.character_outside_domain', $char);
|
253 |
-
}
|
254 |
-
// @codeCoverageIgnoreEnd
|
255 |
-
else {
|
256 |
-
$extended[$char] = true;
|
257 |
-
}
|
258 |
-
}
|
259 |
-
$extended = array_keys($extended);
|
260 |
-
sort($extended);
|
261 |
-
$b = $h;
|
262 |
-
# [copy them] followed by a delimiter if b > 0
|
263 |
-
if (strlen($output) > 0) {
|
264 |
-
$output .= '-';
|
265 |
-
}
|
266 |
-
# {if the input contains a non-basic code point < n then fail}
|
267 |
-
# while h < length(input) do begin
|
268 |
-
while ($h < count($codepoints)) {
|
269 |
-
# let m = the minimum code point >= n in the input
|
270 |
-
$m = array_shift($extended);
|
271 |
-
//printf('next code point to insert is %s' . PHP_EOL, dechex($m));
|
272 |
-
# let delta = delta + (m - n) * (h + 1), fail on overflow
|
273 |
-
$delta += ($m - $n) * ($h + 1);
|
274 |
-
# let n = m
|
275 |
-
$n = $m;
|
276 |
-
# for each code point c in the input (in order) do begin
|
277 |
-
for ($num = 0; $num < count($codepoints); $num++) {
|
278 |
-
$c = $codepoints[$num];
|
279 |
-
# if c < n then increment delta, fail on overflow
|
280 |
-
if ($c < $n) {
|
281 |
-
$delta++;
|
282 |
-
}
|
283 |
-
# if c == n then begin
|
284 |
-
elseif ($c === $n) {
|
285 |
-
# let q = delta
|
286 |
-
$q = $delta;
|
287 |
-
# for k = base to infinity in steps of base do begin
|
288 |
-
for ($k = self::BOOTSTRAP_BASE; ; $k += self::BOOTSTRAP_BASE) {
|
289 |
-
# let t = tmin if k <= bias {+ tmin}, or
|
290 |
-
# tmax if k >= bias + tmax, or k - bias otherwise
|
291 |
-
if ($k <= ($bias + self::BOOTSTRAP_TMIN)) {
|
292 |
-
$t = self::BOOTSTRAP_TMIN;
|
293 |
-
}
|
294 |
-
elseif ($k >= ($bias + self::BOOTSTRAP_TMAX)) {
|
295 |
-
$t = self::BOOTSTRAP_TMAX;
|
296 |
-
}
|
297 |
-
else {
|
298 |
-
$t = $k - $bias;
|
299 |
-
}
|
300 |
-
# if q < t then break
|
301 |
-
if ($q < $t) {
|
302 |
-
break;
|
303 |
-
}
|
304 |
-
# output the code point for digit t + ((q - t) mod (base - t))
|
305 |
-
$digit = $t + (($q - $t) % (self::BOOTSTRAP_BASE - $t));
|
306 |
-
//printf('needed delta is %d, encodes as "%s"' . PHP_EOL, $delta, self::digit_to_char($digit));
|
307 |
-
$output .= self::digit_to_char($digit);
|
308 |
-
# let q = (q - t) div (base - t)
|
309 |
-
$q = floor(($q - $t) / (self::BOOTSTRAP_BASE - $t));
|
310 |
-
# end
|
311 |
-
}
|
312 |
-
# output the code point for digit q
|
313 |
-
$output .= self::digit_to_char($q);
|
314 |
-
//printf('needed delta is %d, encodes as "%s"' . PHP_EOL, $delta, self::digit_to_char($q));
|
315 |
-
# let bias = adapt(delta, h + 1, test h equals b?)
|
316 |
-
$bias = self::adapt($delta, $h + 1, $h === $b);
|
317 |
-
//printf('bias becomes %d' . PHP_EOL, $bias);
|
318 |
-
# let delta = 0
|
319 |
-
$delta = 0;
|
320 |
-
# increment h
|
321 |
-
$h++;
|
322 |
-
# end
|
323 |
-
}
|
324 |
-
# end
|
325 |
-
}
|
326 |
-
# increment delta and n
|
327 |
-
$delta++;
|
328 |
-
$n++;
|
329 |
-
# end
|
330 |
-
}
|
331 |
-
|
332 |
-
return $output;
|
333 |
-
}
|
334 |
-
|
335 |
-
/**
|
336 |
-
* Convert a digit to its respective character
|
337 |
-
*
|
338 |
-
* @see http://tools.ietf.org/html/rfc3492#section-5
|
339 |
-
* @throws Requests_Exception On invalid digit (`idna.invalid_digit`)
|
340 |
-
*
|
341 |
-
* @param int $digit Digit in the range 0-35
|
342 |
-
* @return string Single character corresponding to digit
|
343 |
-
*/
|
344 |
-
protected static function digit_to_char($digit) {
|
345 |
-
// @codeCoverageIgnoreStart
|
346 |
-
// As far as I know, this never happens, but still good to be sure.
|
347 |
-
if ($digit < 0 || $digit > 35) {
|
348 |
-
throw new Requests_Exception(sprintf('Invalid digit %d', $digit), 'idna.invalid_digit', $digit);
|
349 |
-
}
|
350 |
-
// @codeCoverageIgnoreEnd
|
351 |
-
$digits = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
352 |
-
return substr($digits, $digit, 1);
|
353 |
-
}
|
354 |
-
|
355 |
-
/**
|
356 |
-
* Adapt the bias
|
357 |
-
*
|
358 |
-
* @see http://tools.ietf.org/html/rfc3492#section-6.1
|
359 |
-
* @param int $delta
|
360 |
-
* @param int $numpoints
|
361 |
-
* @param bool $firsttime
|
362 |
-
* @return int New bias
|
363 |
-
*/
|
364 |
-
protected static function adapt($delta, $numpoints, $firsttime) {
|
365 |
-
# function adapt(delta,numpoints,firsttime):
|
366 |
-
# if firsttime then let delta = delta div damp
|
367 |
-
if ($firsttime) {
|
368 |
-
$delta = floor($delta / self::BOOTSTRAP_DAMP);
|
369 |
-
}
|
370 |
-
# else let delta = delta div 2
|
371 |
-
else {
|
372 |
-
$delta = floor($delta / 2);
|
373 |
-
}
|
374 |
-
# let delta = delta + (delta div numpoints)
|
375 |
-
$delta += floor($delta / $numpoints);
|
376 |
-
# let k = 0
|
377 |
-
$k = 0;
|
378 |
-
# while delta > ((base - tmin) * tmax) div 2 do begin
|
379 |
-
$max = floor(((self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN) * self::BOOTSTRAP_TMAX) / 2);
|
380 |
-
while ($delta > $max) {
|
381 |
-
# let delta = delta div (base - tmin)
|
382 |
-
$delta = floor($delta / (self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN));
|
383 |
-
# let k = k + base
|
384 |
-
$k += self::BOOTSTRAP_BASE;
|
385 |
-
# end
|
386 |
-
}
|
387 |
-
# return k + (((base - tmin + 1) * delta) div (delta + skew))
|
388 |
-
return $k + floor(((self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN + 1) * $delta) / ($delta + self::BOOTSTRAP_SKEW));
|
389 |
-
}
|
390 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/IPv6.php
DELETED
@@ -1,221 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Class to validate and to work with IPv6 addresses
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Utilities
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Class to validate and to work with IPv6 addresses
|
11 |
-
*
|
12 |
-
* This was originally based on the PEAR class of the same name, but has been
|
13 |
-
* entirely rewritten.
|
14 |
-
*
|
15 |
-
* @package Requests
|
16 |
-
* @subpackage Utilities
|
17 |
-
*/
|
18 |
-
class Requests_IPv6
|
19 |
-
{
|
20 |
-
/**
|
21 |
-
* Uncompresses an IPv6 address
|
22 |
-
*
|
23 |
-
* RFC 4291 allows you to compress consecutive zero pieces in an address to
|
24 |
-
* '::'. This method expects a valid IPv6 address and expands the '::' to
|
25 |
-
* the required number of zero pieces.
|
26 |
-
*
|
27 |
-
* Example: FF01::101 -> FF01:0:0:0:0:0:0:101
|
28 |
-
* ::1 -> 0:0:0:0:0:0:0:1
|
29 |
-
*
|
30 |
-
* @author Alexander Merz <alexander.merz@web.de>
|
31 |
-
* @author elfrink at introweb dot nl
|
32 |
-
* @author Josh Peck <jmp at joshpeck dot org>
|
33 |
-
* @copyright 2003-2005 The PHP Group
|
34 |
-
* @license http://www.opensource.org/licenses/bsd-license.php
|
35 |
-
* @param string $ip An IPv6 address
|
36 |
-
* @return string The uncompressed IPv6 address
|
37 |
-
*/
|
38 |
-
public static function uncompress($ip)
|
39 |
-
{
|
40 |
-
$c1 = -1;
|
41 |
-
$c2 = -1;
|
42 |
-
if (substr_count($ip, '::') === 1)
|
43 |
-
{
|
44 |
-
list($ip1, $ip2) = explode('::', $ip);
|
45 |
-
if ($ip1 === '')
|
46 |
-
{
|
47 |
-
$c1 = -1;
|
48 |
-
}
|
49 |
-
else
|
50 |
-
{
|
51 |
-
$c1 = substr_count($ip1, ':');
|
52 |
-
}
|
53 |
-
if ($ip2 === '')
|
54 |
-
{
|
55 |
-
$c2 = -1;
|
56 |
-
}
|
57 |
-
else
|
58 |
-
{
|
59 |
-
$c2 = substr_count($ip2, ':');
|
60 |
-
}
|
61 |
-
if (strpos($ip2, '.') !== false)
|
62 |
-
{
|
63 |
-
$c2++;
|
64 |
-
}
|
65 |
-
// ::
|
66 |
-
if ($c1 === -1 && $c2 === -1)
|
67 |
-
{
|
68 |
-
$ip = '0:0:0:0:0:0:0:0';
|
69 |
-
}
|
70 |
-
// ::xxx
|
71 |
-
else if ($c1 === -1)
|
72 |
-
{
|
73 |
-
$fill = str_repeat('0:', 7 - $c2);
|
74 |
-
$ip = str_replace('::', $fill, $ip);
|
75 |
-
}
|
76 |
-
// xxx::
|
77 |
-
else if ($c2 === -1)
|
78 |
-
{
|
79 |
-
$fill = str_repeat(':0', 7 - $c1);
|
80 |
-
$ip = str_replace('::', $fill, $ip);
|
81 |
-
}
|
82 |
-
// xxx::xxx
|
83 |
-
else
|
84 |
-
{
|
85 |
-
$fill = ':' . str_repeat('0:', 6 - $c2 - $c1);
|
86 |
-
$ip = str_replace('::', $fill, $ip);
|
87 |
-
}
|
88 |
-
}
|
89 |
-
return $ip;
|
90 |
-
}
|
91 |
-
|
92 |
-
/**
|
93 |
-
* Compresses an IPv6 address
|
94 |
-
*
|
95 |
-
* RFC 4291 allows you to compress consecutive zero pieces in an address to
|
96 |
-
* '::'. This method expects a valid IPv6 address and compresses consecutive
|
97 |
-
* zero pieces to '::'.
|
98 |
-
*
|
99 |
-
* Example: FF01:0:0:0:0:0:0:101 -> FF01::101
|
100 |
-
* 0:0:0:0:0:0:0:1 -> ::1
|
101 |
-
*
|
102 |
-
* @see uncompress()
|
103 |
-
* @param string $ip An IPv6 address
|
104 |
-
* @return string The compressed IPv6 address
|
105 |
-
*/
|
106 |
-
public static function compress($ip)
|
107 |
-
{
|
108 |
-
// Prepare the IP to be compressed
|
109 |
-
$ip = self::uncompress($ip);
|
110 |
-
$ip_parts = self::split_v6_v4($ip);
|
111 |
-
|
112 |
-
// Replace all leading zeros
|
113 |
-
$ip_parts[0] = preg_replace('/(^|:)0+([0-9])/', '\1\2', $ip_parts[0]);
|
114 |
-
|
115 |
-
// Find bunches of zeros
|
116 |
-
if (preg_match_all('/(?:^|:)(?:0(?::|$))+/', $ip_parts[0], $matches, PREG_OFFSET_CAPTURE))
|
117 |
-
{
|
118 |
-
$max = 0;
|
119 |
-
$pos = null;
|
120 |
-
foreach ($matches[0] as $match)
|
121 |
-
{
|
122 |
-
if (strlen($match[0]) > $max)
|
123 |
-
{
|
124 |
-
$max = strlen($match[0]);
|
125 |
-
$pos = $match[1];
|
126 |
-
}
|
127 |
-
}
|
128 |
-
|
129 |
-
$ip_parts[0] = substr_replace($ip_parts[0], '::', $pos, $max);
|
130 |
-
}
|
131 |
-
|
132 |
-
if ($ip_parts[1] !== '')
|
133 |
-
{
|
134 |
-
return implode(':', $ip_parts);
|
135 |
-
}
|
136 |
-
else
|
137 |
-
{
|
138 |
-
return $ip_parts[0];
|
139 |
-
}
|
140 |
-
}
|
141 |
-
|
142 |
-
/**
|
143 |
-
* Splits an IPv6 address into the IPv6 and IPv4 representation parts
|
144 |
-
*
|
145 |
-
* RFC 4291 allows you to represent the last two parts of an IPv6 address
|
146 |
-
* using the standard IPv4 representation
|
147 |
-
*
|
148 |
-
* Example: 0:0:0:0:0:0:13.1.68.3
|
149 |
-
* 0:0:0:0:0:FFFF:129.144.52.38
|
150 |
-
*
|
151 |
-
* @param string $ip An IPv6 address
|
152 |
-
* @return array [0] contains the IPv6 represented part, and [1] the IPv4 represented part
|
153 |
-
*/
|
154 |
-
private static function split_v6_v4($ip)
|
155 |
-
{
|
156 |
-
if (strpos($ip, '.') !== false)
|
157 |
-
{
|
158 |
-
$pos = strrpos($ip, ':');
|
159 |
-
$ipv6_part = substr($ip, 0, $pos);
|
160 |
-
$ipv4_part = substr($ip, $pos + 1);
|
161 |
-
return array($ipv6_part, $ipv4_part);
|
162 |
-
}
|
163 |
-
else
|
164 |
-
{
|
165 |
-
return array($ip, '');
|
166 |
-
}
|
167 |
-
}
|
168 |
-
|
169 |
-
/**
|
170 |
-
* Checks an IPv6 address
|
171 |
-
*
|
172 |
-
* Checks if the given IP is a valid IPv6 address
|
173 |
-
*
|
174 |
-
* @param string $ip An IPv6 address
|
175 |
-
* @return bool true if $ip is a valid IPv6 address
|
176 |
-
*/
|
177 |
-
public static function check_ipv6($ip)
|
178 |
-
{
|
179 |
-
$ip = self::uncompress($ip);
|
180 |
-
list($ipv6, $ipv4) = self::split_v6_v4($ip);
|
181 |
-
$ipv6 = explode(':', $ipv6);
|
182 |
-
$ipv4 = explode('.', $ipv4);
|
183 |
-
if (count($ipv6) === 8 && count($ipv4) === 1 || count($ipv6) === 6 && count($ipv4) === 4)
|
184 |
-
{
|
185 |
-
foreach ($ipv6 as $ipv6_part)
|
186 |
-
{
|
187 |
-
// The section can't be empty
|
188 |
-
if ($ipv6_part === '')
|
189 |
-
return false;
|
190 |
-
|
191 |
-
// Nor can it be over four characters
|
192 |
-
if (strlen($ipv6_part) > 4)
|
193 |
-
return false;
|
194 |
-
|
195 |
-
// Remove leading zeros (this is safe because of the above)
|
196 |
-
$ipv6_part = ltrim($ipv6_part, '0');
|
197 |
-
if ($ipv6_part === '')
|
198 |
-
$ipv6_part = '0';
|
199 |
-
|
200 |
-
// Check the value is valid
|
201 |
-
$value = hexdec($ipv6_part);
|
202 |
-
if (dechex($value) !== strtolower($ipv6_part) || $value < 0 || $value > 0xFFFF)
|
203 |
-
return false;
|
204 |
-
}
|
205 |
-
if (count($ipv4) === 4)
|
206 |
-
{
|
207 |
-
foreach ($ipv4 as $ipv4_part)
|
208 |
-
{
|
209 |
-
$value = (int) $ipv4_part;
|
210 |
-
if ((string) $value !== $ipv4_part || $value < 0 || $value > 0xFF)
|
211 |
-
return false;
|
212 |
-
}
|
213 |
-
}
|
214 |
-
return true;
|
215 |
-
}
|
216 |
-
else
|
217 |
-
{
|
218 |
-
return false;
|
219 |
-
}
|
220 |
-
}
|
221 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/IRI.php
DELETED
@@ -1,1220 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* IRI parser/serialiser/normaliser
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Utilities
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* IRI parser/serialiser/normaliser
|
11 |
-
*
|
12 |
-
* Copyright (c) 2007-2010, Geoffrey Sneddon and Steve Minutillo.
|
13 |
-
* All rights reserved.
|
14 |
-
*
|
15 |
-
* Redistribution and use in source and binary forms, with or without
|
16 |
-
* modification, are permitted provided that the following conditions are met:
|
17 |
-
*
|
18 |
-
* * Redistributions of source code must retain the above copyright notice,
|
19 |
-
* this list of conditions and the following disclaimer.
|
20 |
-
*
|
21 |
-
* * Redistributions in binary form must reproduce the above copyright notice,
|
22 |
-
* this list of conditions and the following disclaimer in the documentation
|
23 |
-
* and/or other materials provided with the distribution.
|
24 |
-
*
|
25 |
-
* * Neither the name of the SimplePie Team nor the names of its contributors
|
26 |
-
* may be used to endorse or promote products derived from this software
|
27 |
-
* without specific prior written permission.
|
28 |
-
*
|
29 |
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
30 |
-
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
31 |
-
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
32 |
-
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
|
33 |
-
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
34 |
-
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
35 |
-
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
36 |
-
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
37 |
-
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
38 |
-
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
39 |
-
* POSSIBILITY OF SUCH DAMAGE.
|
40 |
-
*
|
41 |
-
* @package Requests
|
42 |
-
* @subpackage Utilities
|
43 |
-
* @author Geoffrey Sneddon
|
44 |
-
* @author Steve Minutillo
|
45 |
-
* @copyright 2007-2009 Geoffrey Sneddon and Steve Minutillo
|
46 |
-
* @license http://www.opensource.org/licenses/bsd-license.php
|
47 |
-
* @link http://hg.gsnedders.com/iri/
|
48 |
-
*/
|
49 |
-
class Requests_IRI
|
50 |
-
{
|
51 |
-
/**
|
52 |
-
* Scheme
|
53 |
-
*
|
54 |
-
* @var string
|
55 |
-
*/
|
56 |
-
protected $scheme = null;
|
57 |
-
|
58 |
-
/**
|
59 |
-
* User Information
|
60 |
-
*
|
61 |
-
* @var string
|
62 |
-
*/
|
63 |
-
protected $iuserinfo = null;
|
64 |
-
|
65 |
-
/**
|
66 |
-
* ihost
|
67 |
-
*
|
68 |
-
* @var string
|
69 |
-
*/
|
70 |
-
protected $ihost = null;
|
71 |
-
|
72 |
-
/**
|
73 |
-
* Port
|
74 |
-
*
|
75 |
-
* @var string
|
76 |
-
*/
|
77 |
-
protected $port = null;
|
78 |
-
|
79 |
-
/**
|
80 |
-
* ipath
|
81 |
-
*
|
82 |
-
* @var string
|
83 |
-
*/
|
84 |
-
protected $ipath = '';
|
85 |
-
|
86 |
-
/**
|
87 |
-
* iquery
|
88 |
-
*
|
89 |
-
* @var string
|
90 |
-
*/
|
91 |
-
protected $iquery = null;
|
92 |
-
|
93 |
-
/**
|
94 |
-
* ifragment
|
95 |
-
*
|
96 |
-
* @var string
|
97 |
-
*/
|
98 |
-
protected $ifragment = null;
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Normalization database
|
102 |
-
*
|
103 |
-
* Each key is the scheme, each value is an array with each key as the IRI
|
104 |
-
* part and value as the default value for that part.
|
105 |
-
*/
|
106 |
-
protected $normalization = array(
|
107 |
-
'acap' => array(
|
108 |
-
'port' => 674
|
109 |
-
),
|
110 |
-
'dict' => array(
|
111 |
-
'port' => 2628
|
112 |
-
),
|
113 |
-
'file' => array(
|
114 |
-
'ihost' => 'localhost'
|
115 |
-
),
|
116 |
-
'http' => array(
|
117 |
-
'port' => 80,
|
118 |
-
'ipath' => '/'
|
119 |
-
),
|
120 |
-
'https' => array(
|
121 |
-
'port' => 443,
|
122 |
-
'ipath' => '/'
|
123 |
-
),
|
124 |
-
);
|
125 |
-
|
126 |
-
/**
|
127 |
-
* Return the entire IRI when you try and read the object as a string
|
128 |
-
*
|
129 |
-
* @return string
|
130 |
-
*/
|
131 |
-
public function __toString()
|
132 |
-
{
|
133 |
-
return $this->get_iri();
|
134 |
-
}
|
135 |
-
|
136 |
-
/**
|
137 |
-
* Overload __set() to provide access via properties
|
138 |
-
*
|
139 |
-
* @param string $name Property name
|
140 |
-
* @param mixed $value Property value
|
141 |
-
*/
|
142 |
-
public function __set($name, $value)
|
143 |
-
{
|
144 |
-
if (method_exists($this, 'set_' . $name))
|
145 |
-
{
|
146 |
-
call_user_func(array($this, 'set_' . $name), $value);
|
147 |
-
}
|
148 |
-
elseif (
|
149 |
-
$name === 'iauthority'
|
150 |
-
|| $name === 'iuserinfo'
|
151 |
-
|| $name === 'ihost'
|
152 |
-
|| $name === 'ipath'
|
153 |
-
|| $name === 'iquery'
|
154 |
-
|| $name === 'ifragment'
|
155 |
-
)
|
156 |
-
{
|
157 |
-
call_user_func(array($this, 'set_' . substr($name, 1)), $value);
|
158 |
-
}
|
159 |
-
}
|
160 |
-
|
161 |
-
/**
|
162 |
-
* Overload __get() to provide access via properties
|
163 |
-
*
|
164 |
-
* @param string $name Property name
|
165 |
-
* @return mixed
|
166 |
-
*/
|
167 |
-
public function __get($name)
|
168 |
-
{
|
169 |
-
// isset() returns false for null, we don't want to do that
|
170 |
-
// Also why we use array_key_exists below instead of isset()
|
171 |
-
$props = get_object_vars($this);
|
172 |
-
|
173 |
-
if (
|
174 |
-
$name === 'iri' ||
|
175 |
-
$name === 'uri' ||
|
176 |
-
$name === 'iauthority' ||
|
177 |
-
$name === 'authority'
|
178 |
-
)
|
179 |
-
{
|
180 |
-
$return = $this->{"get_$name"}();
|
181 |
-
}
|
182 |
-
elseif (array_key_exists($name, $props))
|
183 |
-
{
|
184 |
-
$return = $this->$name;
|
185 |
-
}
|
186 |
-
// host -> ihost
|
187 |
-
elseif (($prop = 'i' . $name) && array_key_exists($prop, $props))
|
188 |
-
{
|
189 |
-
$name = $prop;
|
190 |
-
$return = $this->$prop;
|
191 |
-
}
|
192 |
-
// ischeme -> scheme
|
193 |
-
elseif (($prop = substr($name, 1)) && array_key_exists($prop, $props))
|
194 |
-
{
|
195 |
-
$name = $prop;
|
196 |
-
$return = $this->$prop;
|
197 |
-
}
|
198 |
-
else
|
199 |
-
{
|
200 |
-
trigger_error('Undefined property: ' . get_class($this) . '::' . $name, E_USER_NOTICE);
|
201 |
-
$return = null;
|
202 |
-
}
|
203 |
-
|
204 |
-
if ($return === null && isset($this->normalization[$this->scheme][$name]))
|
205 |
-
{
|
206 |
-
return $this->normalization[$this->scheme][$name];
|
207 |
-
}
|
208 |
-
else
|
209 |
-
{
|
210 |
-
return $return;
|
211 |
-
}
|
212 |
-
}
|
213 |
-
|
214 |
-
/**
|
215 |
-
* Overload __isset() to provide access via properties
|
216 |
-
*
|
217 |
-
* @param string $name Property name
|
218 |
-
* @return bool
|
219 |
-
*/
|
220 |
-
public function __isset($name)
|
221 |
-
{
|
222 |
-
if (method_exists($this, 'get_' . $name) || isset($this->$name))
|
223 |
-
{
|
224 |
-
return true;
|
225 |
-
}
|
226 |
-
else
|
227 |
-
{
|
228 |
-
return false;
|
229 |
-
}
|
230 |
-
}
|
231 |
-
|
232 |
-
/**
|
233 |
-
* Overload __unset() to provide access via properties
|
234 |
-
*
|
235 |
-
* @param string $name Property name
|
236 |
-
*/
|
237 |
-
public function __unset($name)
|
238 |
-
{
|
239 |
-
if (method_exists($this, 'set_' . $name))
|
240 |
-
{
|
241 |
-
call_user_func(array($this, 'set_' . $name), '');
|
242 |
-
}
|
243 |
-
}
|
244 |
-
|
245 |
-
/**
|
246 |
-
* Create a new IRI object, from a specified string
|
247 |
-
*
|
248 |
-
* @param string $iri
|
249 |
-
*/
|
250 |
-
public function __construct($iri = null)
|
251 |
-
{
|
252 |
-
$this->set_iri($iri);
|
253 |
-
}
|
254 |
-
|
255 |
-
/**
|
256 |
-
* Create a new IRI object by resolving a relative IRI
|
257 |
-
*
|
258 |
-
* Returns false if $base is not absolute, otherwise an IRI.
|
259 |
-
*
|
260 |
-
* @param IRI|string $base (Absolute) Base IRI
|
261 |
-
* @param IRI|string $relative Relative IRI
|
262 |
-
* @return IRI|false
|
263 |
-
*/
|
264 |
-
public static function absolutize($base, $relative)
|
265 |
-
{
|
266 |
-
if (!($relative instanceof Requests_IRI))
|
267 |
-
{
|
268 |
-
$relative = new Requests_IRI($relative);
|
269 |
-
}
|
270 |
-
if (!$relative->is_valid())
|
271 |
-
{
|
272 |
-
return false;
|
273 |
-
}
|
274 |
-
elseif ($relative->scheme !== null)
|
275 |
-
{
|
276 |
-
return clone $relative;
|
277 |
-
}
|
278 |
-
else
|
279 |
-
{
|
280 |
-
if (!($base instanceof Requests_IRI))
|
281 |
-
{
|
282 |
-
$base = new Requests_IRI($base);
|
283 |
-
}
|
284 |
-
if ($base->scheme !== null && $base->is_valid())
|
285 |
-
{
|
286 |
-
if ($relative->get_iri() !== '')
|
287 |
-
{
|
288 |
-
if ($relative->iuserinfo !== null || $relative->ihost !== null || $relative->port !== null)
|
289 |
-
{
|
290 |
-
$target = clone $relative;
|
291 |
-
$target->scheme = $base->scheme;
|
292 |
-
}
|
293 |
-
else
|
294 |
-
{
|
295 |
-
$target = new Requests_IRI;
|
296 |
-
$target->scheme = $base->scheme;
|
297 |
-
$target->iuserinfo = $base->iuserinfo;
|
298 |
-
$target->ihost = $base->ihost;
|
299 |
-
$target->port = $base->port;
|
300 |
-
if ($relative->ipath !== '')
|
301 |
-
{
|
302 |
-
if ($relative->ipath[0] === '/')
|
303 |
-
{
|
304 |
-
$target->ipath = $relative->ipath;
|
305 |
-
}
|
306 |
-
elseif (($base->iuserinfo !== null || $base->ihost !== null || $base->port !== null) && $base->ipath === '')
|
307 |
-
{
|
308 |
-
$target->ipath = '/' . $relative->ipath;
|
309 |
-
}
|
310 |
-
elseif (($last_segment = strrpos($base->ipath, '/')) !== false)
|
311 |
-
{
|
312 |
-
$target->ipath = substr($base->ipath, 0, $last_segment + 1) . $relative->ipath;
|
313 |
-
}
|
314 |
-
else
|
315 |
-
{
|
316 |
-
$target->ipath = $relative->ipath;
|
317 |
-
}
|
318 |
-
$target->ipath = $target->remove_dot_segments($target->ipath);
|
319 |
-
$target->iquery = $relative->iquery;
|
320 |
-
}
|
321 |
-
else
|
322 |
-
{
|
323 |
-
$target->ipath = $base->ipath;
|
324 |
-
if ($relative->iquery !== null)
|
325 |
-
{
|
326 |
-
$target->iquery = $relative->iquery;
|
327 |
-
}
|
328 |
-
elseif ($base->iquery !== null)
|
329 |
-
{
|
330 |
-
$target->iquery = $base->iquery;
|
331 |
-
}
|
332 |
-
}
|
333 |
-
$target->ifragment = $relative->ifragment;
|
334 |
-
}
|
335 |
-
}
|
336 |
-
else
|
337 |
-
{
|
338 |
-
$target = clone $base;
|
339 |
-
$target->ifragment = null;
|
340 |
-
}
|
341 |
-
$target->scheme_normalization();
|
342 |
-
return $target;
|
343 |
-
}
|
344 |
-
else
|
345 |
-
{
|
346 |
-
return false;
|
347 |
-
}
|
348 |
-
}
|
349 |
-
}
|
350 |
-
|
351 |
-
/**
|
352 |
-
* Parse an IRI into scheme/authority/path/query/fragment segments
|
353 |
-
*
|
354 |
-
* @param string $iri
|
355 |
-
* @return array
|
356 |
-
*/
|
357 |
-
protected function parse_iri($iri)
|
358 |
-
{
|
359 |
-
$iri = trim($iri, "\x20\x09\x0A\x0C\x0D");
|
360 |
-
if (preg_match('/^((?P<scheme>[^:\/?#]+):)?(\/\/(?P<authority>[^\/?#]*))?(?P<path>[^?#]*)(\?(?P<query>[^#]*))?(#(?P<fragment>.*))?$/', $iri, $match))
|
361 |
-
{
|
362 |
-
if ($match[1] === '')
|
363 |
-
{
|
364 |
-
$match['scheme'] = null;
|
365 |
-
}
|
366 |
-
if (!isset($match[3]) || $match[3] === '')
|
367 |
-
{
|
368 |
-
$match['authority'] = null;
|
369 |
-
}
|
370 |
-
if (!isset($match[5]))
|
371 |
-
{
|
372 |
-
$match['path'] = '';
|
373 |
-
}
|
374 |
-
if (!isset($match[6]) || $match[6] === '')
|
375 |
-
{
|
376 |
-
$match['query'] = null;
|
377 |
-
}
|
378 |
-
if (!isset($match[8]) || $match[8] === '')
|
379 |
-
{
|
380 |
-
$match['fragment'] = null;
|
381 |
-
}
|
382 |
-
return $match;
|
383 |
-
}
|
384 |
-
else
|
385 |
-
{
|
386 |
-
trigger_error('This should never happen', E_USER_ERROR);
|
387 |
-
die;
|
388 |
-
}
|
389 |
-
}
|
390 |
-
|
391 |
-
/**
|
392 |
-
* Remove dot segments from a path
|
393 |
-
*
|
394 |
-
* @param string $input
|
395 |
-
* @return string
|
396 |
-
*/
|
397 |
-
protected function remove_dot_segments($input)
|
398 |
-
{
|
399 |
-
$output = '';
|
400 |
-
while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..')
|
401 |
-
{
|
402 |
-
// A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise,
|
403 |
-
if (strpos($input, '../') === 0)
|
404 |
-
{
|
405 |
-
$input = substr($input, 3);
|
406 |
-
}
|
407 |
-
elseif (strpos($input, './') === 0)
|
408 |
-
{
|
409 |
-
$input = substr($input, 2);
|
410 |
-
}
|
411 |
-
// B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise,
|
412 |
-
elseif (strpos($input, '/./') === 0)
|
413 |
-
{
|
414 |
-
$input = substr($input, 2);
|
415 |
-
}
|
416 |
-
elseif ($input === '/.')
|
417 |
-
{
|
418 |
-
$input = '/';
|
419 |
-
}
|
420 |
-
// C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise,
|
421 |
-
elseif (strpos($input, '/../') === 0)
|
422 |
-
{
|
423 |
-
$input = substr($input, 3);
|
424 |
-
$output = substr_replace($output, '', strrpos($output, '/'));
|
425 |
-
}
|
426 |
-
elseif ($input === '/..')
|
427 |
-
{
|
428 |
-
$input = '/';
|
429 |
-
$output = substr_replace($output, '', strrpos($output, '/'));
|
430 |
-
}
|
431 |
-
// D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise,
|
432 |
-
elseif ($input === '.' || $input === '..')
|
433 |
-
{
|
434 |
-
$input = '';
|
435 |
-
}
|
436 |
-
// E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer
|
437 |
-
elseif (($pos = strpos($input, '/', 1)) !== false)
|
438 |
-
{
|
439 |
-
$output .= substr($input, 0, $pos);
|
440 |
-
$input = substr_replace($input, '', 0, $pos);
|
441 |
-
}
|
442 |
-
else
|
443 |
-
{
|
444 |
-
$output .= $input;
|
445 |
-
$input = '';
|
446 |
-
}
|
447 |
-
}
|
448 |
-
return $output . $input;
|
449 |
-
}
|
450 |
-
|
451 |
-
/**
|
452 |
-
* Replace invalid character with percent encoding
|
453 |
-
*
|
454 |
-
* @param string $string Input string
|
455 |
-
* @param string $extra_chars Valid characters not in iunreserved or
|
456 |
-
* iprivate (this is ASCII-only)
|
457 |
-
* @param bool $iprivate Allow iprivate
|
458 |
-
* @return string
|
459 |
-
*/
|
460 |
-
protected function replace_invalid_with_pct_encoding($string, $extra_chars, $iprivate = false)
|
461 |
-
{
|
462 |
-
// Normalize as many pct-encoded sections as possible
|
463 |
-
$string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array(&$this, 'remove_iunreserved_percent_encoded'), $string);
|
464 |
-
|
465 |
-
// Replace invalid percent characters
|
466 |
-
$string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string);
|
467 |
-
|
468 |
-
// Add unreserved and % to $extra_chars (the latter is safe because all
|
469 |
-
// pct-encoded sections are now valid).
|
470 |
-
$extra_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%';
|
471 |
-
|
472 |
-
// Now replace any bytes that aren't allowed with their pct-encoded versions
|
473 |
-
$position = 0;
|
474 |
-
$strlen = strlen($string);
|
475 |
-
while (($position += strspn($string, $extra_chars, $position)) < $strlen)
|
476 |
-
{
|
477 |
-
$value = ord($string[$position]);
|
478 |
-
|
479 |
-
// Start position
|
480 |
-
$start = $position;
|
481 |
-
|
482 |
-
// By default we are valid
|
483 |
-
$valid = true;
|
484 |
-
|
485 |
-
// No one byte sequences are valid due to the while.
|
486 |
-
// Two byte sequence:
|
487 |
-
if (($value & 0xE0) === 0xC0)
|
488 |
-
{
|
489 |
-
$character = ($value & 0x1F) << 6;
|
490 |
-
$length = 2;
|
491 |
-
$remaining = 1;
|
492 |
-
}
|
493 |
-
// Three byte sequence:
|
494 |
-
elseif (($value & 0xF0) === 0xE0)
|
495 |
-
{
|
496 |
-
$character = ($value & 0x0F) << 12;
|
497 |
-
$length = 3;
|
498 |
-
$remaining = 2;
|
499 |
-
}
|
500 |
-
// Four byte sequence:
|
501 |
-
elseif (($value & 0xF8) === 0xF0)
|
502 |
-
{
|
503 |
-
$character = ($value & 0x07) << 18;
|
504 |
-
$length = 4;
|
505 |
-
$remaining = 3;
|
506 |
-
}
|
507 |
-
// Invalid byte:
|
508 |
-
else
|
509 |
-
{
|
510 |
-
$valid = false;
|
511 |
-
$length = 1;
|
512 |
-
$remaining = 0;
|
513 |
-
}
|
514 |
-
|
515 |
-
if ($remaining)
|
516 |
-
{
|
517 |
-
if ($position + $length <= $strlen)
|
518 |
-
{
|
519 |
-
for ($position++; $remaining; $position++)
|
520 |
-
{
|
521 |
-
$value = ord($string[$position]);
|
522 |
-
|
523 |
-
// Check that the byte is valid, then add it to the character:
|
524 |
-
if (($value & 0xC0) === 0x80)
|
525 |
-
{
|
526 |
-
$character |= ($value & 0x3F) << (--$remaining * 6);
|
527 |
-
}
|
528 |
-
// If it is invalid, count the sequence as invalid and reprocess the current byte:
|
529 |
-
else
|
530 |
-
{
|
531 |
-
$valid = false;
|
532 |
-
$position--;
|
533 |
-
break;
|
534 |
-
}
|
535 |
-
}
|
536 |
-
}
|
537 |
-
else
|
538 |
-
{
|
539 |
-
$position = $strlen - 1;
|
540 |
-
$valid = false;
|
541 |
-
}
|
542 |
-
}
|
543 |
-
|
544 |
-
// Percent encode anything invalid or not in ucschar
|
545 |
-
if (
|
546 |
-
// Invalid sequences
|
547 |
-
!$valid
|
548 |
-
// Non-shortest form sequences are invalid
|
549 |
-
|| $length > 1 && $character <= 0x7F
|
550 |
-
|| $length > 2 && $character <= 0x7FF
|
551 |
-
|| $length > 3 && $character <= 0xFFFF
|
552 |
-
// Outside of range of ucschar codepoints
|
553 |
-
// Noncharacters
|
554 |
-
|| ($character & 0xFFFE) === 0xFFFE
|
555 |
-
|| $character >= 0xFDD0 && $character <= 0xFDEF
|
556 |
-
|| (
|
557 |
-
// Everything else not in ucschar
|
558 |
-
$character > 0xD7FF && $character < 0xF900
|
559 |
-
|| $character < 0xA0
|
560 |
-
|| $character > 0xEFFFD
|
561 |
-
)
|
562 |
-
&& (
|
563 |
-
// Everything not in iprivate, if it applies
|
564 |
-
!$iprivate
|
565 |
-
|| $character < 0xE000
|
566 |
-
|| $character > 0x10FFFD
|
567 |
-
)
|
568 |
-
)
|
569 |
-
{
|
570 |
-
// If we were a character, pretend we weren't, but rather an error.
|
571 |
-
if ($valid)
|
572 |
-
$position--;
|
573 |
-
|
574 |
-
for ($j = $start; $j <= $position; $j++)
|
575 |
-
{
|
576 |
-
$string = substr_replace($string, sprintf('%%%02X', ord($string[$j])), $j, 1);
|
577 |
-
$j += 2;
|
578 |
-
$position += 2;
|
579 |
-
$strlen += 2;
|
580 |
-
}
|
581 |
-
}
|
582 |
-
}
|
583 |
-
|
584 |
-
return $string;
|
585 |
-
}
|
586 |
-
|
587 |
-
/**
|
588 |
-
* Callback function for preg_replace_callback.
|
589 |
-
*
|
590 |
-
* Removes sequences of percent encoded bytes that represent UTF-8
|
591 |
-
* encoded characters in iunreserved
|
592 |
-
*
|
593 |
-
* @param array $match PCRE match
|
594 |
-
* @return string Replacement
|
595 |
-
*/
|
596 |
-
protected function remove_iunreserved_percent_encoded($match)
|
597 |
-
{
|
598 |
-
// As we just have valid percent encoded sequences we can just explode
|
599 |
-
// and ignore the first member of the returned array (an empty string).
|
600 |
-
$bytes = explode('%', $match[0]);
|
601 |
-
|
602 |
-
// Initialize the new string (this is what will be returned) and that
|
603 |
-
// there are no bytes remaining in the current sequence (unsurprising
|
604 |
-
// at the first byte!).
|
605 |
-
$string = '';
|
606 |
-
$remaining = 0;
|
607 |
-
|
608 |
-
// Loop over each and every byte, and set $value to its value
|
609 |
-
for ($i = 1, $len = count($bytes); $i < $len; $i++)
|
610 |
-
{
|
611 |
-
$value = hexdec($bytes[$i]);
|
612 |
-
|
613 |
-
// If we're the first byte of sequence:
|
614 |
-
if (!$remaining)
|
615 |
-
{
|
616 |
-
// Start position
|
617 |
-
$start = $i;
|
618 |
-
|
619 |
-
// By default we are valid
|
620 |
-
$valid = true;
|
621 |
-
|
622 |
-
// One byte sequence:
|
623 |
-
if ($value <= 0x7F)
|
624 |
-
{
|
625 |
-
$character = $value;
|
626 |
-
$length = 1;
|
627 |
-
}
|
628 |
-
// Two byte sequence:
|
629 |
-
elseif (($value & 0xE0) === 0xC0)
|
630 |
-
{
|
631 |
-
$character = ($value & 0x1F) << 6;
|
632 |
-
$length = 2;
|
633 |
-
$remaining = 1;
|
634 |
-
}
|
635 |
-
// Three byte sequence:
|
636 |
-
elseif (($value & 0xF0) === 0xE0)
|
637 |
-
{
|
638 |
-
$character = ($value & 0x0F) << 12;
|
639 |
-
$length = 3;
|
640 |
-
$remaining = 2;
|
641 |
-
}
|
642 |
-
// Four byte sequence:
|
643 |
-
elseif (($value & 0xF8) === 0xF0)
|
644 |
-
{
|
645 |
-
$character = ($value & 0x07) << 18;
|
646 |
-
$length = 4;
|
647 |
-
$remaining = 3;
|
648 |
-
}
|
649 |
-
// Invalid byte:
|
650 |
-
else
|
651 |
-
{
|
652 |
-
$valid = false;
|
653 |
-
$remaining = 0;
|
654 |
-
}
|
655 |
-
}
|
656 |
-
// Continuation byte:
|
657 |
-
else
|
658 |
-
{
|
659 |
-
// Check that the byte is valid, then add it to the character:
|
660 |
-
if (($value & 0xC0) === 0x80)
|
661 |
-
{
|
662 |
-
$remaining--;
|
663 |
-
$character |= ($value & 0x3F) << ($remaining * 6);
|
664 |
-
}
|
665 |
-
// If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence:
|
666 |
-
else
|
667 |
-
{
|
668 |
-
$valid = false;
|
669 |
-
$remaining = 0;
|
670 |
-
$i--;
|
671 |
-
}
|
672 |
-
}
|
673 |
-
|
674 |
-
// If we've reached the end of the current byte sequence, append it to Unicode::$data
|
675 |
-
if (!$remaining)
|
676 |
-
{
|
677 |
-
// Percent encode anything invalid or not in iunreserved
|
678 |
-
if (
|
679 |
-
// Invalid sequences
|
680 |
-
!$valid
|
681 |
-
// Non-shortest form sequences are invalid
|
682 |
-
|| $length > 1 && $character <= 0x7F
|
683 |
-
|| $length > 2 && $character <= 0x7FF
|
684 |
-
|| $length > 3 && $character <= 0xFFFF
|
685 |
-
// Outside of range of iunreserved codepoints
|
686 |
-
|| $character < 0x2D
|
687 |
-
|| $character > 0xEFFFD
|
688 |
-
// Noncharacters
|
689 |
-
|| ($character & 0xFFFE) === 0xFFFE
|
690 |
-
|| $character >= 0xFDD0 && $character <= 0xFDEF
|
691 |
-
// Everything else not in iunreserved (this is all BMP)
|
692 |
-
|| $character === 0x2F
|
693 |
-
|| $character > 0x39 && $character < 0x41
|
694 |
-
|| $character > 0x5A && $character < 0x61
|
695 |
-
|| $character > 0x7A && $character < 0x7E
|
696 |
-
|| $character > 0x7E && $character < 0xA0
|
697 |
-
|| $character > 0xD7FF && $character < 0xF900
|
698 |
-
)
|
699 |
-
{
|
700 |
-
for ($j = $start; $j <= $i; $j++)
|
701 |
-
{
|
702 |
-
$string .= '%' . strtoupper($bytes[$j]);
|
703 |
-
}
|
704 |
-
}
|
705 |
-
else
|
706 |
-
{
|
707 |
-
for ($j = $start; $j <= $i; $j++)
|
708 |
-
{
|
709 |
-
$string .= chr(hexdec($bytes[$j]));
|
710 |
-
}
|
711 |
-
}
|
712 |
-
}
|
713 |
-
}
|
714 |
-
|
715 |
-
// If we have any bytes left over they are invalid (i.e., we are
|
716 |
-
// mid-way through a multi-byte sequence)
|
717 |
-
if ($remaining)
|
718 |
-
{
|
719 |
-
for ($j = $start; $j < $len; $j++)
|
720 |
-
{
|
721 |
-
$string .= '%' . strtoupper($bytes[$j]);
|
722 |
-
}
|
723 |
-
}
|
724 |
-
|
725 |
-
return $string;
|
726 |
-
}
|
727 |
-
|
728 |
-
protected function scheme_normalization()
|
729 |
-
{
|
730 |
-
if (isset($this->normalization[$this->scheme]['iuserinfo']) && $this->iuserinfo === $this->normalization[$this->scheme]['iuserinfo'])
|
731 |
-
{
|
732 |
-
$this->iuserinfo = null;
|
733 |
-
}
|
734 |
-
if (isset($this->normalization[$this->scheme]['ihost']) && $this->ihost === $this->normalization[$this->scheme]['ihost'])
|
735 |
-
{
|
736 |
-
$this->ihost = null;
|
737 |
-
}
|
738 |
-
if (isset($this->normalization[$this->scheme]['port']) && $this->port === $this->normalization[$this->scheme]['port'])
|
739 |
-
{
|
740 |
-
$this->port = null;
|
741 |
-
}
|
742 |
-
if (isset($this->normalization[$this->scheme]['ipath']) && $this->ipath === $this->normalization[$this->scheme]['ipath'])
|
743 |
-
{
|
744 |
-
$this->ipath = '';
|
745 |
-
}
|
746 |
-
if (isset($this->normalization[$this->scheme]['iquery']) && $this->iquery === $this->normalization[$this->scheme]['iquery'])
|
747 |
-
{
|
748 |
-
$this->iquery = null;
|
749 |
-
}
|
750 |
-
if (isset($this->normalization[$this->scheme]['ifragment']) && $this->ifragment === $this->normalization[$this->scheme]['ifragment'])
|
751 |
-
{
|
752 |
-
$this->ifragment = null;
|
753 |
-
}
|
754 |
-
}
|
755 |
-
|
756 |
-
/**
|
757 |
-
* Check if the object represents a valid IRI. This needs to be done on each
|
758 |
-
* call as some things change depending on another part of the IRI.
|
759 |
-
*
|
760 |
-
* @return bool
|
761 |
-
*/
|
762 |
-
public function is_valid()
|
763 |
-
{
|
764 |
-
$isauthority = $this->iuserinfo !== null || $this->ihost !== null || $this->port !== null;
|
765 |
-
if ($this->ipath !== '' &&
|
766 |
-
(
|
767 |
-
$isauthority && (
|
768 |
-
$this->ipath[0] !== '/' ||
|
769 |
-
substr($this->ipath, 0, 2) === '//'
|
770 |
-
) ||
|
771 |
-
(
|
772 |
-
$this->scheme === null &&
|
773 |
-
!$isauthority &&
|
774 |
-
strpos($this->ipath, ':') !== false &&
|
775 |
-
(strpos($this->ipath, '/') === false ? true : strpos($this->ipath, ':') < strpos($this->ipath, '/'))
|
776 |
-
)
|
777 |
-
)
|
778 |
-
)
|
779 |
-
{
|
780 |
-
return false;
|
781 |
-
}
|
782 |
-
|
783 |
-
return true;
|
784 |
-
}
|
785 |
-
|
786 |
-
/**
|
787 |
-
* Set the entire IRI. Returns true on success, false on failure (if there
|
788 |
-
* are any invalid characters).
|
789 |
-
*
|
790 |
-
* @param string $iri
|
791 |
-
* @return bool
|
792 |
-
*/
|
793 |
-
protected function set_iri($iri)
|
794 |
-
{
|
795 |
-
static $cache;
|
796 |
-
if (!$cache)
|
797 |
-
{
|
798 |
-
$cache = array();
|
799 |
-
}
|
800 |
-
|
801 |
-
if ($iri === null)
|
802 |
-
{
|
803 |
-
return true;
|
804 |
-
}
|
805 |
-
elseif (isset($cache[$iri]))
|
806 |
-
{
|
807 |
-
list($this->scheme,
|
808 |
-
$this->iuserinfo,
|
809 |
-
$this->ihost,
|
810 |
-
$this->port,
|
811 |
-
$this->ipath,
|
812 |
-
$this->iquery,
|
813 |
-
$this->ifragment,
|
814 |
-
$return) = $cache[$iri];
|
815 |
-
return $return;
|
816 |
-
}
|
817 |
-
else
|
818 |
-
{
|
819 |
-
$parsed = $this->parse_iri((string) $iri);
|
820 |
-
|
821 |
-
$return = $this->set_scheme($parsed['scheme'])
|
822 |
-
&& $this->set_authority($parsed['authority'])
|
823 |
-
&& $this->set_path($parsed['path'])
|
824 |
-
&& $this->set_query($parsed['query'])
|
825 |
-
&& $this->set_fragment($parsed['fragment']);
|
826 |
-
|
827 |
-
$cache[$iri] = array($this->scheme,
|
828 |
-
$this->iuserinfo,
|
829 |
-
$this->ihost,
|
830 |
-
$this->port,
|
831 |
-
$this->ipath,
|
832 |
-
$this->iquery,
|
833 |
-
$this->ifragment,
|
834 |
-
$return);
|
835 |
-
return $return;
|
836 |
-
}
|
837 |
-
}
|
838 |
-
|
839 |
-
/**
|
840 |
-
* Set the scheme. Returns true on success, false on failure (if there are
|
841 |
-
* any invalid characters).
|
842 |
-
*
|
843 |
-
* @param string $scheme
|
844 |
-
* @return bool
|
845 |
-
*/
|
846 |
-
protected function set_scheme($scheme)
|
847 |
-
{
|
848 |
-
if ($scheme === null)
|
849 |
-
{
|
850 |
-
$this->scheme = null;
|
851 |
-
}
|
852 |
-
elseif (!preg_match('/^[A-Za-z][0-9A-Za-z+\-.]*$/', $scheme))
|
853 |
-
{
|
854 |
-
$this->scheme = null;
|
855 |
-
return false;
|
856 |
-
}
|
857 |
-
else
|
858 |
-
{
|
859 |
-
$this->scheme = strtolower($scheme);
|
860 |
-
}
|
861 |
-
return true;
|
862 |
-
}
|
863 |
-
|
864 |
-
/**
|
865 |
-
* Set the authority. Returns true on success, false on failure (if there are
|
866 |
-
* any invalid characters).
|
867 |
-
*
|
868 |
-
* @param string $authority
|
869 |
-
* @return bool
|
870 |
-
*/
|
871 |
-
protected function set_authority($authority)
|
872 |
-
{
|
873 |
-
static $cache;
|
874 |
-
if (!$cache)
|
875 |
-
$cache = array();
|
876 |
-
|
877 |
-
if ($authority === null)
|
878 |
-
{
|
879 |
-
$this->iuserinfo = null;
|
880 |
-
$this->ihost = null;
|
881 |
-
$this->port = null;
|
882 |
-
return true;
|
883 |
-
}
|
884 |
-
elseif (isset($cache[$authority]))
|
885 |
-
{
|
886 |
-
list($this->iuserinfo,
|
887 |
-
$this->ihost,
|
888 |
-
$this->port,
|
889 |
-
$return) = $cache[$authority];
|
890 |
-
|
891 |
-
return $return;
|
892 |
-
}
|
893 |
-
else
|
894 |
-
{
|
895 |
-
$remaining = $authority;
|
896 |
-
if (($iuserinfo_end = strrpos($remaining, '@')) !== false)
|
897 |
-
{
|
898 |
-
$iuserinfo = substr($remaining, 0, $iuserinfo_end);
|
899 |
-
$remaining = substr($remaining, $iuserinfo_end + 1);
|
900 |
-
}
|
901 |
-
else
|
902 |
-
{
|
903 |
-
$iuserinfo = null;
|
904 |
-
}
|
905 |
-
if (($port_start = strpos($remaining, ':', strpos($remaining, ']'))) !== false)
|
906 |
-
{
|
907 |
-
if (($port = substr($remaining, $port_start + 1)) === false)
|
908 |
-
{
|
909 |
-
$port = null;
|
910 |
-
}
|
911 |
-
$remaining = substr($remaining, 0, $port_start);
|
912 |
-
}
|
913 |
-
else
|
914 |
-
{
|
915 |
-
$port = null;
|
916 |
-
}
|
917 |
-
|
918 |
-
$return = $this->set_userinfo($iuserinfo) &&
|
919 |
-
$this->set_host($remaining) &&
|
920 |
-
$this->set_port($port);
|
921 |
-
|
922 |
-
$cache[$authority] = array($this->iuserinfo,
|
923 |
-
$this->ihost,
|
924 |
-
$this->port,
|
925 |
-
$return);
|
926 |
-
|
927 |
-
return $return;
|
928 |
-
}
|
929 |
-
}
|
930 |
-
|
931 |
-
/**
|
932 |
-
* Set the iuserinfo.
|
933 |
-
*
|
934 |
-
* @param string $iuserinfo
|
935 |
-
* @return bool
|
936 |
-
*/
|
937 |
-
protected function set_userinfo($iuserinfo)
|
938 |
-
{
|
939 |
-
if ($iuserinfo === null)
|
940 |
-
{
|
941 |
-
$this->iuserinfo = null;
|
942 |
-
}
|
943 |
-
else
|
944 |
-
{
|
945 |
-
$this->iuserinfo = $this->replace_invalid_with_pct_encoding($iuserinfo, '!$&\'()*+,;=:');
|
946 |
-
$this->scheme_normalization();
|
947 |
-
}
|
948 |
-
|
949 |
-
return true;
|
950 |
-
}
|
951 |
-
|
952 |
-
/**
|
953 |
-
* Set the ihost. Returns true on success, false on failure (if there are
|
954 |
-
* any invalid characters).
|
955 |
-
*
|
956 |
-
* @param string $ihost
|
957 |
-
* @return bool
|
958 |
-
*/
|
959 |
-
protected function set_host($ihost)
|
960 |
-
{
|
961 |
-
if ($ihost === null)
|
962 |
-
{
|
963 |
-
$this->ihost = null;
|
964 |
-
return true;
|
965 |
-
}
|
966 |
-
elseif (substr($ihost, 0, 1) === '[' && substr($ihost, -1) === ']')
|
967 |
-
{
|
968 |
-
if (Requests_IPv6::check_ipv6(substr($ihost, 1, -1)))
|
969 |
-
{
|
970 |
-
$this->ihost = '[' . Requests_IPv6::compress(substr($ihost, 1, -1)) . ']';
|
971 |
-
}
|
972 |
-
else
|
973 |
-
{
|
974 |
-
$this->ihost = null;
|
975 |
-
return false;
|
976 |
-
}
|
977 |
-
}
|
978 |
-
else
|
979 |
-
{
|
980 |
-
$ihost = $this->replace_invalid_with_pct_encoding($ihost, '!$&\'()*+,;=');
|
981 |
-
|
982 |
-
// Lowercase, but ignore pct-encoded sections (as they should
|
983 |
-
// remain uppercase). This must be done after the previous step
|
984 |
-
// as that can add unescaped characters.
|
985 |
-
$position = 0;
|
986 |
-
$strlen = strlen($ihost);
|
987 |
-
while (($position += strcspn($ihost, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ%', $position)) < $strlen)
|
988 |
-
{
|
989 |
-
if ($ihost[$position] === '%')
|
990 |
-
{
|
991 |
-
$position += 3;
|
992 |
-
}
|
993 |
-
else
|
994 |
-
{
|
995 |
-
$ihost[$position] = strtolower($ihost[$position]);
|
996 |
-
$position++;
|
997 |
-
}
|
998 |
-
}
|
999 |
-
|
1000 |
-
$this->ihost = $ihost;
|
1001 |
-
}
|
1002 |
-
|
1003 |
-
$this->scheme_normalization();
|
1004 |
-
|
1005 |
-
return true;
|
1006 |
-
}
|
1007 |
-
|
1008 |
-
/**
|
1009 |
-
* Set the port. Returns true on success, false on failure (if there are
|
1010 |
-
* any invalid characters).
|
1011 |
-
*
|
1012 |
-
* @param string $port
|
1013 |
-
* @return bool
|
1014 |
-
*/
|
1015 |
-
protected function set_port($port)
|
1016 |
-
{
|
1017 |
-
if ($port === null)
|
1018 |
-
{
|
1019 |
-
$this->port = null;
|
1020 |
-
return true;
|
1021 |
-
}
|
1022 |
-
elseif (strspn($port, '0123456789') === strlen($port))
|
1023 |
-
{
|
1024 |
-
$this->port = (int) $port;
|
1025 |
-
$this->scheme_normalization();
|
1026 |
-
return true;
|
1027 |
-
}
|
1028 |
-
else
|
1029 |
-
{
|
1030 |
-
$this->port = null;
|
1031 |
-
return false;
|
1032 |
-
}
|
1033 |
-
}
|
1034 |
-
|
1035 |
-
/**
|
1036 |
-
* Set the ipath.
|
1037 |
-
*
|
1038 |
-
* @param string $ipath
|
1039 |
-
* @return bool
|
1040 |
-
*/
|
1041 |
-
protected function set_path($ipath)
|
1042 |
-
{
|
1043 |
-
static $cache;
|
1044 |
-
if (!$cache)
|
1045 |
-
{
|
1046 |
-
$cache = array();
|
1047 |
-
}
|
1048 |
-
|
1049 |
-
$ipath = (string) $ipath;
|
1050 |
-
|
1051 |
-
if (isset($cache[$ipath]))
|
1052 |
-
{
|
1053 |
-
$this->ipath = $cache[$ipath][(int) ($this->scheme !== null)];
|
1054 |
-
}
|
1055 |
-
else
|
1056 |
-
{
|
1057 |
-
$valid = $this->replace_invalid_with_pct_encoding($ipath, '!$&\'()*+,;=@:/');
|
1058 |
-
$removed = $this->remove_dot_segments($valid);
|
1059 |
-
|
1060 |
-
$cache[$ipath] = array($valid, $removed);
|
1061 |
-
$this->ipath = ($this->scheme !== null) ? $removed : $valid;
|
1062 |
-
}
|
1063 |
-
|
1064 |
-
$this->scheme_normalization();
|
1065 |
-
return true;
|
1066 |
-
}
|
1067 |
-
|
1068 |
-
/**
|
1069 |
-
* Set the iquery.
|
1070 |
-
*
|
1071 |
-
* @param string $iquery
|
1072 |
-
* @return bool
|
1073 |
-
*/
|
1074 |
-
protected function set_query($iquery)
|
1075 |
-
{
|
1076 |
-
if ($iquery === null)
|
1077 |
-
{
|
1078 |
-
$this->iquery = null;
|
1079 |
-
}
|
1080 |
-
else
|
1081 |
-
{
|
1082 |
-
$this->iquery = $this->replace_invalid_with_pct_encoding($iquery, '!$&\'()*+,;=:@/?', true);
|
1083 |
-
$this->scheme_normalization();
|
1084 |
-
}
|
1085 |
-
return true;
|
1086 |
-
}
|
1087 |
-
|
1088 |
-
/**
|
1089 |
-
* Set the ifragment.
|
1090 |
-
*
|
1091 |
-
* @param string $ifragment
|
1092 |
-
* @return bool
|
1093 |
-
*/
|
1094 |
-
protected function set_fragment($ifragment)
|
1095 |
-
{
|
1096 |
-
if ($ifragment === null)
|
1097 |
-
{
|
1098 |
-
$this->ifragment = null;
|
1099 |
-
}
|
1100 |
-
else
|
1101 |
-
{
|
1102 |
-
$this->ifragment = $this->replace_invalid_with_pct_encoding($ifragment, '!$&\'()*+,;=:@/?');
|
1103 |
-
$this->scheme_normalization();
|
1104 |
-
}
|
1105 |
-
return true;
|
1106 |
-
}
|
1107 |
-
|
1108 |
-
/**
|
1109 |
-
* Convert an IRI to a URI (or parts thereof)
|
1110 |
-
*
|
1111 |
-
* @return string
|
1112 |
-
*/
|
1113 |
-
protected function to_uri($string)
|
1114 |
-
{
|
1115 |
-
static $non_ascii;
|
1116 |
-
if (!$non_ascii)
|
1117 |
-
{
|
1118 |
-
$non_ascii = implode('', range("\x80", "\xFF"));
|
1119 |
-
}
|
1120 |
-
|
1121 |
-
$position = 0;
|
1122 |
-
$strlen = strlen($string);
|
1123 |
-
while (($position += strcspn($string, $non_ascii, $position)) < $strlen)
|
1124 |
-
{
|
1125 |
-
$string = substr_replace($string, sprintf('%%%02X', ord($string[$position])), $position, 1);
|
1126 |
-
$position += 3;
|
1127 |
-
$strlen += 2;
|
1128 |
-
}
|
1129 |
-
|
1130 |
-
return $string;
|
1131 |
-
}
|
1132 |
-
|
1133 |
-
/**
|
1134 |
-
* Get the complete IRI
|
1135 |
-
*
|
1136 |
-
* @return string
|
1137 |
-
*/
|
1138 |
-
protected function get_iri()
|
1139 |
-
{
|
1140 |
-
if (!$this->is_valid())
|
1141 |
-
{
|
1142 |
-
return false;
|
1143 |
-
}
|
1144 |
-
|
1145 |
-
$iri = '';
|
1146 |
-
if ($this->scheme !== null)
|
1147 |
-
{
|
1148 |
-
$iri .= $this->scheme . ':';
|
1149 |
-
}
|
1150 |
-
if (($iauthority = $this->get_iauthority()) !== null)
|
1151 |
-
{
|
1152 |
-
$iri .= '//' . $iauthority;
|
1153 |
-
}
|
1154 |
-
$iri .= $this->ipath;
|
1155 |
-
if ($this->iquery !== null)
|
1156 |
-
{
|
1157 |
-
$iri .= '?' . $this->iquery;
|
1158 |
-
}
|
1159 |
-
if ($this->ifragment !== null)
|
1160 |
-
{
|
1161 |
-
$iri .= '#' . $this->ifragment;
|
1162 |
-
}
|
1163 |
-
|
1164 |
-
return $iri;
|
1165 |
-
}
|
1166 |
-
|
1167 |
-
/**
|
1168 |
-
* Get the complete URI
|
1169 |
-
*
|
1170 |
-
* @return string
|
1171 |
-
*/
|
1172 |
-
protected function get_uri()
|
1173 |
-
{
|
1174 |
-
return $this->to_uri($this->get_iri());
|
1175 |
-
}
|
1176 |
-
|
1177 |
-
/**
|
1178 |
-
* Get the complete iauthority
|
1179 |
-
*
|
1180 |
-
* @return string
|
1181 |
-
*/
|
1182 |
-
protected function get_iauthority()
|
1183 |
-
{
|
1184 |
-
if ($this->iuserinfo !== null || $this->ihost !== null || $this->port !== null)
|
1185 |
-
{
|
1186 |
-
$iauthority = '';
|
1187 |
-
if ($this->iuserinfo !== null)
|
1188 |
-
{
|
1189 |
-
$iauthority .= $this->iuserinfo . '@';
|
1190 |
-
}
|
1191 |
-
if ($this->ihost !== null)
|
1192 |
-
{
|
1193 |
-
$iauthority .= $this->ihost;
|
1194 |
-
}
|
1195 |
-
if ($this->port !== null)
|
1196 |
-
{
|
1197 |
-
$iauthority .= ':' . $this->port;
|
1198 |
-
}
|
1199 |
-
return $iauthority;
|
1200 |
-
}
|
1201 |
-
else
|
1202 |
-
{
|
1203 |
-
return null;
|
1204 |
-
}
|
1205 |
-
}
|
1206 |
-
|
1207 |
-
/**
|
1208 |
-
* Get the complete authority
|
1209 |
-
*
|
1210 |
-
* @return string
|
1211 |
-
*/
|
1212 |
-
protected function get_authority()
|
1213 |
-
{
|
1214 |
-
$iauthority = $this->get_iauthority();
|
1215 |
-
if (is_string($iauthority))
|
1216 |
-
return $this->to_uri($iauthority);
|
1217 |
-
else
|
1218 |
-
return $iauthority;
|
1219 |
-
}
|
1220 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Proxy.php
DELETED
@@ -1,35 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Proxy connection interface
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Proxy
|
7 |
-
* @since 1.6
|
8 |
-
*/
|
9 |
-
|
10 |
-
/**
|
11 |
-
* Proxy connection interface
|
12 |
-
*
|
13 |
-
* Implement this interface to handle proxy settings and authentication
|
14 |
-
*
|
15 |
-
* Parameters should be passed via the constructor where possible, as this
|
16 |
-
* makes it much easier for users to use your provider.
|
17 |
-
*
|
18 |
-
* @see Requests_Hooks
|
19 |
-
* @package Requests
|
20 |
-
* @subpackage Proxy
|
21 |
-
* @since 1.6
|
22 |
-
*/
|
23 |
-
interface Requests_Proxy {
|
24 |
-
/**
|
25 |
-
* Register hooks as needed
|
26 |
-
*
|
27 |
-
* This method is called in {@see Requests::request} when the user has set
|
28 |
-
* an instance as the 'auth' option. Use this callback to register all the
|
29 |
-
* hooks you'll need.
|
30 |
-
*
|
31 |
-
* @see Requests_Hooks::register
|
32 |
-
* @param Requests_Hooks $hooks Hook system
|
33 |
-
*/
|
34 |
-
public function register(Requests_Hooks &$hooks);
|
35 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Proxy/HTTP.php
DELETED
@@ -1,150 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* HTTP Proxy connection interface
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Proxy
|
7 |
-
* @since 1.6
|
8 |
-
*/
|
9 |
-
|
10 |
-
/**
|
11 |
-
* HTTP Proxy connection interface
|
12 |
-
*
|
13 |
-
* Provides a handler for connection via an HTTP proxy
|
14 |
-
*
|
15 |
-
* @package Requests
|
16 |
-
* @subpackage Proxy
|
17 |
-
* @since 1.6
|
18 |
-
*/
|
19 |
-
class Requests_Proxy_HTTP implements Requests_Proxy {
|
20 |
-
/**
|
21 |
-
* Proxy host and port
|
22 |
-
*
|
23 |
-
* Notation: "host:port" (eg 127.0.0.1:8080 or someproxy.com:3128)
|
24 |
-
*
|
25 |
-
* @var string
|
26 |
-
*/
|
27 |
-
public $proxy;
|
28 |
-
|
29 |
-
/**
|
30 |
-
* Username
|
31 |
-
*
|
32 |
-
* @var string
|
33 |
-
*/
|
34 |
-
public $user;
|
35 |
-
|
36 |
-
/**
|
37 |
-
* Password
|
38 |
-
*
|
39 |
-
* @var string
|
40 |
-
*/
|
41 |
-
public $pass;
|
42 |
-
|
43 |
-
/**
|
44 |
-
* Do we need to authenticate? (ie username & password have been provided)
|
45 |
-
*
|
46 |
-
* @var boolean
|
47 |
-
*/
|
48 |
-
public $use_authentication;
|
49 |
-
|
50 |
-
/**
|
51 |
-
* Constructor
|
52 |
-
*
|
53 |
-
* @since 1.6
|
54 |
-
* @throws Requests_Exception On incorrect number of arguments (`authbasicbadargs`)
|
55 |
-
* @param array|null $args Array of user and password. Must have exactly two elements
|
56 |
-
*/
|
57 |
-
public function __construct($args = null) {
|
58 |
-
if (is_string($args)) {
|
59 |
-
$this->proxy = $args;
|
60 |
-
}
|
61 |
-
elseif (is_array($args)) {
|
62 |
-
if (count($args) == 1) {
|
63 |
-
list($this->proxy) = $args;
|
64 |
-
}
|
65 |
-
elseif (count($args) == 3) {
|
66 |
-
list($this->proxy, $this->user, $this->pass) = $args;
|
67 |
-
$this->use_authentication = true;
|
68 |
-
}
|
69 |
-
else {
|
70 |
-
throw new Requests_Exception( 'Invalid number of arguments', 'proxyhttpbadargs');
|
71 |
-
}
|
72 |
-
}
|
73 |
-
}
|
74 |
-
|
75 |
-
/**
|
76 |
-
* Register the necessary callbacks
|
77 |
-
*
|
78 |
-
* @since 1.6
|
79 |
-
* @see curl_before_send
|
80 |
-
* @see fsockopen_remote_socket
|
81 |
-
* @see fsockopen_remote_host_path
|
82 |
-
* @see fsockopen_header
|
83 |
-
* @param Requests_Hooks $hooks Hook system
|
84 |
-
*/
|
85 |
-
public function register(Requests_Hooks &$hooks) {
|
86 |
-
$hooks->register('curl.before_send', array(&$this, 'curl_before_send'));
|
87 |
-
|
88 |
-
$hooks->register('fsockopen.remote_socket', array(&$this, 'fsockopen_remote_socket'));
|
89 |
-
$hooks->register('fsockopen.remote_host_path', array(&$this, 'fsockopen_remote_host_path'));
|
90 |
-
if( $this->use_authentication ) {
|
91 |
-
$hooks->register('fsockopen.after_headers', array(&$this, 'fsockopen_header'));
|
92 |
-
}
|
93 |
-
}
|
94 |
-
|
95 |
-
/**
|
96 |
-
* Set cURL parameters before the data is sent
|
97 |
-
*
|
98 |
-
* @since 1.6
|
99 |
-
* @param resource $handle cURL resource
|
100 |
-
*/
|
101 |
-
public function curl_before_send(&$handle) {
|
102 |
-
curl_setopt($handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
|
103 |
-
curl_setopt($handle, CURLOPT_PROXY, $this->proxy);
|
104 |
-
|
105 |
-
if ($this->use_authentication) {
|
106 |
-
curl_setopt($handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
|
107 |
-
curl_setopt($handle, CURLOPT_PROXYUSERPWD, $this->get_auth_string());
|
108 |
-
}
|
109 |
-
}
|
110 |
-
|
111 |
-
/**
|
112 |
-
* Alter remote socket information before opening socket connection
|
113 |
-
*
|
114 |
-
* @since 1.6
|
115 |
-
* @param string $out HTTP header string
|
116 |
-
*/
|
117 |
-
public function fsockopen_remote_socket( &$remote_socket ) {
|
118 |
-
$remote_socket = $this->proxy;
|
119 |
-
}
|
120 |
-
|
121 |
-
/**
|
122 |
-
* Alter remote path before getting stream data
|
123 |
-
*
|
124 |
-
* @since 1.6
|
125 |
-
* @param string $out HTTP header string
|
126 |
-
*/
|
127 |
-
public function fsockopen_remote_host_path( &$path, $url ) {
|
128 |
-
$path = $url;
|
129 |
-
}
|
130 |
-
|
131 |
-
/**
|
132 |
-
* Add extra headers to the request before sending
|
133 |
-
*
|
134 |
-
* @since 1.6
|
135 |
-
* @param string $out HTTP header string
|
136 |
-
*/
|
137 |
-
public function fsockopen_header( &$out ) {
|
138 |
-
$out .= "Proxy-Authorization: Basic " . base64_encode($this->get_auth_string()) . "\r\n";
|
139 |
-
}
|
140 |
-
|
141 |
-
/**
|
142 |
-
* Get the authentication string (user:pass)
|
143 |
-
*
|
144 |
-
* @since 1.6
|
145 |
-
* @return string
|
146 |
-
*/
|
147 |
-
public function get_auth_string() {
|
148 |
-
return $this->user . ':' . $this->pass;
|
149 |
-
}
|
150 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Response.php
DELETED
@@ -1,95 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* HTTP response class
|
4 |
-
*
|
5 |
-
* Contains a response from Requests::request()
|
6 |
-
* @package Requests
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* HTTP response class
|
11 |
-
*
|
12 |
-
* Contains a response from Requests::request()
|
13 |
-
* @package Requests
|
14 |
-
*/
|
15 |
-
class Requests_Response {
|
16 |
-
/**
|
17 |
-
* Constructor
|
18 |
-
*/
|
19 |
-
public function __construct() {
|
20 |
-
$this->headers = new Requests_Response_Headers();
|
21 |
-
}
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Response body
|
25 |
-
* @var string
|
26 |
-
*/
|
27 |
-
public $body = '';
|
28 |
-
|
29 |
-
/**
|
30 |
-
* Raw HTTP data from the transport
|
31 |
-
* @var string
|
32 |
-
*/
|
33 |
-
public $raw = '';
|
34 |
-
|
35 |
-
/**
|
36 |
-
* Headers, as an associative array
|
37 |
-
* @var array
|
38 |
-
*/
|
39 |
-
public $headers = array();
|
40 |
-
|
41 |
-
/**
|
42 |
-
* Status code, false if non-blocking
|
43 |
-
* @var integer|boolean
|
44 |
-
*/
|
45 |
-
public $status_code = false;
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Whether the request succeeded or not
|
49 |
-
* @var boolean
|
50 |
-
*/
|
51 |
-
public $success = false;
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Number of redirects the request used
|
55 |
-
* @var integer
|
56 |
-
*/
|
57 |
-
public $redirects = 0;
|
58 |
-
|
59 |
-
/**
|
60 |
-
* URL requested
|
61 |
-
* @var string
|
62 |
-
*/
|
63 |
-
public $url = '';
|
64 |
-
|
65 |
-
/**
|
66 |
-
* Previous requests (from redirects)
|
67 |
-
* @var array Array of Requests_Response objects
|
68 |
-
*/
|
69 |
-
public $history = array();
|
70 |
-
|
71 |
-
/**
|
72 |
-
* Cookies from the request
|
73 |
-
*/
|
74 |
-
public $cookies = array();
|
75 |
-
|
76 |
-
/**
|
77 |
-
* Throws an exception if the request was not successful
|
78 |
-
*
|
79 |
-
* @throws Requests_Exception If `$allow_redirects` is false, and code is 3xx (`response.no_redirects`)
|
80 |
-
* @throws Requests_Exception_HTTP On non-successful status code. Exception class corresponds to code (e.g. {@see Requests_Exception_HTTP_404})
|
81 |
-
* @param boolean $allow_redirects Set to false to throw on a 3xx as well
|
82 |
-
*/
|
83 |
-
public function throw_for_status($allow_redirects = true) {
|
84 |
-
if ($this->status_code >= 300 && $this->status_code < 400) {
|
85 |
-
if (!$allow_redirects) {
|
86 |
-
throw new Requests_Exception('Redirection not allowed', 'response.no_redirects', $this);
|
87 |
-
}
|
88 |
-
}
|
89 |
-
|
90 |
-
elseif (!$this->success) {
|
91 |
-
$exception = Requests_Exception_HTTP::get_class($this->status_code);
|
92 |
-
throw new $exception(null, $this);
|
93 |
-
}
|
94 |
-
}
|
95 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Response/Headers.php
DELETED
@@ -1,95 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Case-insensitive dictionary, suitable for HTTP headers
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Case-insensitive dictionary, suitable for HTTP headers
|
10 |
-
*
|
11 |
-
* @package Requests
|
12 |
-
*/
|
13 |
-
class Requests_Response_Headers extends Requests_Utility_CaseInsensitiveDictionary {
|
14 |
-
/**
|
15 |
-
* Get the given header
|
16 |
-
*
|
17 |
-
* Unlike {@see self::getValues()}, this returns a string. If there are
|
18 |
-
* multiple values, it concatenates them with a comma as per RFC2616.
|
19 |
-
*
|
20 |
-
* Avoid using this where commas may be used unquoted in values, such as
|
21 |
-
* Set-Cookie headers.
|
22 |
-
*
|
23 |
-
* @param string $key
|
24 |
-
* @return string Header value
|
25 |
-
*/
|
26 |
-
public function offsetGet($key) {
|
27 |
-
$key = strtolower($key);
|
28 |
-
if (!isset($this->data[$key]))
|
29 |
-
return null;
|
30 |
-
|
31 |
-
return $this->flatten($this->data[$key]);
|
32 |
-
}
|
33 |
-
|
34 |
-
/**
|
35 |
-
* Set the given item
|
36 |
-
*
|
37 |
-
* @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
|
38 |
-
*
|
39 |
-
* @param string $key Item name
|
40 |
-
* @param string $value Item value
|
41 |
-
*/
|
42 |
-
public function offsetSet($key, $value) {
|
43 |
-
if ($key === null) {
|
44 |
-
throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
|
45 |
-
}
|
46 |
-
|
47 |
-
$key = strtolower($key);
|
48 |
-
|
49 |
-
if (!isset($this->data[$key])) {
|
50 |
-
$this->data[$key] = array();
|
51 |
-
}
|
52 |
-
|
53 |
-
$this->data[$key][] = $value;
|
54 |
-
}
|
55 |
-
|
56 |
-
/**
|
57 |
-
* Get all values for a given header
|
58 |
-
*
|
59 |
-
* @param string $key
|
60 |
-
* @return array Header values
|
61 |
-
*/
|
62 |
-
public function getValues($key) {
|
63 |
-
$key = strtolower($key);
|
64 |
-
if (!isset($this->data[$key]))
|
65 |
-
return null;
|
66 |
-
|
67 |
-
return $this->data[$key];
|
68 |
-
}
|
69 |
-
|
70 |
-
/**
|
71 |
-
* Flattens a value into a string
|
72 |
-
*
|
73 |
-
* Converts an array into a string by imploding values with a comma, as per
|
74 |
-
* RFC2616's rules for folding headers.
|
75 |
-
*
|
76 |
-
* @param string|array $value Value to flatten
|
77 |
-
* @return string Flattened value
|
78 |
-
*/
|
79 |
-
public function flatten($value) {
|
80 |
-
if (is_array($value))
|
81 |
-
$value = implode(',', $value);
|
82 |
-
|
83 |
-
return $value;
|
84 |
-
}
|
85 |
-
|
86 |
-
/**
|
87 |
-
* Get an iterator for the data
|
88 |
-
*
|
89 |
-
* Converts the internal
|
90 |
-
* @return ArrayIterator
|
91 |
-
*/
|
92 |
-
public function getIterator() {
|
93 |
-
return new Requests_Utility_FilteredIterator($this->data, array($this, 'flatten'));
|
94 |
-
}
|
95 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/SSL.php
DELETED
@@ -1,151 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* SSL utilities for Requests
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Utilities
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* SSL utilities for Requests
|
11 |
-
*
|
12 |
-
* Collection of utilities for working with and verifying SSL certificates.
|
13 |
-
*
|
14 |
-
* @package Requests
|
15 |
-
* @subpackage Utilities
|
16 |
-
*/
|
17 |
-
class Requests_SSL {
|
18 |
-
/**
|
19 |
-
* Verify the certificate against common name and subject alternative names
|
20 |
-
*
|
21 |
-
* Unfortunately, PHP doesn't check the certificate against the alternative
|
22 |
-
* names, leading things like 'https://www.github.com/' to be invalid.
|
23 |
-
* Instead
|
24 |
-
*
|
25 |
-
* @see http://tools.ietf.org/html/rfc2818#section-3.1 RFC2818, Section 3.1
|
26 |
-
*
|
27 |
-
* @throws Requests_Exception On not obtaining a match for the host (`fsockopen.ssl.no_match`)
|
28 |
-
* @param string $host Host name to verify against
|
29 |
-
* @param resource $context Stream context
|
30 |
-
* @return bool
|
31 |
-
*/
|
32 |
-
public static function verify_certificate($host, $cert) {
|
33 |
-
// Calculate the valid wildcard match if the host is not an IP address
|
34 |
-
$parts = explode('.', $host);
|
35 |
-
if (ip2long($host) === false) {
|
36 |
-
$parts[0] = '*';
|
37 |
-
}
|
38 |
-
$wildcard = implode('.', $parts);
|
39 |
-
|
40 |
-
$has_dns_alt = false;
|
41 |
-
|
42 |
-
// Check the subjectAltName
|
43 |
-
if (!empty($cert['extensions']) && !empty($cert['extensions']['subjectAltName'])) {
|
44 |
-
$altnames = explode(',', $cert['extensions']['subjectAltName']);
|
45 |
-
foreach ($altnames as $altname) {
|
46 |
-
$altname = trim($altname);
|
47 |
-
if (strpos($altname, 'DNS:') !== 0)
|
48 |
-
continue;
|
49 |
-
|
50 |
-
$has_dns_alt = true;
|
51 |
-
|
52 |
-
// Strip the 'DNS:' prefix and trim whitespace
|
53 |
-
$altname = trim(substr($altname, 4));
|
54 |
-
|
55 |
-
// Check for a match
|
56 |
-
if (self::match_domain($host, $altname) === true) {
|
57 |
-
return true;
|
58 |
-
}
|
59 |
-
}
|
60 |
-
}
|
61 |
-
|
62 |
-
// Fall back to checking the common name if we didn't get any dNSName
|
63 |
-
// alt names, as per RFC2818
|
64 |
-
if (!$has_dns_alt && !empty($cert['subject']['CN'])) {
|
65 |
-
// Check for a match
|
66 |
-
if (self::match_domain($host, $cert['subject']['CN']) === true) {
|
67 |
-
return true;
|
68 |
-
}
|
69 |
-
}
|
70 |
-
|
71 |
-
return false;
|
72 |
-
}
|
73 |
-
|
74 |
-
/**
|
75 |
-
* Verify that a reference name is valid
|
76 |
-
*
|
77 |
-
* Verifies a dNSName for HTTPS usage, (almost) as per Firefox's rules:
|
78 |
-
* - Wildcards can only occur in a name with more than 3 components
|
79 |
-
* - Wildcards can only occur as the last character in the first
|
80 |
-
* component
|
81 |
-
* - Wildcards may be preceded by additional characters
|
82 |
-
*
|
83 |
-
* We modify these rules to be a bit stricter and only allow the wildcard
|
84 |
-
* character to be the full first component; that is, with the exclusion of
|
85 |
-
* the third rule.
|
86 |
-
*
|
87 |
-
* @param string $reference Reference dNSName
|
88 |
-
* @return boolean Is the name valid?
|
89 |
-
*/
|
90 |
-
public static function verify_reference_name($reference) {
|
91 |
-
$parts = explode('.', $reference);
|
92 |
-
|
93 |
-
// Check the first part of the name
|
94 |
-
$first = array_shift($parts);
|
95 |
-
|
96 |
-
if (strpos($first, '*') !== false) {
|
97 |
-
// Check that the wildcard is the full part
|
98 |
-
if ($first !== '*') {
|
99 |
-
return false;
|
100 |
-
}
|
101 |
-
|
102 |
-
// Check that we have at least 3 components (including first)
|
103 |
-
if (count($parts) < 2) {
|
104 |
-
return false;
|
105 |
-
}
|
106 |
-
}
|
107 |
-
|
108 |
-
// Check the remaining parts
|
109 |
-
foreach ($parts as $part) {
|
110 |
-
if (strpos($part, '*') !== false) {
|
111 |
-
return false;
|
112 |
-
}
|
113 |
-
}
|
114 |
-
|
115 |
-
// Nothing found, verified!
|
116 |
-
return true;
|
117 |
-
}
|
118 |
-
|
119 |
-
/**
|
120 |
-
* Match a hostname against a dNSName reference
|
121 |
-
*
|
122 |
-
* @param string $host Requested host
|
123 |
-
* @param string $reference dNSName to match against
|
124 |
-
* @return boolean Does the domain match?
|
125 |
-
*/
|
126 |
-
public static function match_domain($host, $reference) {
|
127 |
-
// Check if the reference is blacklisted first
|
128 |
-
if (self::verify_reference_name($reference) !== true) {
|
129 |
-
return false;
|
130 |
-
}
|
131 |
-
|
132 |
-
// Check for a direct match
|
133 |
-
if ($host === $reference) {
|
134 |
-
return true;
|
135 |
-
}
|
136 |
-
|
137 |
-
// Calculate the valid wildcard match if the host is not an IP address
|
138 |
-
// Also validates that the host has 3 parts or more, as per Firefox's
|
139 |
-
// ruleset.
|
140 |
-
if (ip2long($host) === false) {
|
141 |
-
$parts = explode('.', $host);
|
142 |
-
$parts[0] = '*';
|
143 |
-
$wildcard = implode('.', $parts);
|
144 |
-
if ($wildcard === $reference) {
|
145 |
-
return true;
|
146 |
-
}
|
147 |
-
}
|
148 |
-
|
149 |
-
return false;
|
150 |
-
}
|
151 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Session.php
DELETED
@@ -1,258 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Session handler for persistent requests and default parameters
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Session Handler
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Session handler for persistent requests and default parameters
|
11 |
-
*
|
12 |
-
* Allows various options to be set as default values, and merges both the
|
13 |
-
* options and URL properties together. A base URL can be set for all requests,
|
14 |
-
* with all subrequests resolved from this. Base options can be set (including
|
15 |
-
* a shared cookie jar), then overridden for individual requests.
|
16 |
-
*
|
17 |
-
* @package Requests
|
18 |
-
* @subpackage Session Handler
|
19 |
-
*/
|
20 |
-
class Requests_Session {
|
21 |
-
/**
|
22 |
-
* Base URL for requests
|
23 |
-
*
|
24 |
-
* URLs will be made absolute using this as the base
|
25 |
-
* @var string|null
|
26 |
-
*/
|
27 |
-
public $url = null;
|
28 |
-
|
29 |
-
/**
|
30 |
-
* Base headers for requests
|
31 |
-
* @var array
|
32 |
-
*/
|
33 |
-
public $headers = array();
|
34 |
-
|
35 |
-
/**
|
36 |
-
* Base data for requests
|
37 |
-
*
|
38 |
-
* If both the base data and the per-request data are arrays, the data will
|
39 |
-
* be merged before sending the request.
|
40 |
-
*
|
41 |
-
* @var array
|
42 |
-
*/
|
43 |
-
public $data = array();
|
44 |
-
|
45 |
-
/**
|
46 |
-
* Base options for requests
|
47 |
-
*
|
48 |
-
* The base options are merged with the per-request data for each request.
|
49 |
-
* The only default option is a shared cookie jar between requests.
|
50 |
-
*
|
51 |
-
* Values here can also be set directly via properties on the Session
|
52 |
-
* object, e.g. `$session->useragent = 'X';`
|
53 |
-
*
|
54 |
-
* @var array
|
55 |
-
*/
|
56 |
-
public $options = array();
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Create a new session
|
60 |
-
*
|
61 |
-
* @param string|null $url Base URL for requests
|
62 |
-
* @param array $headers Default headers for requests
|
63 |
-
* @param array $data Default data for requests
|
64 |
-
* @param array $options Default options for requests
|
65 |
-
*/
|
66 |
-
public function __construct($url = null, $headers = array(), $data = array(), $options = array()) {
|
67 |
-
$this->url = $url;
|
68 |
-
$this->headers = $headers;
|
69 |
-
$this->data = $data;
|
70 |
-
$this->options = $options;
|
71 |
-
|
72 |
-
if (empty($this->options['cookies'])) {
|
73 |
-
$this->options['cookies'] = new Requests_Cookie_Jar();
|
74 |
-
}
|
75 |
-
}
|
76 |
-
|
77 |
-
/**
|
78 |
-
* Get a property's value
|
79 |
-
*
|
80 |
-
* @param string $key Property key
|
81 |
-
* @return mixed|null Property value, null if none found
|
82 |
-
*/
|
83 |
-
public function __get($key) {
|
84 |
-
if (isset($this->options[$key])) {
|
85 |
-
return $this->options[$key];
|
86 |
-
}
|
87 |
-
|
88 |
-
return null;
|
89 |
-
}
|
90 |
-
|
91 |
-
/**
|
92 |
-
* Set a property's value
|
93 |
-
*
|
94 |
-
* @param string $key Property key
|
95 |
-
* @param mixed $value Property value
|
96 |
-
*/
|
97 |
-
public function __set($key, $value) {
|
98 |
-
$this->options[$key] = $value;
|
99 |
-
}
|
100 |
-
|
101 |
-
/**
|
102 |
-
* Remove a property's value
|
103 |
-
*
|
104 |
-
* @param string $key Property key
|
105 |
-
*/
|
106 |
-
public function __isset($key) {
|
107 |
-
return isset($this->options[$key]);
|
108 |
-
}
|
109 |
-
|
110 |
-
/**
|
111 |
-
* Remove a property's value
|
112 |
-
*
|
113 |
-
* @param string $key Property key
|
114 |
-
*/
|
115 |
-
public function __unset($key) {
|
116 |
-
if (isset($this->options[$key])) {
|
117 |
-
unset($this->options[$key]);
|
118 |
-
}
|
119 |
-
}
|
120 |
-
|
121 |
-
/**#@+
|
122 |
-
* @see request()
|
123 |
-
* @param string $url
|
124 |
-
* @param array $headers
|
125 |
-
* @param array $options
|
126 |
-
* @return Requests_Response
|
127 |
-
*/
|
128 |
-
/**
|
129 |
-
* Send a GET request
|
130 |
-
*/
|
131 |
-
public function get($url, $headers = array(), $options = array()) {
|
132 |
-
return $this->request($url, $headers, null, Requests::GET, $options);
|
133 |
-
}
|
134 |
-
|
135 |
-
/**
|
136 |
-
* Send a HEAD request
|
137 |
-
*/
|
138 |
-
public function head($url, $headers = array(), $options = array()) {
|
139 |
-
return $this->request($url, $headers, null, Requests::HEAD, $options);
|
140 |
-
}
|
141 |
-
|
142 |
-
/**
|
143 |
-
* Send a DELETE request
|
144 |
-
*/
|
145 |
-
public function delete($url, $headers = array(), $options = array()) {
|
146 |
-
return $this->request($url, $headers, null, Requests::DELETE, $options);
|
147 |
-
}
|
148 |
-
/**#@-*/
|
149 |
-
|
150 |
-
/**#@+
|
151 |
-
* @see request()
|
152 |
-
* @param string $url
|
153 |
-
* @param array $headers
|
154 |
-
* @param array $data
|
155 |
-
* @param array $options
|
156 |
-
* @return Requests_Response
|
157 |
-
*/
|
158 |
-
/**
|
159 |
-
* Send a POST request
|
160 |
-
*/
|
161 |
-
public function post($url, $headers = array(), $data = array(), $options = array()) {
|
162 |
-
return $this->request($url, $headers, $data, Requests::POST, $options);
|
163 |
-
}
|
164 |
-
|
165 |
-
/**
|
166 |
-
* Send a PUT request
|
167 |
-
*/
|
168 |
-
public function put($url, $headers = array(), $data = array(), $options = array()) {
|
169 |
-
return $this->request($url, $headers, $data, Requests::PUT, $options);
|
170 |
-
}
|
171 |
-
|
172 |
-
/**
|
173 |
-
* Send a PATCH request
|
174 |
-
*
|
175 |
-
* Note: Unlike {@see post} and {@see put}, `$headers` is required, as the
|
176 |
-
* specification recommends that should send an ETag
|
177 |
-
*
|
178 |
-
* @link http://tools.ietf.org/html/rfc5789
|
179 |
-
*/
|
180 |
-
public function patch($url, $headers, $data = array(), $options = array()) {
|
181 |
-
return $this->request($url, $headers, $data, Requests::PATCH, $options);
|
182 |
-
}
|
183 |
-
/**#@-*/
|
184 |
-
|
185 |
-
/**
|
186 |
-
* Main interface for HTTP requests
|
187 |
-
*
|
188 |
-
* This method initiates a request and sends it via a transport before
|
189 |
-
* parsing.
|
190 |
-
*
|
191 |
-
* @see Requests::request()
|
192 |
-
*
|
193 |
-
* @throws Requests_Exception On invalid URLs (`nonhttp`)
|
194 |
-
*
|
195 |
-
* @param string $url URL to request
|
196 |
-
* @param array $headers Extra headers to send with the request
|
197 |
-
* @param array $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
|
198 |
-
* @param string $type HTTP request type (use Requests constants)
|
199 |
-
* @param array $options Options for the request (see {@see Requests::request})
|
200 |
-
* @return Requests_Response
|
201 |
-
*/
|
202 |
-
public function request($url, $headers = array(), $data = array(), $type = Requests::GET, $options = array()) {
|
203 |
-
$request = $this->merge_request(compact('url', 'headers', 'data', 'options'));
|
204 |
-
|
205 |
-
return Requests::request($request['url'], $request['headers'], $request['data'], $type, $request['options']);
|
206 |
-
}
|
207 |
-
|
208 |
-
/**
|
209 |
-
* Send multiple HTTP requests simultaneously
|
210 |
-
*
|
211 |
-
* @see Requests::request_multiple()
|
212 |
-
*
|
213 |
-
* @param array $requests Requests data (see {@see Requests::request_multiple})
|
214 |
-
* @param array $options Global and default options (see {@see Requests::request})
|
215 |
-
* @return array Responses (either Requests_Response or a Requests_Exception object)
|
216 |
-
*/
|
217 |
-
public function request_multiple($requests, $options = array()) {
|
218 |
-
foreach ($requests as $key => $request) {
|
219 |
-
$requests[$key] = $this->merge_request($request, false);
|
220 |
-
}
|
221 |
-
|
222 |
-
$options = array_merge($this->options, $options);
|
223 |
-
|
224 |
-
// Disallow forcing the type, as that's a per request setting
|
225 |
-
unset($options['type']);
|
226 |
-
|
227 |
-
return Requests::request_multiple($requests, $options);
|
228 |
-
}
|
229 |
-
|
230 |
-
/**
|
231 |
-
* Merge a request's data with the default data
|
232 |
-
*
|
233 |
-
* @param array $request Request data (same form as {@see request_multiple})
|
234 |
-
* @param boolean $merge_options Should we merge options as well?
|
235 |
-
* @return array Request data
|
236 |
-
*/
|
237 |
-
protected function merge_request($request, $merge_options = true) {
|
238 |
-
if ($this->url !== null) {
|
239 |
-
$request['url'] = Requests_IRI::absolutize($this->url, $request['url']);
|
240 |
-
$request['url'] = $request['url']->uri;
|
241 |
-
}
|
242 |
-
|
243 |
-
$request['headers'] = array_merge($this->headers, $request['headers']);
|
244 |
-
|
245 |
-
if (is_array($request['data']) && is_array($this->data)) {
|
246 |
-
$request['data'] = array_merge($this->data, $request['data']);
|
247 |
-
}
|
248 |
-
|
249 |
-
if ($merge_options !== false) {
|
250 |
-
$request['options'] = array_merge($this->options, $request['options']);
|
251 |
-
|
252 |
-
// Disallow forcing the type, as that's a per request setting
|
253 |
-
unset($request['options']['type']);
|
254 |
-
}
|
255 |
-
|
256 |
-
return $request;
|
257 |
-
}
|
258 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Transport.php
DELETED
@@ -1,41 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Base HTTP transport
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Transport
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Base HTTP transport
|
11 |
-
*
|
12 |
-
* @package Requests
|
13 |
-
* @subpackage Transport
|
14 |
-
*/
|
15 |
-
interface Requests_Transport {
|
16 |
-
/**
|
17 |
-
* Perform a request
|
18 |
-
*
|
19 |
-
* @param string $url URL to request
|
20 |
-
* @param array $headers Associative array of request headers
|
21 |
-
* @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
|
22 |
-
* @param array $options Request options, see {@see Requests::response()} for documentation
|
23 |
-
* @return string Raw HTTP result
|
24 |
-
*/
|
25 |
-
public function request($url, $headers = array(), $data = array(), $options = array());
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Send multiple requests simultaneously
|
29 |
-
*
|
30 |
-
* @param array $requests Request data (array of 'url', 'headers', 'data', 'options') as per {@see Requests_Transport::request}
|
31 |
-
* @param array $options Global options, see {@see Requests::response()} for documentation
|
32 |
-
* @return array Array of Requests_Response objects (may contain Requests_Exception or string responses as well)
|
33 |
-
*/
|
34 |
-
public function request_multiple($requests, $options);
|
35 |
-
|
36 |
-
/**
|
37 |
-
* Self-test whether the transport can be used
|
38 |
-
* @return bool
|
39 |
-
*/
|
40 |
-
public static function test();
|
41 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Transport/cURL.php
DELETED
@@ -1,372 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* cURL HTTP transport
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Transport
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* cURL HTTP transport
|
11 |
-
*
|
12 |
-
* @package Requests
|
13 |
-
* @subpackage Transport
|
14 |
-
*/
|
15 |
-
class Requests_Transport_cURL implements Requests_Transport {
|
16 |
-
const CURL_7_10_5 = 0x070A05;
|
17 |
-
const CURL_7_16_2 = 0x071002;
|
18 |
-
|
19 |
-
/**
|
20 |
-
* Raw HTTP data
|
21 |
-
*
|
22 |
-
* @var string
|
23 |
-
*/
|
24 |
-
public $headers = '';
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Information on the current request
|
28 |
-
*
|
29 |
-
* @var array cURL information array, see {@see http://php.net/curl_getinfo}
|
30 |
-
*/
|
31 |
-
public $info;
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Version string
|
35 |
-
*
|
36 |
-
* @var long
|
37 |
-
*/
|
38 |
-
public $version;
|
39 |
-
|
40 |
-
/**
|
41 |
-
* cURL handle
|
42 |
-
*
|
43 |
-
* @var resource
|
44 |
-
*/
|
45 |
-
protected $fp;
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Have we finished the headers yet?
|
49 |
-
*
|
50 |
-
* @var boolean
|
51 |
-
*/
|
52 |
-
protected $done_headers = false;
|
53 |
-
|
54 |
-
/**
|
55 |
-
* If streaming to a file, keep the file pointer
|
56 |
-
*
|
57 |
-
* @var resource
|
58 |
-
*/
|
59 |
-
protected $stream_handle;
|
60 |
-
|
61 |
-
/**
|
62 |
-
* Constructor
|
63 |
-
*/
|
64 |
-
public function __construct() {
|
65 |
-
$curl = curl_version();
|
66 |
-
$this->version = $curl['version_number'];
|
67 |
-
$this->fp = curl_init();
|
68 |
-
|
69 |
-
curl_setopt($this->fp, CURLOPT_HEADER, false);
|
70 |
-
curl_setopt($this->fp, CURLOPT_RETURNTRANSFER, 1);
|
71 |
-
if ($this->version >= self::CURL_7_10_5) {
|
72 |
-
curl_setopt($this->fp, CURLOPT_ENCODING, '');
|
73 |
-
}
|
74 |
-
if (defined('CURLOPT_PROTOCOLS')) {
|
75 |
-
curl_setopt($this->fp, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
|
76 |
-
}
|
77 |
-
if (defined('CURLOPT_REDIR_PROTOCOLS')) {
|
78 |
-
curl_setopt($this->fp, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
|
79 |
-
}
|
80 |
-
}
|
81 |
-
|
82 |
-
/**
|
83 |
-
* Perform a request
|
84 |
-
*
|
85 |
-
* @throws Requests_Exception On a cURL error (`curlerror`)
|
86 |
-
*
|
87 |
-
* @param string $url URL to request
|
88 |
-
* @param array $headers Associative array of request headers
|
89 |
-
* @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
|
90 |
-
* @param array $options Request options, see {@see Requests::response()} for documentation
|
91 |
-
* @return string Raw HTTP result
|
92 |
-
*/
|
93 |
-
public function request($url, $headers = array(), $data = array(), $options = array()) {
|
94 |
-
$this->setup_handle($url, $headers, $data, $options);
|
95 |
-
|
96 |
-
$options['hooks']->dispatch('curl.before_send', array(&$this->fp));
|
97 |
-
|
98 |
-
if ($options['filename'] !== false) {
|
99 |
-
$this->stream_handle = fopen($options['filename'], 'wb');
|
100 |
-
curl_setopt($this->fp, CURLOPT_FILE, $this->stream_handle);
|
101 |
-
}
|
102 |
-
|
103 |
-
if (isset($options['verify'])) {
|
104 |
-
if ($options['verify'] === false) {
|
105 |
-
curl_setopt($this->fp, CURLOPT_SSL_VERIFYHOST, 0);
|
106 |
-
curl_setopt($this->fp, CURLOPT_SSL_VERIFYPEER, 0);
|
107 |
-
|
108 |
-
} elseif (is_string($options['verify'])) {
|
109 |
-
curl_setopt($this->fp, CURLOPT_CAINFO, $options['verify']);
|
110 |
-
}
|
111 |
-
}
|
112 |
-
|
113 |
-
if (isset($options['verifyname']) && $options['verifyname'] === false) {
|
114 |
-
curl_setopt($this->fp, CURLOPT_SSL_VERIFYHOST, 0);
|
115 |
-
}
|
116 |
-
|
117 |
-
$response = curl_exec($this->fp);
|
118 |
-
|
119 |
-
$options['hooks']->dispatch('curl.after_send', array(&$fake_headers));
|
120 |
-
|
121 |
-
if (curl_errno($this->fp) === 23 || curl_errno($this->fp) === 61) {
|
122 |
-
curl_setopt($this->fp, CURLOPT_ENCODING, 'none');
|
123 |
-
$response = curl_exec($this->fp);
|
124 |
-
}
|
125 |
-
|
126 |
-
$this->process_response($response, $options);
|
127 |
-
curl_close($this->fp);
|
128 |
-
return $this->headers;
|
129 |
-
}
|
130 |
-
|
131 |
-
/**
|
132 |
-
* Send multiple requests simultaneously
|
133 |
-
*
|
134 |
-
* @param array $requests Request data
|
135 |
-
* @param array $options Global options
|
136 |
-
* @return array Array of Requests_Response objects (may contain Requests_Exception or string responses as well)
|
137 |
-
*/
|
138 |
-
public function request_multiple($requests, $options) {
|
139 |
-
$multihandle = curl_multi_init();
|
140 |
-
$subrequests = array();
|
141 |
-
$subhandles = array();
|
142 |
-
|
143 |
-
$class = get_class($this);
|
144 |
-
foreach ($requests as $id => $request) {
|
145 |
-
$subrequests[$id] = new $class();
|
146 |
-
$subhandles[$id] = $subrequests[$id]->get_subrequest_handle($request['url'], $request['headers'], $request['data'], $request['options']);
|
147 |
-
$request['options']['hooks']->dispatch('curl.before_multi_add', array(&$subhandles[$id]));
|
148 |
-
curl_multi_add_handle($multihandle, $subhandles[$id]);
|
149 |
-
}
|
150 |
-
|
151 |
-
$completed = 0;
|
152 |
-
$responses = array();
|
153 |
-
|
154 |
-
$request['options']['hooks']->dispatch('curl.before_multi_exec', array(&$multihandle));
|
155 |
-
|
156 |
-
do {
|
157 |
-
$active = false;
|
158 |
-
|
159 |
-
do {
|
160 |
-
$status = curl_multi_exec($multihandle, $active);
|
161 |
-
}
|
162 |
-
while ($status === CURLM_CALL_MULTI_PERFORM);
|
163 |
-
|
164 |
-
$to_process = array();
|
165 |
-
|
166 |
-
// Read the information as needed
|
167 |
-
while ($done = curl_multi_info_read($multihandle)) {
|
168 |
-
$key = array_search($done['handle'], $subhandles, true);
|
169 |
-
if (!isset($to_process[$key])) {
|
170 |
-
$to_process[$key] = $done;
|
171 |
-
}
|
172 |
-
}
|
173 |
-
|
174 |
-
// Parse the finished requests before we start getting the new ones
|
175 |
-
foreach ($to_process as $key => $done) {
|
176 |
-
$options = $requests[$key]['options'];
|
177 |
-
$responses[$key] = $subrequests[$key]->process_response(curl_multi_getcontent($done['handle']), $options);
|
178 |
-
|
179 |
-
$options['hooks']->dispatch('transport.internal.parse_response', array(&$responses[$key], $requests[$key]));
|
180 |
-
|
181 |
-
curl_multi_remove_handle($multihandle, $done['handle']);
|
182 |
-
curl_close($done['handle']);
|
183 |
-
|
184 |
-
if (!is_string($responses[$key])) {
|
185 |
-
$options['hooks']->dispatch('multiple.request.complete', array(&$responses[$key], $key));
|
186 |
-
}
|
187 |
-
$completed++;
|
188 |
-
}
|
189 |
-
}
|
190 |
-
while ($active || $completed < count($subrequests));
|
191 |
-
|
192 |
-
$request['options']['hooks']->dispatch('curl.after_multi_exec', array(&$multihandle));
|
193 |
-
|
194 |
-
curl_multi_close($multihandle);
|
195 |
-
|
196 |
-
return $responses;
|
197 |
-
}
|
198 |
-
|
199 |
-
/**
|
200 |
-
* Get the cURL handle for use in a multi-request
|
201 |
-
*
|
202 |
-
* @param string $url URL to request
|
203 |
-
* @param array $headers Associative array of request headers
|
204 |
-
* @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
|
205 |
-
* @param array $options Request options, see {@see Requests::response()} for documentation
|
206 |
-
* @return resource Subrequest's cURL handle
|
207 |
-
*/
|
208 |
-
public function &get_subrequest_handle($url, $headers, $data, $options) {
|
209 |
-
$this->setup_handle($url, $headers, $data, $options);
|
210 |
-
|
211 |
-
if ($options['filename'] !== false) {
|
212 |
-
$this->stream_handle = fopen($options['filename'], 'wb');
|
213 |
-
curl_setopt($this->fp, CURLOPT_FILE, $this->stream_handle);
|
214 |
-
}
|
215 |
-
|
216 |
-
return $this->fp;
|
217 |
-
}
|
218 |
-
|
219 |
-
/**
|
220 |
-
* Setup the cURL handle for the given data
|
221 |
-
*
|
222 |
-
* @param string $url URL to request
|
223 |
-
* @param array $headers Associative array of request headers
|
224 |
-
* @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
|
225 |
-
* @param array $options Request options, see {@see Requests::response()} for documentation
|
226 |
-
*/
|
227 |
-
protected function setup_handle($url, $headers, $data, $options) {
|
228 |
-
$options['hooks']->dispatch('curl.before_request', array(&$this->fp));
|
229 |
-
|
230 |
-
$headers = Requests::flatten($headers);
|
231 |
-
if (in_array($options['type'], array(Requests::HEAD, Requests::GET, Requests::DELETE)) & !empty($data)) {
|
232 |
-
$url = self::format_get($url, $data);
|
233 |
-
}
|
234 |
-
elseif (!empty($data) && !is_string($data)) {
|
235 |
-
$data = http_build_query($data, null, '&');
|
236 |
-
}
|
237 |
-
|
238 |
-
switch ($options['type']) {
|
239 |
-
case Requests::POST:
|
240 |
-
curl_setopt($this->fp, CURLOPT_POST, true);
|
241 |
-
curl_setopt($this->fp, CURLOPT_POSTFIELDS, $data);
|
242 |
-
break;
|
243 |
-
case Requests::PATCH:
|
244 |
-
case Requests::PUT:
|
245 |
-
curl_setopt($this->fp, CURLOPT_CUSTOMREQUEST, $options['type']);
|
246 |
-
curl_setopt($this->fp, CURLOPT_POSTFIELDS, $data);
|
247 |
-
break;
|
248 |
-
case Requests::DELETE:
|
249 |
-
curl_setopt($this->fp, CURLOPT_CUSTOMREQUEST, 'DELETE');
|
250 |
-
break;
|
251 |
-
case Requests::HEAD:
|
252 |
-
curl_setopt($this->fp, CURLOPT_NOBODY, true);
|
253 |
-
break;
|
254 |
-
}
|
255 |
-
|
256 |
-
if( is_int($options['timeout']) or $this->version < self::CURL_7_16_2 ) {
|
257 |
-
curl_setopt($this->fp, CURLOPT_TIMEOUT, ceil($options['timeout']));
|
258 |
-
} else {
|
259 |
-
curl_setopt($this->fp, CURLOPT_TIMEOUT_MS, round($options['timeout'] * 1000) );
|
260 |
-
}
|
261 |
-
if( is_int($options['connect_timeout']) or $this->version < self::CURL_7_16_2 ) {
|
262 |
-
curl_setopt($this->fp, CURLOPT_CONNECTTIMEOUT, ceil($options['connect_timeout']));
|
263 |
-
} else {
|
264 |
-
curl_setopt($this->fp, CURLOPT_CONNECTTIMEOUT_MS, round($options['connect_timeout'] * 1000));
|
265 |
-
}
|
266 |
-
curl_setopt($this->fp, CURLOPT_URL, $url);
|
267 |
-
curl_setopt($this->fp, CURLOPT_REFERER, $url);
|
268 |
-
curl_setopt($this->fp, CURLOPT_USERAGENT, $options['useragent']);
|
269 |
-
curl_setopt($this->fp, CURLOPT_HTTPHEADER, $headers);
|
270 |
-
|
271 |
-
if (true === $options['blocking']) {
|
272 |
-
curl_setopt($this->fp, CURLOPT_HEADERFUNCTION, array(&$this, 'stream_headers'));
|
273 |
-
}
|
274 |
-
}
|
275 |
-
|
276 |
-
public function process_response($response, $options) {
|
277 |
-
if ($options['blocking'] === false) {
|
278 |
-
$fake_headers = '';
|
279 |
-
$options['hooks']->dispatch('curl.after_request', array(&$fake_headers));
|
280 |
-
return false;
|
281 |
-
}
|
282 |
-
if ($options['filename'] !== false) {
|
283 |
-
fclose($this->stream_handle);
|
284 |
-
$this->headers = trim($this->headers);
|
285 |
-
}
|
286 |
-
else {
|
287 |
-
$this->headers .= $response;
|
288 |
-
}
|
289 |
-
|
290 |
-
if (curl_errno($this->fp)) {
|
291 |
-
throw new Requests_Exception('cURL error ' . curl_errno($this->fp) . ': ' . curl_error($this->fp), 'curlerror', $this->fp);
|
292 |
-
return;
|
293 |
-
}
|
294 |
-
$this->info = curl_getinfo($this->fp);
|
295 |
-
|
296 |
-
$options['hooks']->dispatch('curl.after_request', array(&$this->headers));
|
297 |
-
return $this->headers;
|
298 |
-
}
|
299 |
-
|
300 |
-
/**
|
301 |
-
* Collect the headers as they are received
|
302 |
-
*
|
303 |
-
* @param resource $handle cURL resource
|
304 |
-
* @param string $headers Header string
|
305 |
-
* @return integer Length of provided header
|
306 |
-
*/
|
307 |
-
protected function stream_headers($handle, $headers) {
|
308 |
-
// Why do we do this? cURL will send both the final response and any
|
309 |
-
// interim responses, such as a 100 Continue. We don't need that.
|
310 |
-
// (We may want to keep this somewhere just in case)
|
311 |
-
if ($this->done_headers) {
|
312 |
-
$this->headers = '';
|
313 |
-
$this->done_headers = false;
|
314 |
-
}
|
315 |
-
$this->headers .= $headers;
|
316 |
-
|
317 |
-
if ($headers === "\r\n") {
|
318 |
-
$this->done_headers = true;
|
319 |
-
}
|
320 |
-
return strlen($headers);
|
321 |
-
}
|
322 |
-
|
323 |
-
/**
|
324 |
-
* Format a URL given GET data
|
325 |
-
*
|
326 |
-
* @param string $url
|
327 |
-
* @param array|object $data Data to build query using, see {@see http://php.net/http_build_query}
|
328 |
-
* @return string URL with data
|
329 |
-
*/
|
330 |
-
protected static function format_get($url, $data) {
|
331 |
-
if (!empty($data)) {
|
332 |
-
$url_parts = parse_url($url);
|
333 |
-
if (empty($url_parts['query'])) {
|
334 |
-
$query = $url_parts['query'] = '';
|
335 |
-
}
|
336 |
-
else {
|
337 |
-
$query = $url_parts['query'];
|
338 |
-
}
|
339 |
-
|
340 |
-
$query .= '&' . http_build_query($data, null, '&');
|
341 |
-
$query = trim($query, '&');
|
342 |
-
|
343 |
-
if (empty($url_parts['query'])) {
|
344 |
-
$url .= '?' . $query;
|
345 |
-
}
|
346 |
-
else {
|
347 |
-
$url = str_replace($url_parts['query'], $query, $url);
|
348 |
-
}
|
349 |
-
}
|
350 |
-
return $url;
|
351 |
-
}
|
352 |
-
|
353 |
-
/**
|
354 |
-
* Whether this transport is valid
|
355 |
-
*
|
356 |
-
* @codeCoverageIgnore
|
357 |
-
* @return boolean True if the transport is valid, false otherwise.
|
358 |
-
*/
|
359 |
-
public static function test($capabilities = array()) {
|
360 |
-
if (!function_exists('curl_init') && !function_exists('curl_exec'))
|
361 |
-
return false;
|
362 |
-
|
363 |
-
// If needed, check that our installed curl version supports SSL
|
364 |
-
if (isset( $capabilities['ssl'] ) && $capabilities['ssl']) {
|
365 |
-
$curl_version = curl_version();
|
366 |
-
if (!(CURL_VERSION_SSL & $curl_version['features']))
|
367 |
-
return false;
|
368 |
-
}
|
369 |
-
|
370 |
-
return true;
|
371 |
-
}
|
372 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Transport/cacert.pem
DELETED
@@ -1,3554 +0,0 @@
|
|
1 |
-
##
|
2 |
-
## ca-bundle.crt -- Bundle of CA Root Certificates
|
3 |
-
##
|
4 |
-
## Certificate data from Mozilla as of: Sat Dec 29 20:03:40 2012
|
5 |
-
##
|
6 |
-
## This is a bundle of X.509 certificates of public Certificate Authorities
|
7 |
-
## (CA). These were automatically extracted from Mozilla's root certificates
|
8 |
-
## file (certdata.txt). This file can be found in the mozilla source tree:
|
9 |
-
## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
|
10 |
-
##
|
11 |
-
## It contains the certificates in PEM format and therefore
|
12 |
-
## can be directly used with curl / libcurl / php_curl, or with
|
13 |
-
## an Apache+mod_ssl webserver for SSL client authentication.
|
14 |
-
## Just configure this file as the SSLCACertificateFile.
|
15 |
-
##
|
16 |
-
|
17 |
-
# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.87 $ $Date: 2012/12/29 16:32:45 $
|
18 |
-
|
19 |
-
EE Certification Centre Root CA
|
20 |
-
===============================
|
21 |
-
-----BEGIN CERTIFICATE-----
|
22 |
-
MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
|
23 |
-
EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
|
24 |
-
dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
|
25 |
-
MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
|
26 |
-
UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
|
27 |
-
ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
|
28 |
-
DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
|
29 |
-
TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
|
30 |
-
rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
|
31 |
-
93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
|
32 |
-
P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
|
33 |
-
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
|
34 |
-
MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
|
35 |
-
BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
|
36 |
-
xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
|
37 |
-
lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
|
38 |
-
uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
|
39 |
-
3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
|
40 |
-
dcGWxZ0=
|
41 |
-
-----END CERTIFICATE-----
|
42 |
-
|
43 |
-
GTE CyberTrust Global Root
|
44 |
-
==========================
|
45 |
-
-----BEGIN CERTIFICATE-----
|
46 |
-
MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
|
47 |
-
Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
|
48 |
-
A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
|
49 |
-
MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
|
50 |
-
Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
|
51 |
-
IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
|
52 |
-
sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
|
53 |
-
HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
|
54 |
-
AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
|
55 |
-
M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
|
56 |
-
NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
|
57 |
-
-----END CERTIFICATE-----
|
58 |
-
|
59 |
-
Thawte Server CA
|
60 |
-
================
|
61 |
-
-----BEGIN CERTIFICATE-----
|
62 |
-
MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
63 |
-
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
|
64 |
-
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
|
65 |
-
AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
|
66 |
-
b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
|
67 |
-
BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
|
68 |
-
c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
|
69 |
-
A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
|
70 |
-
ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
|
71 |
-
/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
|
72 |
-
1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
|
73 |
-
MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
|
74 |
-
GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
|
75 |
-
GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
|
76 |
-
-----END CERTIFICATE-----
|
77 |
-
|
78 |
-
Thawte Premium Server CA
|
79 |
-
========================
|
80 |
-
-----BEGIN CERTIFICATE-----
|
81 |
-
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
82 |
-
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
|
83 |
-
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
|
84 |
-
AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
|
85 |
-
ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
|
86 |
-
AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
|
87 |
-
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
|
88 |
-
aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
|
89 |
-
cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
|
90 |
-
aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
|
91 |
-
Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
|
92 |
-
qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
|
93 |
-
SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
|
94 |
-
8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
|
95 |
-
UCemDaYj+bvLpgcUQg==
|
96 |
-
-----END CERTIFICATE-----
|
97 |
-
|
98 |
-
Equifax Secure CA
|
99 |
-
=================
|
100 |
-
-----BEGIN CERTIFICATE-----
|
101 |
-
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
|
102 |
-
ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
|
103 |
-
MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
|
104 |
-
B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
|
105 |
-
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
|
106 |
-
fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
|
107 |
-
8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
|
108 |
-
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
|
109 |
-
CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
|
110 |
-
A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
|
111 |
-
spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
|
112 |
-
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
|
113 |
-
zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
|
114 |
-
BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
|
115 |
-
70+sB3c4
|
116 |
-
-----END CERTIFICATE-----
|
117 |
-
|
118 |
-
Digital Signature Trust Co. Global CA 1
|
119 |
-
=======================================
|
120 |
-
-----BEGIN CERTIFICATE-----
|
121 |
-
MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
|
122 |
-
ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
|
123 |
-
MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
|
124 |
-
IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
|
125 |
-
A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
|
126 |
-
NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
|
127 |
-
o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
|
128 |
-
BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
|
129 |
-
dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
|
130 |
-
IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
|
131 |
-
MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
|
132 |
-
BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
|
133 |
-
ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
|
134 |
-
kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
|
135 |
-
RbyhkwS7hp86W0N6w4pl
|
136 |
-
-----END CERTIFICATE-----
|
137 |
-
|
138 |
-
Digital Signature Trust Co. Global CA 3
|
139 |
-
=======================================
|
140 |
-
-----BEGIN CERTIFICATE-----
|
141 |
-
MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
|
142 |
-
ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
|
143 |
-
MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
|
144 |
-
IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
|
145 |
-
A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
|
146 |
-
VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
|
147 |
-
xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
|
148 |
-
BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
|
149 |
-
dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
|
150 |
-
IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
|
151 |
-
MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
|
152 |
-
BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
|
153 |
-
AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
|
154 |
-
up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
|
155 |
-
mPnHfxsb1gYgAlihw6ID
|
156 |
-
-----END CERTIFICATE-----
|
157 |
-
|
158 |
-
Verisign Class 3 Public Primary Certification Authority
|
159 |
-
=======================================================
|
160 |
-
-----BEGIN CERTIFICATE-----
|
161 |
-
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
|
162 |
-
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
163 |
-
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
|
164 |
-
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
|
165 |
-
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
166 |
-
A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
|
167 |
-
f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
|
168 |
-
hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
|
169 |
-
TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
|
170 |
-
WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
|
171 |
-
Tqj/ZA1k
|
172 |
-
-----END CERTIFICATE-----
|
173 |
-
|
174 |
-
Verisign Class 3 Public Primary Certification Authority - G2
|
175 |
-
============================================================
|
176 |
-
-----BEGIN CERTIFICATE-----
|
177 |
-
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
|
178 |
-
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
|
179 |
-
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
180 |
-
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
181 |
-
dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
|
182 |
-
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
|
183 |
-
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
184 |
-
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
185 |
-
dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
|
186 |
-
FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
|
187 |
-
lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
|
188 |
-
MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
|
189 |
-
1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
|
190 |
-
Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
|
191 |
-
-----END CERTIFICATE-----
|
192 |
-
|
193 |
-
GlobalSign Root CA
|
194 |
-
==================
|
195 |
-
-----BEGIN CERTIFICATE-----
|
196 |
-
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
|
197 |
-
GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
|
198 |
-
b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
|
199 |
-
BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
|
200 |
-
VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
|
201 |
-
DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
|
202 |
-
THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
|
203 |
-
Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
|
204 |
-
c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
|
205 |
-
gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
|
206 |
-
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
|
207 |
-
AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
|
208 |
-
Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
|
209 |
-
j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
|
210 |
-
hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
|
211 |
-
X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
|
212 |
-
-----END CERTIFICATE-----
|
213 |
-
|
214 |
-
GlobalSign Root CA - R2
|
215 |
-
=======================
|
216 |
-
-----BEGIN CERTIFICATE-----
|
217 |
-
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
|
218 |
-
YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
|
219 |
-
bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
|
220 |
-
aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
|
221 |
-
bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
|
222 |
-
ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
|
223 |
-
s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
|
224 |
-
S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
|
225 |
-
TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
|
226 |
-
ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
|
227 |
-
FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
|
228 |
-
YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
|
229 |
-
BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
|
230 |
-
9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
|
231 |
-
01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
|
232 |
-
9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
|
233 |
-
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
|
234 |
-
-----END CERTIFICATE-----
|
235 |
-
|
236 |
-
ValiCert Class 1 VA
|
237 |
-
===================
|
238 |
-
-----BEGIN CERTIFICATE-----
|
239 |
-
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
240 |
-
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
241 |
-
YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
242 |
-
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
|
243 |
-
MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
244 |
-
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
|
245 |
-
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
246 |
-
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
247 |
-
A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
|
248 |
-
GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
|
249 |
-
DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
|
250 |
-
lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
|
251 |
-
icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
|
252 |
-
Orf1LXLI
|
253 |
-
-----END CERTIFICATE-----
|
254 |
-
|
255 |
-
ValiCert Class 2 VA
|
256 |
-
===================
|
257 |
-
-----BEGIN CERTIFICATE-----
|
258 |
-
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
259 |
-
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
260 |
-
YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
261 |
-
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
|
262 |
-
MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
263 |
-
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
|
264 |
-
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
265 |
-
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
266 |
-
A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
|
267 |
-
CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
|
268 |
-
ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
|
269 |
-
SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
|
270 |
-
UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
|
271 |
-
W9ViH0Pd
|
272 |
-
-----END CERTIFICATE-----
|
273 |
-
|
274 |
-
RSA Root Certificate 1
|
275 |
-
======================
|
276 |
-
-----BEGIN CERTIFICATE-----
|
277 |
-
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
278 |
-
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
279 |
-
YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
280 |
-
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
|
281 |
-
MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
282 |
-
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
|
283 |
-
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
284 |
-
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
285 |
-
A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
|
286 |
-
3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
|
287 |
-
BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
|
288 |
-
3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
|
289 |
-
V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
|
290 |
-
on+jjBXu
|
291 |
-
-----END CERTIFICATE-----
|
292 |
-
|
293 |
-
Verisign Class 3 Public Primary Certification Authority - G3
|
294 |
-
============================================================
|
295 |
-
-----BEGIN CERTIFICATE-----
|
296 |
-
MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
297 |
-
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
298 |
-
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
299 |
-
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
300 |
-
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
301 |
-
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
302 |
-
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
303 |
-
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
|
304 |
-
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
305 |
-
ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
|
306 |
-
EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
|
307 |
-
cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
|
308 |
-
EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
|
309 |
-
055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
310 |
-
ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
|
311 |
-
j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
|
312 |
-
/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
|
313 |
-
xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
|
314 |
-
t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
|
315 |
-
-----END CERTIFICATE-----
|
316 |
-
|
317 |
-
Verisign Class 4 Public Primary Certification Authority - G3
|
318 |
-
============================================================
|
319 |
-
-----BEGIN CERTIFICATE-----
|
320 |
-
MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
321 |
-
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
322 |
-
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
323 |
-
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
324 |
-
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
325 |
-
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
326 |
-
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
327 |
-
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
|
328 |
-
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
329 |
-
ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
|
330 |
-
tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
|
331 |
-
8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
|
332 |
-
Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
|
333 |
-
Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
334 |
-
j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
|
335 |
-
mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
|
336 |
-
fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
|
337 |
-
RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
|
338 |
-
UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
|
339 |
-
-----END CERTIFICATE-----
|
340 |
-
|
341 |
-
Entrust.net Secure Server CA
|
342 |
-
============================
|
343 |
-
-----BEGIN CERTIFICATE-----
|
344 |
-
MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
|
345 |
-
BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
|
346 |
-
cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
|
347 |
-
ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
348 |
-
cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
|
349 |
-
A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
|
350 |
-
eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
|
351 |
-
dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
|
352 |
-
aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
|
353 |
-
aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
|
354 |
-
gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
|
355 |
-
ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
|
356 |
-
CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
|
357 |
-
dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
|
358 |
-
bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
|
359 |
-
cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
|
360 |
-
dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
|
361 |
-
NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
|
362 |
-
HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
|
363 |
-
BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
|
364 |
-
Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
|
365 |
-
n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
|
366 |
-
-----END CERTIFICATE-----
|
367 |
-
|
368 |
-
Entrust.net Premium 2048 Secure Server CA
|
369 |
-
=========================================
|
370 |
-
-----BEGIN CERTIFICATE-----
|
371 |
-
MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
|
372 |
-
ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
|
373 |
-
bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
|
374 |
-
BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
|
375 |
-
NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
|
376 |
-
d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
|
377 |
-
MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
|
378 |
-
ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
379 |
-
MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
|
380 |
-
Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
|
381 |
-
hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
|
382 |
-
nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
|
383 |
-
VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
|
384 |
-
AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
|
385 |
-
gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
|
386 |
-
AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
|
387 |
-
oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
|
388 |
-
o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
|
389 |
-
2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
|
390 |
-
OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
|
391 |
-
-----END CERTIFICATE-----
|
392 |
-
|
393 |
-
Baltimore CyberTrust Root
|
394 |
-
=========================
|
395 |
-
-----BEGIN CERTIFICATE-----
|
396 |
-
MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
|
397 |
-
ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
|
398 |
-
ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
|
399 |
-
SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
|
400 |
-
dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
|
401 |
-
uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
|
402 |
-
UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
|
403 |
-
G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
|
404 |
-
XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
|
405 |
-
l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
|
406 |
-
VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
|
407 |
-
BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
|
408 |
-
cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
|
409 |
-
hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
|
410 |
-
Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
|
411 |
-
RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
|
412 |
-
-----END CERTIFICATE-----
|
413 |
-
|
414 |
-
Equifax Secure Global eBusiness CA
|
415 |
-
==================================
|
416 |
-
-----BEGIN CERTIFICATE-----
|
417 |
-
MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
418 |
-
RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
|
419 |
-
bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
|
420 |
-
HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
|
421 |
-
b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
|
422 |
-
PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
|
423 |
-
qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
|
424 |
-
hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
|
425 |
-
BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
|
426 |
-
MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
|
427 |
-
I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
|
428 |
-
NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
|
429 |
-
-----END CERTIFICATE-----
|
430 |
-
|
431 |
-
Equifax Secure eBusiness CA 1
|
432 |
-
=============================
|
433 |
-
-----BEGIN CERTIFICATE-----
|
434 |
-
MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
435 |
-
RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
|
436 |
-
LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
|
437 |
-
ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
|
438 |
-
IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
|
439 |
-
1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
|
440 |
-
IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
|
441 |
-
MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
|
442 |
-
Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
|
443 |
-
AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
|
444 |
-
lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
|
445 |
-
KpYrtWKmpj29f5JZzVoqgrI3eQ==
|
446 |
-
-----END CERTIFICATE-----
|
447 |
-
|
448 |
-
Equifax Secure eBusiness CA 2
|
449 |
-
=============================
|
450 |
-
-----BEGIN CERTIFICATE-----
|
451 |
-
MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
|
452 |
-
ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
|
453 |
-
MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
|
454 |
-
DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
|
455 |
-
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
|
456 |
-
2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
|
457 |
-
BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
|
458 |
-
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
|
459 |
-
JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
|
460 |
-
A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
|
461 |
-
uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
|
462 |
-
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
|
463 |
-
jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
|
464 |
-
78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
|
465 |
-
V+GRMOrN
|
466 |
-
-----END CERTIFICATE-----
|
467 |
-
|
468 |
-
AddTrust Low-Value Services Root
|
469 |
-
================================
|
470 |
-
-----BEGIN CERTIFICATE-----
|
471 |
-
MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
472 |
-
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
|
473 |
-
cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
|
474 |
-
CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
|
475 |
-
ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
|
476 |
-
AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
|
477 |
-
54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
|
478 |
-
oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
|
479 |
-
Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
|
480 |
-
GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
|
481 |
-
HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
|
482 |
-
AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
|
483 |
-
RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
|
484 |
-
HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
|
485 |
-
ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
|
486 |
-
iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
|
487 |
-
eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
|
488 |
-
mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
|
489 |
-
ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
|
490 |
-
-----END CERTIFICATE-----
|
491 |
-
|
492 |
-
AddTrust External Root
|
493 |
-
======================
|
494 |
-
-----BEGIN CERTIFICATE-----
|
495 |
-
MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
496 |
-
QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
|
497 |
-
VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
|
498 |
-
NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
|
499 |
-
cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
|
500 |
-
Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
|
501 |
-
+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
|
502 |
-
Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
|
503 |
-
aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
|
504 |
-
2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
|
505 |
-
7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
|
506 |
-
BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
|
507 |
-
VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
|
508 |
-
VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
|
509 |
-
IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
|
510 |
-
j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
|
511 |
-
6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
|
512 |
-
e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
|
513 |
-
G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
|
514 |
-
-----END CERTIFICATE-----
|
515 |
-
|
516 |
-
AddTrust Public Services Root
|
517 |
-
=============================
|
518 |
-
-----BEGIN CERTIFICATE-----
|
519 |
-
MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
520 |
-
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
|
521 |
-
cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
|
522 |
-
BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
|
523 |
-
dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
|
524 |
-
AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
|
525 |
-
nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
|
526 |
-
d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
|
527 |
-
Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
|
528 |
-
HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
|
529 |
-
A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
|
530 |
-
/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
|
531 |
-
FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
|
532 |
-
A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
|
533 |
-
JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
|
534 |
-
+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
|
535 |
-
GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
|
536 |
-
Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
|
537 |
-
EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
|
538 |
-
-----END CERTIFICATE-----
|
539 |
-
|
540 |
-
AddTrust Qualified Certificates Root
|
541 |
-
====================================
|
542 |
-
-----BEGIN CERTIFICATE-----
|
543 |
-
MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
544 |
-
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
|
545 |
-
cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
|
546 |
-
CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
|
547 |
-
IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
|
548 |
-
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
|
549 |
-
64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
|
550 |
-
KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
|
551 |
-
L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
|
552 |
-
wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
|
553 |
-
MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
|
554 |
-
BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
|
555 |
-
BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
|
556 |
-
azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
|
557 |
-
ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
|
558 |
-
GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
|
559 |
-
dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
|
560 |
-
RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
|
561 |
-
iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
|
562 |
-
-----END CERTIFICATE-----
|
563 |
-
|
564 |
-
Entrust Root Certification Authority
|
565 |
-
====================================
|
566 |
-
-----BEGIN CERTIFICATE-----
|
567 |
-
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
|
568 |
-
BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
|
569 |
-
b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
|
570 |
-
A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
|
571 |
-
MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
|
572 |
-
MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
|
573 |
-
Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
|
574 |
-
dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
575 |
-
ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
|
576 |
-
A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
|
577 |
-
Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
|
578 |
-
j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
|
579 |
-
rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
|
580 |
-
DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
|
581 |
-
MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
|
582 |
-
hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
|
583 |
-
A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
|
584 |
-
Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
|
585 |
-
v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
|
586 |
-
W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
|
587 |
-
tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
|
588 |
-
-----END CERTIFICATE-----
|
589 |
-
|
590 |
-
RSA Security 2048 v3
|
591 |
-
====================
|
592 |
-
-----BEGIN CERTIFICATE-----
|
593 |
-
MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
|
594 |
-
ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
|
595 |
-
MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
|
596 |
-
BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
597 |
-
AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
|
598 |
-
Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
|
599 |
-
WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
|
600 |
-
KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
|
601 |
-
+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
|
602 |
-
MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
|
603 |
-
FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
|
604 |
-
v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
|
605 |
-
0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
|
606 |
-
VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
|
607 |
-
nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
|
608 |
-
pKnXwiJPZ9d37CAFYd4=
|
609 |
-
-----END CERTIFICATE-----
|
610 |
-
|
611 |
-
GeoTrust Global CA
|
612 |
-
==================
|
613 |
-
-----BEGIN CERTIFICATE-----
|
614 |
-
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
|
615 |
-
Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
|
616 |
-
MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
|
617 |
-
LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
618 |
-
CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
|
619 |
-
BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
|
620 |
-
8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
|
621 |
-
T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
|
622 |
-
vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
|
623 |
-
AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
|
624 |
-
DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
|
625 |
-
zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
|
626 |
-
d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
|
627 |
-
mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
|
628 |
-
XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
|
629 |
-
Mw==
|
630 |
-
-----END CERTIFICATE-----
|
631 |
-
|
632 |
-
GeoTrust Global CA 2
|
633 |
-
====================
|
634 |
-
-----BEGIN CERTIFICATE-----
|
635 |
-
MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
636 |
-
R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
|
637 |
-
MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
|
638 |
-
LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
639 |
-
ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
|
640 |
-
NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
|
641 |
-
LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
|
642 |
-
Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
|
643 |
-
HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
|
644 |
-
MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
|
645 |
-
K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
|
646 |
-
srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
|
647 |
-
ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
|
648 |
-
OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
|
649 |
-
x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
|
650 |
-
H4z1Ir+rzoPz4iIprn2DQKi6bA==
|
651 |
-
-----END CERTIFICATE-----
|
652 |
-
|
653 |
-
GeoTrust Universal CA
|
654 |
-
=====================
|
655 |
-
-----BEGIN CERTIFICATE-----
|
656 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
|
676 |
-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
-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
-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
-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
|
680 |
-
P/rmMuGNG2+k5o7Y+SlIis5z/iw=
|
681 |
-
-----END CERTIFICATE-----
|
682 |
-
|
683 |
-
GeoTrust Universal CA 2
|
684 |
-
=======================
|
685 |
-
-----BEGIN CERTIFICATE-----
|
686 |
-
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
-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
-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
-
SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
|
690 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
710 |
-
X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
|
711 |
-
-----END CERTIFICATE-----
|
712 |
-
|
713 |
-
America Online Root Certification Authority 1
|
714 |
-
=============================================
|
715 |
-
-----BEGIN CERTIFICATE-----
|
716 |
-
MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
717 |
-
QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
|
718 |
-
Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
|
719 |
-
A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
|
720 |
-
T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
|
721 |
-
ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
|
722 |
-
v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
|
723 |
-
DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
|
724 |
-
sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
|
725 |
-
8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
|
726 |
-
AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
|
727 |
-
o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
|
728 |
-
GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
|
729 |
-
VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
|
730 |
-
3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
|
731 |
-
Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
|
732 |
-
sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
|
733 |
-
-----END CERTIFICATE-----
|
734 |
-
|
735 |
-
America Online Root Certification Authority 2
|
736 |
-
=============================================
|
737 |
-
-----BEGIN CERTIFICATE-----
|
738 |
-
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
-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
-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
-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
-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
-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
-
fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
|
745 |
-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
-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
-
RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
|
748 |
-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
-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
-
FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
|
751 |
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
|
763 |
-
cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
|
764 |
-
-----END CERTIFICATE-----
|
765 |
-
|
766 |
-
Visa eCommerce Root
|
767 |
-
===================
|
768 |
-
-----BEGIN CERTIFICATE-----
|
769 |
-
MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
|
770 |
-
EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
|
771 |
-
QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
|
772 |
-
WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
|
773 |
-
VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
|
774 |
-
bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
|
775 |
-
F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
|
776 |
-
RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
|
777 |
-
TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
|
778 |
-
/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
|
779 |
-
GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
|
780 |
-
MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
|
781 |
-
CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
|
782 |
-
YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
|
783 |
-
zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
|
784 |
-
YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
|
785 |
-
398znM/jra6O1I7mT1GvFpLgXPYHDw==
|
786 |
-
-----END CERTIFICATE-----
|
787 |
-
|
788 |
-
Certum Root CA
|
789 |
-
==============
|
790 |
-
-----BEGIN CERTIFICATE-----
|
791 |
-
MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
|
792 |
-
ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
|
793 |
-
Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
|
794 |
-
by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
|
795 |
-
wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
|
796 |
-
kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
|
797 |
-
89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
|
798 |
-
Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
|
799 |
-
NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
|
800 |
-
hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
|
801 |
-
GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
|
802 |
-
GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
|
803 |
-
0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
|
804 |
-
qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
|
805 |
-
-----END CERTIFICATE-----
|
806 |
-
|
807 |
-
Comodo AAA Services root
|
808 |
-
========================
|
809 |
-
-----BEGIN CERTIFICATE-----
|
810 |
-
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
811 |
-
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
812 |
-
TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
|
813 |
-
MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
|
814 |
-
c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
|
815 |
-
BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
816 |
-
ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
|
817 |
-
C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
|
818 |
-
i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
|
819 |
-
Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
|
820 |
-
Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
|
821 |
-
Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
|
822 |
-
BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
|
823 |
-
cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
|
824 |
-
LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
|
825 |
-
7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
|
826 |
-
Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
|
827 |
-
8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
|
828 |
-
12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
829 |
-
-----END CERTIFICATE-----
|
830 |
-
|
831 |
-
Comodo Secure Services root
|
832 |
-
===========================
|
833 |
-
-----BEGIN CERTIFICATE-----
|
834 |
-
MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
835 |
-
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
836 |
-
TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
|
837 |
-
MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
|
838 |
-
Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
|
839 |
-
BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
840 |
-
ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
|
841 |
-
9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
|
842 |
-
rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
|
843 |
-
oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
|
844 |
-
p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
|
845 |
-
FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
|
846 |
-
gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
|
847 |
-
YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
|
848 |
-
aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
|
849 |
-
4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
|
850 |
-
Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
|
851 |
-
DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
|
852 |
-
pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
|
853 |
-
RR3B7Hzs/Sk=
|
854 |
-
-----END CERTIFICATE-----
|
855 |
-
|
856 |
-
Comodo Trusted Services root
|
857 |
-
============================
|
858 |
-
-----BEGIN CERTIFICATE-----
|
859 |
-
MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
860 |
-
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
861 |
-
TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
|
862 |
-
MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
|
863 |
-
bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
|
864 |
-
IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
865 |
-
AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
|
866 |
-
3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
|
867 |
-
/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
|
868 |
-
juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
|
869 |
-
ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
|
870 |
-
DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
|
871 |
-
/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
|
872 |
-
ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
|
873 |
-
cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
|
874 |
-
uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
|
875 |
-
pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
|
876 |
-
BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
|
877 |
-
R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
|
878 |
-
9y5Xt5hwXsjEeLBi
|
879 |
-
-----END CERTIFICATE-----
|
880 |
-
|
881 |
-
QuoVadis Root CA
|
882 |
-
================
|
883 |
-
-----BEGIN CERTIFICATE-----
|
884 |
-
MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
|
885 |
-
ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
886 |
-
eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
|
887 |
-
MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
|
888 |
-
cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
|
889 |
-
EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
|
890 |
-
AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
|
891 |
-
J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
|
892 |
-
F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
|
893 |
-
YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
|
894 |
-
AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
|
895 |
-
PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
|
896 |
-
ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
|
897 |
-
MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
|
898 |
-
YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
|
899 |
-
ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
|
900 |
-
Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
|
901 |
-
Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
|
902 |
-
BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
|
903 |
-
FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
|
904 |
-
aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
|
905 |
-
tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
|
906 |
-
fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
|
907 |
-
LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
|
908 |
-
gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
|
909 |
-
5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
|
910 |
-
5nrQNiOKSnQ2+Q==
|
911 |
-
-----END CERTIFICATE-----
|
912 |
-
|
913 |
-
QuoVadis Root CA 2
|
914 |
-
==================
|
915 |
-
-----BEGIN CERTIFICATE-----
|
916 |
-
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
-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
-
ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
|
919 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-
IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
|
938 |
-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
-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
-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
-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
|
942 |
-
-----END CERTIFICATE-----
|
943 |
-
|
944 |
-
QuoVadis Root CA 3
|
945 |
-
==================
|
946 |
-
-----BEGIN CERTIFICATE-----
|
947 |
-
MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
|
948 |
-
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
|
949 |
-
OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
|
950 |
-
aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
951 |
-
DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
|
952 |
-
DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
|
953 |
-
KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
|
954 |
-
DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
|
955 |
-
BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
|
956 |
-
p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
|
957 |
-
nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
|
958 |
-
MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
|
959 |
-
Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
|
960 |
-
uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
|
961 |
-
BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
|
962 |
-
YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
|
963 |
-
aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
|
964 |
-
BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
|
965 |
-
VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
|
966 |
-
ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
|
967 |
-
AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
|
968 |
-
qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
|
969 |
-
hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
|
970 |
-
POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
|
971 |
-
Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
|
972 |
-
8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
|
973 |
-
bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
|
974 |
-
g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
|
975 |
-
vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
|
976 |
-
qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
|
977 |
-
-----END CERTIFICATE-----
|
978 |
-
|
979 |
-
Security Communication Root CA
|
980 |
-
==============================
|
981 |
-
-----BEGIN CERTIFICATE-----
|
982 |
-
MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
|
983 |
-
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
|
984 |
-
HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
|
985 |
-
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
|
986 |
-
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
|
987 |
-
8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
|
988 |
-
DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
|
989 |
-
5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
|
990 |
-
DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
|
991 |
-
JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
|
992 |
-
DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
|
993 |
-
0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
|
994 |
-
mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
|
995 |
-
s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
|
996 |
-
6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
|
997 |
-
FL39vmwLAw==
|
998 |
-
-----END CERTIFICATE-----
|
999 |
-
|
1000 |
-
Sonera Class 2 Root CA
|
1001 |
-
======================
|
1002 |
-
-----BEGIN CERTIFICATE-----
|
1003 |
-
MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
|
1004 |
-
U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
|
1005 |
-
NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
|
1006 |
-
IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
|
1007 |
-
/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
|
1008 |
-
dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
|
1009 |
-
f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
|
1010 |
-
tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
|
1011 |
-
nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
|
1012 |
-
XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
|
1013 |
-
0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
|
1014 |
-
cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
|
1015 |
-
Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
|
1016 |
-
EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
|
1017 |
-
llpwrN9M
|
1018 |
-
-----END CERTIFICATE-----
|
1019 |
-
|
1020 |
-
Staat der Nederlanden Root CA
|
1021 |
-
=============================
|
1022 |
-
-----BEGIN CERTIFICATE-----
|
1023 |
-
MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
|
1024 |
-
ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
|
1025 |
-
Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
|
1026 |
-
HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
|
1027 |
-
bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
|
1028 |
-
vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
|
1029 |
-
jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
|
1030 |
-
C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
|
1031 |
-
vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
|
1032 |
-
22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
|
1033 |
-
HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
|
1034 |
-
dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
|
1035 |
-
BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
|
1036 |
-
EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
|
1037 |
-
MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
|
1038 |
-
nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
|
1039 |
-
iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
|
1040 |
-
-----END CERTIFICATE-----
|
1041 |
-
|
1042 |
-
TDC Internet Root CA
|
1043 |
-
====================
|
1044 |
-
-----BEGIN CERTIFICATE-----
|
1045 |
-
MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
|
1046 |
-
ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
|
1047 |
-
NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
|
1048 |
-
ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
1049 |
-
MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
|
1050 |
-
xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
|
1051 |
-
znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
|
1052 |
-
5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
|
1053 |
-
otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
|
1054 |
-
AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
|
1055 |
-
VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
|
1056 |
-
MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
|
1057 |
-
AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
|
1058 |
-
UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
|
1059 |
-
CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
|
1060 |
-
gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
|
1061 |
-
2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
|
1062 |
-
O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
|
1063 |
-
Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
|
1064 |
-
-----END CERTIFICATE-----
|
1065 |
-
|
1066 |
-
UTN DATACorp SGC Root CA
|
1067 |
-
========================
|
1068 |
-
-----BEGIN CERTIFICATE-----
|
1069 |
-
MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
|
1070 |
-
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
1071 |
-
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
|
1072 |
-
BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
|
1073 |
-
MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
|
1074 |
-
HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
|
1075 |
-
dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
1076 |
-
AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
|
1077 |
-
raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
|
1078 |
-
wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
|
1079 |
-
9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
|
1080 |
-
33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
|
1081 |
-
DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
|
1082 |
-
BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
|
1083 |
-
LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
|
1084 |
-
DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
|
1085 |
-
Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
|
1086 |
-
I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
|
1087 |
-
EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
|
1088 |
-
DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
|
1089 |
-
-----END CERTIFICATE-----
|
1090 |
-
|
1091 |
-
UTN USERFirst Hardware Root CA
|
1092 |
-
==============================
|
1093 |
-
-----BEGIN CERTIFICATE-----
|
1094 |
-
MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
|
1095 |
-
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
1096 |
-
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
|
1097 |
-
BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
|
1098 |
-
OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
|
1099 |
-
eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
|
1100 |
-
ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
|
1101 |
-
DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
|
1102 |
-
wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
|
1103 |
-
tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
|
1104 |
-
i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
|
1105 |
-
Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
|
1106 |
-
gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
|
1107 |
-
lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
|
1108 |
-
UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
|
1109 |
-
BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
|
1110 |
-
//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
|
1111 |
-
XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
|
1112 |
-
lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
|
1113 |
-
iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
|
1114 |
-
nfhmqA==
|
1115 |
-
-----END CERTIFICATE-----
|
1116 |
-
|
1117 |
-
Camerfirma Chambers of Commerce Root
|
1118 |
-
====================================
|
1119 |
-
-----BEGIN CERTIFICATE-----
|
1120 |
-
MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
|
1121 |
-
QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
|
1122 |
-
ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
|
1123 |
-
NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
|
1124 |
-
cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
|
1125 |
-
MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
|
1126 |
-
AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
|
1127 |
-
xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
|
1128 |
-
NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
|
1129 |
-
DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
|
1130 |
-
d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
|
1131 |
-
EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
|
1132 |
-
cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
|
1133 |
-
AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
|
1134 |
-
bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
|
1135 |
-
VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
|
1136 |
-
aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
|
1137 |
-
fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
|
1138 |
-
L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
|
1139 |
-
UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
|
1140 |
-
ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
|
1141 |
-
erfutGWaIZDgqtCYvDi1czyL+Nw=
|
1142 |
-
-----END CERTIFICATE-----
|
1143 |
-
|
1144 |
-
Camerfirma Global Chambersign Root
|
1145 |
-
==================================
|
1146 |
-
-----BEGIN CERTIFICATE-----
|
1147 |
-
MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
|
1148 |
-
QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
|
1149 |
-
ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
|
1150 |
-
NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
|
1151 |
-
YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
|
1152 |
-
MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
|
1153 |
-
ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
|
1154 |
-
1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
|
1155 |
-
by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
|
1156 |
-
6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
|
1157 |
-
8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
|
1158 |
-
BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
|
1159 |
-
aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
|
1160 |
-
Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
|
1161 |
-
aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
|
1162 |
-
ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
|
1163 |
-
bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
|
1164 |
-
PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
|
1165 |
-
gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
|
1166 |
-
PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
|
1167 |
-
IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
|
1168 |
-
t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
|
1169 |
-
-----END CERTIFICATE-----
|
1170 |
-
|
1171 |
-
NetLock Notary (Class A) Root
|
1172 |
-
=============================
|
1173 |
-
-----BEGIN CERTIFICATE-----
|
1174 |
-
MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
|
1175 |
-
EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
|
1176 |
-
dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
|
1177 |
-
ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
|
1178 |
-
DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
|
1179 |
-
EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
|
1180 |
-
VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
|
1181 |
-
cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
|
1182 |
-
D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
|
1183 |
-
z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
|
1184 |
-
/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
|
1185 |
-
tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
|
1186 |
-
4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
|
1187 |
-
A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
|
1188 |
-
Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
|
1189 |
-
bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
|
1190 |
-
IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
|
1191 |
-
LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
|
1192 |
-
ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
|
1193 |
-
IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
|
1194 |
-
IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
|
1195 |
-
b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
|
1196 |
-
bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
|
1197 |
-
Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
|
1198 |
-
bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
|
1199 |
-
ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
|
1200 |
-
ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
|
1201 |
-
CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
|
1202 |
-
KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
|
1203 |
-
8CgHrTwXZoi1/baI
|
1204 |
-
-----END CERTIFICATE-----
|
1205 |
-
|
1206 |
-
NetLock Business (Class B) Root
|
1207 |
-
===============================
|
1208 |
-
-----BEGIN CERTIFICATE-----
|
1209 |
-
MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
|
1210 |
-
CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
|
1211 |
-
BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
|
1212 |
-
VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
|
1213 |
-
VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
|
1214 |
-
bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
|
1215 |
-
VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
|
1216 |
-
iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
|
1217 |
-
o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
|
1218 |
-
1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
|
1219 |
-
HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
|
1220 |
-
RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
|
1221 |
-
dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
|
1222 |
-
ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
|
1223 |
-
c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
|
1224 |
-
YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
|
1225 |
-
c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
|
1226 |
-
Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
|
1227 |
-
bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
|
1228 |
-
IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
|
1229 |
-
YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
|
1230 |
-
cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
|
1231 |
-
43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
|
1232 |
-
stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
|
1233 |
-
-----END CERTIFICATE-----
|
1234 |
-
|
1235 |
-
NetLock Express (Class C) Root
|
1236 |
-
==============================
|
1237 |
-
-----BEGIN CERTIFICATE-----
|
1238 |
-
MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
|
1239 |
-
CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
|
1240 |
-
BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
|
1241 |
-
KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
|
1242 |
-
BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
|
1243 |
-
dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
|
1244 |
-
ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
|
1245 |
-
jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
|
1246 |
-
W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
|
1247 |
-
euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
|
1248 |
-
DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
|
1249 |
-
RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
|
1250 |
-
YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
|
1251 |
-
IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
|
1252 |
-
aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
|
1253 |
-
ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
|
1254 |
-
ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
|
1255 |
-
dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
|
1256 |
-
emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
|
1257 |
-
IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
|
1258 |
-
UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
|
1259 |
-
YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
|
1260 |
-
xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
|
1261 |
-
gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
|
1262 |
-
-----END CERTIFICATE-----
|
1263 |
-
|
1264 |
-
XRamp Global CA Root
|
1265 |
-
====================
|
1266 |
-
-----BEGIN CERTIFICATE-----
|
1267 |
-
MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
|
1268 |
-
BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
|
1269 |
-
dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
|
1270 |
-
dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
|
1271 |
-
HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
|
1272 |
-
U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
1273 |
-
dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
|
1274 |
-
IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
|
1275 |
-
foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
|
1276 |
-
zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
|
1277 |
-
AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
|
1278 |
-
xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
|
1279 |
-
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
|
1280 |
-
oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
|
1281 |
-
AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
|
1282 |
-
/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
|
1283 |
-
qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
|
1284 |
-
nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
|
1285 |
-
8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
|
1286 |
-
-----END CERTIFICATE-----
|
1287 |
-
|
1288 |
-
Go Daddy Class 2 CA
|
1289 |
-
===================
|
1290 |
-
-----BEGIN CERTIFICATE-----
|
1291 |
-
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
|
1292 |
-
VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
|
1293 |
-
ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
|
1294 |
-
A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
|
1295 |
-
RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
|
1296 |
-
ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
|
1297 |
-
2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
|
1298 |
-
qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
|
1299 |
-
YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
|
1300 |
-
vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
|
1301 |
-
BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
|
1302 |
-
atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
|
1303 |
-
MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
|
1304 |
-
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
|
1305 |
-
PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
|
1306 |
-
I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
|
1307 |
-
HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
|
1308 |
-
Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
|
1309 |
-
vZ8=
|
1310 |
-
-----END CERTIFICATE-----
|
1311 |
-
|
1312 |
-
Starfield Class 2 CA
|
1313 |
-
====================
|
1314 |
-
-----BEGIN CERTIFICATE-----
|
1315 |
-
MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
|
1316 |
-
U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
|
1317 |
-
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
|
1318 |
-
MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
|
1319 |
-
A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
|
1320 |
-
SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
|
1321 |
-
bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
|
1322 |
-
JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
|
1323 |
-
epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
|
1324 |
-
F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
|
1325 |
-
MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
|
1326 |
-
hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
|
1327 |
-
bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
|
1328 |
-
QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
|
1329 |
-
afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
|
1330 |
-
PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
|
1331 |
-
xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
|
1332 |
-
KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
|
1333 |
-
QBFGmh95DmK/D5fs4C8fF5Q=
|
1334 |
-
-----END CERTIFICATE-----
|
1335 |
-
|
1336 |
-
StartCom Certification Authority
|
1337 |
-
================================
|
1338 |
-
-----BEGIN CERTIFICATE-----
|
1339 |
-
MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
|
1340 |
-
U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
|
1341 |
-
ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
|
1342 |
-
NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
|
1343 |
-
LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
|
1344 |
-
U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
1345 |
-
ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
|
1346 |
-
o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
|
1347 |
-
Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
|
1348 |
-
eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
|
1349 |
-
2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
|
1350 |
-
6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
|
1351 |
-
osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
|
1352 |
-
untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
|
1353 |
-
UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
|
1354 |
-
37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
|
1355 |
-
FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
|
1356 |
-
Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
|
1357 |
-
YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
|
1358 |
-
AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
|
1359 |
-
Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
|
1360 |
-
U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
|
1361 |
-
LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
|
1362 |
-
cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
|
1363 |
-
cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
|
1364 |
-
dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
|
1365 |
-
AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
|
1366 |
-
3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
|
1367 |
-
vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
|
1368 |
-
fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
|
1369 |
-
fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
|
1370 |
-
EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
|
1371 |
-
yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
|
1372 |
-
1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
|
1373 |
-
lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
|
1374 |
-
g14=
|
1375 |
-
-----END CERTIFICATE-----
|
1376 |
-
|
1377 |
-
Taiwan GRCA
|
1378 |
-
===========
|
1379 |
-
-----BEGIN CERTIFICATE-----
|
1380 |
-
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
-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
-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
-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
-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
-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
-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
-
1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
|
1388 |
-
htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
|
1389 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
|
1405 |
-
-----END CERTIFICATE-----
|
1406 |
-
|
1407 |
-
Firmaprofesional Root CA
|
1408 |
-
========================
|
1409 |
-
-----BEGIN CERTIFICATE-----
|
1410 |
-
MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
|
1411 |
-
GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
|
1412 |
-
Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
|
1413 |
-
ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
|
1414 |
-
MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
|
1415 |
-
OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
|
1416 |
-
ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
|
1417 |
-
AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
|
1418 |
-
j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
|
1419 |
-
lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
|
1420 |
-
3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
|
1421 |
-
NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
|
1422 |
-
KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
|
1423 |
-
AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
|
1424 |
-
DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
|
1425 |
-
ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
|
1426 |
-
u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
|
1427 |
-
wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
|
1428 |
-
7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
|
1429 |
-
VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
|
1430 |
-
-----END CERTIFICATE-----
|
1431 |
-
|
1432 |
-
Wells Fargo Root CA
|
1433 |
-
===================
|
1434 |
-
-----BEGIN CERTIFICATE-----
|
1435 |
-
MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
|
1436 |
-
BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
1437 |
-
cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
|
1438 |
-
MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
|
1439 |
-
bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
|
1440 |
-
MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
|
1441 |
-
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
|
1442 |
-
x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
|
1443 |
-
E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
|
1444 |
-
OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
|
1445 |
-
sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
|
1446 |
-
YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
|
1447 |
-
BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
|
1448 |
-
ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
|
1449 |
-
m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
|
1450 |
-
OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
|
1451 |
-
x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
|
1452 |
-
tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
|
1453 |
-
-----END CERTIFICATE-----
|
1454 |
-
|
1455 |
-
Swisscom Root CA 1
|
1456 |
-
==================
|
1457 |
-
-----BEGIN CERTIFICATE-----
|
1458 |
-
MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
|
1459 |
-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
-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
-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
-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
-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
-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
-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
-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
-
b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
|
1468 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
1484 |
-
NY6E0F/6MBr1mmz0DlP5OlvRHA==
|
1485 |
-
-----END CERTIFICATE-----
|
1486 |
-
|
1487 |
-
DigiCert Assured ID Root CA
|
1488 |
-
===========================
|
1489 |
-
-----BEGIN CERTIFICATE-----
|
1490 |
-
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
|
1491 |
-
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
|
1492 |
-
IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
|
1493 |
-
MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
|
1494 |
-
ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
|
1495 |
-
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
|
1496 |
-
9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
|
1497 |
-
UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
|
1498 |
-
/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
|
1499 |
-
oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
|
1500 |
-
GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
|
1501 |
-
66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
|
1502 |
-
hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
|
1503 |
-
EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
|
1504 |
-
SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
|
1505 |
-
8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
|
1506 |
-
+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
|
1507 |
-
-----END CERTIFICATE-----
|
1508 |
-
|
1509 |
-
DigiCert Global Root CA
|
1510 |
-
=======================
|
1511 |
-
-----BEGIN CERTIFICATE-----
|
1512 |
-
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
|
1513 |
-
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
|
1514 |
-
HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
|
1515 |
-
MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
|
1516 |
-
dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
|
1517 |
-
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
|
1518 |
-
TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
|
1519 |
-
BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
|
1520 |
-
4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
|
1521 |
-
7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
|
1522 |
-
o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
|
1523 |
-
8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
|
1524 |
-
BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
|
1525 |
-
EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
|
1526 |
-
tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
|
1527 |
-
UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
|
1528 |
-
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
|
1529 |
-
-----END CERTIFICATE-----
|
1530 |
-
|
1531 |
-
DigiCert High Assurance EV Root CA
|
1532 |
-
==================================
|
1533 |
-
-----BEGIN CERTIFICATE-----
|
1534 |
-
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
|
1535 |
-
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
|
1536 |
-
KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
|
1537 |
-
MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
|
1538 |
-
MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
|
1539 |
-
Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
|
1540 |
-
Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
|
1541 |
-
OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
|
1542 |
-
MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
|
1543 |
-
NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
|
1544 |
-
h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
|
1545 |
-
Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
|
1546 |
-
JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
|
1547 |
-
V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
|
1548 |
-
myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
|
1549 |
-
mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
1550 |
-
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
|
1551 |
-
-----END CERTIFICATE-----
|
1552 |
-
|
1553 |
-
Certplus Class 2 Primary CA
|
1554 |
-
===========================
|
1555 |
-
-----BEGIN CERTIFICATE-----
|
1556 |
-
MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
|
1557 |
-
BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
|
1558 |
-
OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
|
1559 |
-
dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
1560 |
-
ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
|
1561 |
-
5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
|
1562 |
-
Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
|
1563 |
-
YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
|
1564 |
-
e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
|
1565 |
-
CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
|
1566 |
-
YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
|
1567 |
-
L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
|
1568 |
-
P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
|
1569 |
-
TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
|
1570 |
-
7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
|
1571 |
-
//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
|
1572 |
-
l7+ijrRU
|
1573 |
-
-----END CERTIFICATE-----
|
1574 |
-
|
1575 |
-
DST Root CA X3
|
1576 |
-
==============
|
1577 |
-
-----BEGIN CERTIFICATE-----
|
1578 |
-
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
|
1579 |
-
ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
|
1580 |
-
DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
|
1581 |
-
cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
|
1582 |
-
ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
|
1583 |
-
rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
|
1584 |
-
UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
|
1585 |
-
xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
|
1586 |
-
utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
|
1587 |
-
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
|
1588 |
-
MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
|
1589 |
-
dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
|
1590 |
-
GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
|
1591 |
-
RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
|
1592 |
-
fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
|
1593 |
-
-----END CERTIFICATE-----
|
1594 |
-
|
1595 |
-
DST ACES CA X6
|
1596 |
-
==============
|
1597 |
-
-----BEGIN CERTIFICATE-----
|
1598 |
-
MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
|
1599 |
-
EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
|
1600 |
-
MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
|
1601 |
-
MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
|
1602 |
-
CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
|
1603 |
-
AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
|
1604 |
-
DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
|
1605 |
-
pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
|
1606 |
-
GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
|
1607 |
-
MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
|
1608 |
-
EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
|
1609 |
-
Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
|
1610 |
-
dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
|
1611 |
-
CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
|
1612 |
-
5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
|
1613 |
-
Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
|
1614 |
-
nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
|
1615 |
-
vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
|
1616 |
-
oKfN5XozNmr6mis=
|
1617 |
-
-----END CERTIFICATE-----
|
1618 |
-
|
1619 |
-
TURKTRUST Certificate Services Provider Root 1
|
1620 |
-
==============================================
|
1621 |
-
-----BEGIN CERTIFICATE-----
|
1622 |
-
MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
|
1623 |
-
bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
|
1624 |
-
MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
|
1625 |
-
acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
|
1626 |
-
MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
|
1627 |
-
U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
|
1628 |
-
TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
|
1629 |
-
aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
1630 |
-
AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
|
1631 |
-
yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
|
1632 |
-
Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
|
1633 |
-
8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
|
1634 |
-
W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
|
1635 |
-
BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
|
1636 |
-
sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
|
1637 |
-
q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
|
1638 |
-
B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
|
1639 |
-
nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
|
1640 |
-
-----END CERTIFICATE-----
|
1641 |
-
|
1642 |
-
TURKTRUST Certificate Services Provider Root 2
|
1643 |
-
==============================================
|
1644 |
-
-----BEGIN CERTIFICATE-----
|
1645 |
-
MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
|
1646 |
-
bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
|
1647 |
-
MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
|
1648 |
-
QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
|
1649 |
-
MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
|
1650 |
-
dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
|
1651 |
-
A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
|
1652 |
-
acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
|
1653 |
-
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
|
1654 |
-
LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
|
1655 |
-
x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
|
1656 |
-
QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
|
1657 |
-
5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
|
1658 |
-
AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
|
1659 |
-
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
|
1660 |
-
Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
|
1661 |
-
Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
|
1662 |
-
hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
|
1663 |
-
9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
|
1664 |
-
UrbnBEI=
|
1665 |
-
-----END CERTIFICATE-----
|
1666 |
-
|
1667 |
-
SwissSign Gold CA - G2
|
1668 |
-
======================
|
1669 |
-
-----BEGIN CERTIFICATE-----
|
1670 |
-
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
-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
-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
-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
-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
-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
-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
-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
-
ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
|
1679 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
|
1695 |
-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
|
1696 |
-
-----END CERTIFICATE-----
|
1697 |
-
|
1698 |
-
SwissSign Silver CA - G2
|
1699 |
-
========================
|
1700 |
-
-----BEGIN CERTIFICATE-----
|
1701 |
-
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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
|
1718 |
-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
-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
-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
-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
-
DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
|
1723 |
-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
-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
-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
-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
|
1727 |
-
-----END CERTIFICATE-----
|
1728 |
-
|
1729 |
-
GeoTrust Primary Certification Authority
|
1730 |
-
========================================
|
1731 |
-
-----BEGIN CERTIFICATE-----
|
1732 |
-
MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
|
1733 |
-
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
|
1734 |
-
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
|
1735 |
-
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
|
1736 |
-
cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
1737 |
-
CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
|
1738 |
-
b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
|
1739 |
-
nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
|
1740 |
-
RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
|
1741 |
-
tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
|
1742 |
-
AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
|
1743 |
-
hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
|
1744 |
-
Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
|
1745 |
-
NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
|
1746 |
-
Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
|
1747 |
-
1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
|
1748 |
-
-----END CERTIFICATE-----
|
1749 |
-
|
1750 |
-
thawte Primary Root CA
|
1751 |
-
======================
|
1752 |
-
-----BEGIN CERTIFICATE-----
|
1753 |
-
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
|
1754 |
-
BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
|
1755 |
-
aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
|
1756 |
-
cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
|
1757 |
-
MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
|
1758 |
-
SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
|
1759 |
-
KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
|
1760 |
-
FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
|
1761 |
-
oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
|
1762 |
-
1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
|
1763 |
-
q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
|
1764 |
-
aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
|
1765 |
-
afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
|
1766 |
-
VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
|
1767 |
-
AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
|
1768 |
-
uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
|
1769 |
-
xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
|
1770 |
-
jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
|
1771 |
-
z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
|
1772 |
-
-----END CERTIFICATE-----
|
1773 |
-
|
1774 |
-
VeriSign Class 3 Public Primary Certification Authority - G5
|
1775 |
-
============================================================
|
1776 |
-
-----BEGIN CERTIFICATE-----
|
1777 |
-
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
|
1778 |
-
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
|
1779 |
-
ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
|
1780 |
-
IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
|
1781 |
-
ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
|
1782 |
-
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
|
1783 |
-
biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
|
1784 |
-
dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
|
1785 |
-
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
1786 |
-
ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
|
1787 |
-
j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
|
1788 |
-
Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
|
1789 |
-
Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
|
1790 |
-
fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
|
1791 |
-
BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
|
1792 |
-
Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
|
1793 |
-
aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
|
1794 |
-
SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
|
1795 |
-
X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
|
1796 |
-
KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
|
1797 |
-
Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
|
1798 |
-
ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
|
1799 |
-
-----END CERTIFICATE-----
|
1800 |
-
|
1801 |
-
SecureTrust CA
|
1802 |
-
==============
|
1803 |
-
-----BEGIN CERTIFICATE-----
|
1804 |
-
MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
|
1805 |
-
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
|
1806 |
-
dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
|
1807 |
-
BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
|
1808 |
-
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
|
1809 |
-
OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
|
1810 |
-
DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
|
1811 |
-
GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
|
1812 |
-
01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
|
1813 |
-
ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
|
1814 |
-
BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
|
1815 |
-
aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
|
1816 |
-
KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
|
1817 |
-
SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
|
1818 |
-
mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
|
1819 |
-
nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
|
1820 |
-
3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
|
1821 |
-
-----END CERTIFICATE-----
|
1822 |
-
|
1823 |
-
Secure Global CA
|
1824 |
-
================
|
1825 |
-
-----BEGIN CERTIFICATE-----
|
1826 |
-
MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
|
1827 |
-
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
|
1828 |
-
bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
|
1829 |
-
MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
|
1830 |
-
Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
|
1831 |
-
YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
|
1832 |
-
bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
|
1833 |
-
8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
|
1834 |
-
HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
|
1835 |
-
0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
|
1836 |
-
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
|
1837 |
-
oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
|
1838 |
-
MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
|
1839 |
-
OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
|
1840 |
-
CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
|
1841 |
-
3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
|
1842 |
-
f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
|
1843 |
-
-----END CERTIFICATE-----
|
1844 |
-
|
1845 |
-
COMODO Certification Authority
|
1846 |
-
==============================
|
1847 |
-
-----BEGIN CERTIFICATE-----
|
1848 |
-
MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
|
1849 |
-
BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
|
1850 |
-
A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
|
1851 |
-
dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
|
1852 |
-
MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
|
1853 |
-
T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
1854 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
|
1855 |
-
+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
|
1856 |
-
xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
|
1857 |
-
4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
|
1858 |
-
1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
|
1859 |
-
rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
|
1860 |
-
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
|
1861 |
-
b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
|
1862 |
-
AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
|
1863 |
-
OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
|
1864 |
-
RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
|
1865 |
-
IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
|
1866 |
-
+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
|
1867 |
-
-----END CERTIFICATE-----
|
1868 |
-
|
1869 |
-
Network Solutions Certificate Authority
|
1870 |
-
=======================================
|
1871 |
-
-----BEGIN CERTIFICATE-----
|
1872 |
-
MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
|
1873 |
-
EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
|
1874 |
-
IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
|
1875 |
-
MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
|
1876 |
-
MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
|
1877 |
-
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
|
1878 |
-
jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
|
1879 |
-
aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
|
1880 |
-
crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
|
1881 |
-
/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
|
1882 |
-
AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
|
1883 |
-
BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
|
1884 |
-
bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
|
1885 |
-
A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
|
1886 |
-
4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
|
1887 |
-
GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
|
1888 |
-
wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
|
1889 |
-
ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
|
1890 |
-
-----END CERTIFICATE-----
|
1891 |
-
|
1892 |
-
WellsSecure Public Root Certificate Authority
|
1893 |
-
=============================================
|
1894 |
-
-----BEGIN CERTIFICATE-----
|
1895 |
-
MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
|
1896 |
-
F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
|
1897 |
-
NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
|
1898 |
-
MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
|
1899 |
-
bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
|
1900 |
-
VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
|
1901 |
-
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
|
1902 |
-
iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
|
1903 |
-
i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
|
1904 |
-
bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
|
1905 |
-
K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
|
1906 |
-
AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
|
1907 |
-
cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
|
1908 |
-
lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
|
1909 |
-
i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
|
1910 |
-
GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
|
1911 |
-
Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
|
1912 |
-
K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
|
1913 |
-
bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
|
1914 |
-
qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
|
1915 |
-
E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
|
1916 |
-
tylv2G0xffX8oRAHh84vWdw+WNs=
|
1917 |
-
-----END CERTIFICATE-----
|
1918 |
-
|
1919 |
-
COMODO ECC Certification Authority
|
1920 |
-
==================================
|
1921 |
-
-----BEGIN CERTIFICATE-----
|
1922 |
-
MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
|
1923 |
-
R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
|
1924 |
-
ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
|
1925 |
-
dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
|
1926 |
-
GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
|
1927 |
-
Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
|
1928 |
-
b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
|
1929 |
-
4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
|
1930 |
-
wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
|
1931 |
-
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
|
1932 |
-
FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
|
1933 |
-
U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
|
1934 |
-
-----END CERTIFICATE-----
|
1935 |
-
|
1936 |
-
IGC/A
|
1937 |
-
=====
|
1938 |
-
-----BEGIN CERTIFICATE-----
|
1939 |
-
MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
|
1940 |
-
VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
|
1941 |
-
Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
|
1942 |
-
MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
|
1943 |
-
EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
|
1944 |
-
STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
|
1945 |
-
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
|
1946 |
-
TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
|
1947 |
-
So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
|
1948 |
-
HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
|
1949 |
-
frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
|
1950 |
-
tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
|
1951 |
-
egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
|
1952 |
-
iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
|
1953 |
-
q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
|
1954 |
-
MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
|
1955 |
-
Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
|
1956 |
-
lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
|
1957 |
-
0mBWWg==
|
1958 |
-
-----END CERTIFICATE-----
|
1959 |
-
|
1960 |
-
Security Communication EV RootCA1
|
1961 |
-
=================================
|
1962 |
-
-----BEGIN CERTIFICATE-----
|
1963 |
-
MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
|
1964 |
-
U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
|
1965 |
-
dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
|
1966 |
-
BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
|
1967 |
-
Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
1968 |
-
AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
|
1969 |
-
/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
|
1970 |
-
WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
|
1971 |
-
ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
|
1972 |
-
bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
|
1973 |
-
9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
|
1974 |
-
SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
|
1975 |
-
iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
|
1976 |
-
Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
|
1977 |
-
mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
|
1978 |
-
T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
|
1979 |
-
-----END CERTIFICATE-----
|
1980 |
-
|
1981 |
-
OISTE WISeKey Global Root GA CA
|
1982 |
-
===============================
|
1983 |
-
-----BEGIN CERTIFICATE-----
|
1984 |
-
MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
|
1985 |
-
BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
|
1986 |
-
A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
|
1987 |
-
bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
|
1988 |
-
VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
|
1989 |
-
IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
|
1990 |
-
IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
|
1991 |
-
Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
|
1992 |
-
Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
|
1993 |
-
d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
|
1994 |
-
/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
|
1995 |
-
LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
|
1996 |
-
AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
|
1997 |
-
KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
|
1998 |
-
MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
|
1999 |
-
+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
|
2000 |
-
hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
|
2001 |
-
okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
|
2002 |
-
-----END CERTIFICATE-----
|
2003 |
-
|
2004 |
-
Microsec e-Szigno Root CA
|
2005 |
-
=========================
|
2006 |
-
-----BEGIN CERTIFICATE-----
|
2007 |
-
MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
|
2008 |
-
BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
|
2009 |
-
EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
|
2010 |
-
MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
|
2011 |
-
dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
|
2012 |
-
GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
2013 |
-
AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
|
2014 |
-
d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
|
2015 |
-
oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
|
2016 |
-
QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
|
2017 |
-
PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
|
2018 |
-
MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
|
2019 |
-
IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
|
2020 |
-
VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
|
2021 |
-
LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
|
2022 |
-
dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
|
2023 |
-
AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
|
2024 |
-
4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
|
2025 |
-
AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
|
2026 |
-
egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
|
2027 |
-
Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
|
2028 |
-
PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
|
2029 |
-
c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
|
2030 |
-
cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
|
2031 |
-
IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
|
2032 |
-
WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
|
2033 |
-
MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
|
2034 |
-
MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
|
2035 |
-
Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
|
2036 |
-
HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
|
2037 |
-
nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
|
2038 |
-
aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
|
2039 |
-
86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
|
2040 |
-
yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
|
2041 |
-
S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
|
2042 |
-
-----END CERTIFICATE-----
|
2043 |
-
|
2044 |
-
Certigna
|
2045 |
-
========
|
2046 |
-
-----BEGIN CERTIFICATE-----
|
2047 |
-
MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
|
2048 |
-
EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
|
2049 |
-
MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
|
2050 |
-
Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
|
2051 |
-
XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
|
2052 |
-
GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
|
2053 |
-
ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
|
2054 |
-
DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
|
2055 |
-
Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
|
2056 |
-
tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
|
2057 |
-
BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
|
2058 |
-
SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
|
2059 |
-
hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
|
2060 |
-
ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
|
2061 |
-
PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
|
2062 |
-
1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
|
2063 |
-
WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
|
2064 |
-
-----END CERTIFICATE-----
|
2065 |
-
|
2066 |
-
AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
|
2067 |
-
======================================
|
2068 |
-
-----BEGIN CERTIFICATE-----
|
2069 |
-
MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
|
2070 |
-
AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
|
2071 |
-
LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
|
2072 |
-
HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
|
2073 |
-
U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
|
2074 |
-
IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
|
2075 |
-
AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
|
2076 |
-
yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
|
2077 |
-
2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
|
2078 |
-
4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
|
2079 |
-
2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
|
2080 |
-
8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
|
2081 |
-
HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
|
2082 |
-
Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
|
2083 |
-
5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
|
2084 |
-
czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
|
2085 |
-
AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
|
2086 |
-
ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
|
2087 |
-
BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
|
2088 |
-
cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
|
2089 |
-
AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
|
2090 |
-
EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
|
2091 |
-
/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
|
2092 |
-
MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
|
2093 |
-
3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
|
2094 |
-
eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
|
2095 |
-
/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
|
2096 |
-
RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
|
2097 |
-
Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
|
2098 |
-
-----END CERTIFICATE-----
|
2099 |
-
|
2100 |
-
TC TrustCenter Class 2 CA II
|
2101 |
-
============================
|
2102 |
-
-----BEGIN CERTIFICATE-----
|
2103 |
-
MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
|
2104 |
-
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
|
2105 |
-
IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
|
2106 |
-
MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
|
2107 |
-
c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
|
2108 |
-
AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
2109 |
-
AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
|
2110 |
-
IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
|
2111 |
-
xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
|
2112 |
-
Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
|
2113 |
-
SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
|
2114 |
-
/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
|
2115 |
-
7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
|
2116 |
-
Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
|
2117 |
-
cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
|
2118 |
-
SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
|
2119 |
-
TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
|
2120 |
-
dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
|
2121 |
-
KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
|
2122 |
-
TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
|
2123 |
-
JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
|
2124 |
-
vQ==
|
2125 |
-
-----END CERTIFICATE-----
|
2126 |
-
|
2127 |
-
TC TrustCenter Class 3 CA II
|
2128 |
-
============================
|
2129 |
-
-----BEGIN CERTIFICATE-----
|
2130 |
-
MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
|
2131 |
-
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
|
2132 |
-
IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
|
2133 |
-
MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
|
2134 |
-
c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
|
2135 |
-
AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
2136 |
-
AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
|
2137 |
-
yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
|
2138 |
-
6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
|
2139 |
-
uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
|
2140 |
-
2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
|
2141 |
-
/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
|
2142 |
-
7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
|
2143 |
-
Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
|
2144 |
-
cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
|
2145 |
-
SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
|
2146 |
-
TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
|
2147 |
-
O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
|
2148 |
-
yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
|
2149 |
-
IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
|
2150 |
-
092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
|
2151 |
-
5A==
|
2152 |
-
-----END CERTIFICATE-----
|
2153 |
-
|
2154 |
-
TC TrustCenter Universal CA I
|
2155 |
-
=============================
|
2156 |
-
-----BEGIN CERTIFICATE-----
|
2157 |
-
MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
|
2158 |
-
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
|
2159 |
-
IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
|
2160 |
-
MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
|
2161 |
-
VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
|
2162 |
-
JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
|
2163 |
-
ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
|
2164 |
-
qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
|
2165 |
-
xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
|
2166 |
-
ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
|
2167 |
-
gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
|
2168 |
-
BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
2169 |
-
AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
|
2170 |
-
1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
|
2171 |
-
vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
|
2172 |
-
ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
|
2173 |
-
ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
|
2174 |
-
7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
|
2175 |
-
-----END CERTIFICATE-----
|
2176 |
-
|
2177 |
-
Deutsche Telekom Root CA 2
|
2178 |
-
==========================
|
2179 |
-
-----BEGIN CERTIFICATE-----
|
2180 |
-
MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
|
2181 |
-
RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
|
2182 |
-
A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
|
2183 |
-
MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
|
2184 |
-
A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
|
2185 |
-
b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
|
2186 |
-
bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
|
2187 |
-
KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
|
2188 |
-
AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
|
2189 |
-
Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
|
2190 |
-
jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
|
2191 |
-
HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
|
2192 |
-
E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
|
2193 |
-
zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
|
2194 |
-
rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
|
2195 |
-
dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
|
2196 |
-
Cm26OWMohpLzGITY+9HPBVZkVw==
|
2197 |
-
-----END CERTIFICATE-----
|
2198 |
-
|
2199 |
-
ComSign Secured CA
|
2200 |
-
==================
|
2201 |
-
-----BEGIN CERTIFICATE-----
|
2202 |
-
MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
|
2203 |
-
AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
|
2204 |
-
NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
|
2205 |
-
QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
2206 |
-
ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
|
2207 |
-
49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
|
2208 |
-
7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
|
2209 |
-
kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
|
2210 |
-
9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
|
2211 |
-
AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
|
2212 |
-
U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
|
2213 |
-
j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
|
2214 |
-
AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
|
2215 |
-
BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
|
2216 |
-
FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
|
2217 |
-
51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
|
2218 |
-
OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
|
2219 |
-
-----END CERTIFICATE-----
|
2220 |
-
|
2221 |
-
Cybertrust Global Root
|
2222 |
-
======================
|
2223 |
-
-----BEGIN CERTIFICATE-----
|
2224 |
-
MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
|
2225 |
-
ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
|
2226 |
-
MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
|
2227 |
-
ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
|
2228 |
-
+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
|
2229 |
-
0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
|
2230 |
-
AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
|
2231 |
-
89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
|
2232 |
-
8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
|
2233 |
-
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
|
2234 |
-
MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
|
2235 |
-
A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
|
2236 |
-
lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
|
2237 |
-
5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
|
2238 |
-
hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
|
2239 |
-
X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
|
2240 |
-
WL1WMRJOEcgh4LMRkWXbtKaIOM5V
|
2241 |
-
-----END CERTIFICATE-----
|
2242 |
-
|
2243 |
-
ePKI Root Certification Authority
|
2244 |
-
=================================
|
2245 |
-
-----BEGIN CERTIFICATE-----
|
2246 |
-
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
-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
-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
-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
-
MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
|
2251 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
2272 |
-
-----END CERTIFICATE-----
|
2273 |
-
|
2274 |
-
T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
|
2275 |
-
=============================================================================================================================
|
2276 |
-
-----BEGIN CERTIFICATE-----
|
2277 |
-
MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
|
2278 |
-
DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
|
2279 |
-
aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
|
2280 |
-
b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
|
2281 |
-
BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
|
2282 |
-
S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
|
2283 |
-
MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
|
2284 |
-
IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
|
2285 |
-
n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
|
2286 |
-
IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
|
2287 |
-
dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
|
2288 |
-
cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
|
2289 |
-
AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
|
2290 |
-
Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
|
2291 |
-
xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
|
2292 |
-
6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
|
2293 |
-
hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
|
2294 |
-
BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
|
2295 |
-
MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
|
2296 |
-
N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
|
2297 |
-
y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
|
2298 |
-
LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
|
2299 |
-
dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
|
2300 |
-
-----END CERTIFICATE-----
|
2301 |
-
|
2302 |
-
Buypass Class 2 CA 1
|
2303 |
-
====================
|
2304 |
-
-----BEGIN CERTIFICATE-----
|
2305 |
-
MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
|
2306 |
-
QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
|
2307 |
-
MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
|
2308 |
-
c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
|
2309 |
-
hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
|
2310 |
-
cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
|
2311 |
-
0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
|
2312 |
-
0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
|
2313 |
-
uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
|
2314 |
-
MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
|
2315 |
-
AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
|
2316 |
-
1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
|
2317 |
-
7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
|
2318 |
-
fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
|
2319 |
-
wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
|
2320 |
-
-----END CERTIFICATE-----
|
2321 |
-
|
2322 |
-
Buypass Class 3 CA 1
|
2323 |
-
====================
|
2324 |
-
-----BEGIN CERTIFICATE-----
|
2325 |
-
MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
|
2326 |
-
QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
|
2327 |
-
MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
|
2328 |
-
c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
|
2329 |
-
hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
|
2330 |
-
ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
|
2331 |
-
n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
|
2332 |
-
AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
|
2333 |
-
1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
|
2334 |
-
MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
|
2335 |
-
AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
|
2336 |
-
pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
|
2337 |
-
EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
|
2338 |
-
htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
|
2339 |
-
el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
|
2340 |
-
-----END CERTIFICATE-----
|
2341 |
-
|
2342 |
-
EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
|
2343 |
-
==========================================================================
|
2344 |
-
-----BEGIN CERTIFICATE-----
|
2345 |
-
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
-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
-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
-
Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
|
2349 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
|
2359 |
-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
-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
-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
-
Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
|
2363 |
-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
-
zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
|
2365 |
-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
-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
-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
-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
-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
-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
-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
|
2372 |
-
-----END CERTIFICATE-----
|
2373 |
-
|
2374 |
-
certSIGN ROOT CA
|
2375 |
-
================
|
2376 |
-
-----BEGIN CERTIFICATE-----
|
2377 |
-
MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
|
2378 |
-
VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
|
2379 |
-
Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
|
2380 |
-
CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
|
2381 |
-
JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
|
2382 |
-
rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
|
2383 |
-
ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
|
2384 |
-
0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
|
2385 |
-
AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
|
2386 |
-
Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
|
2387 |
-
AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
|
2388 |
-
SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
|
2389 |
-
x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
|
2390 |
-
vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
|
2391 |
-
TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
|
2392 |
-
-----END CERTIFICATE-----
|
2393 |
-
|
2394 |
-
CNNIC ROOT
|
2395 |
-
==========
|
2396 |
-
-----BEGIN CERTIFICATE-----
|
2397 |
-
MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
|
2398 |
-
ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
|
2399 |
-
OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
|
2400 |
-
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
|
2401 |
-
o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
|
2402 |
-
VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
|
2403 |
-
VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
|
2404 |
-
czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
|
2405 |
-
y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
|
2406 |
-
wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
|
2407 |
-
lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
|
2408 |
-
Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
|
2409 |
-
O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
|
2410 |
-
BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
|
2411 |
-
G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
|
2412 |
-
mxE=
|
2413 |
-
-----END CERTIFICATE-----
|
2414 |
-
|
2415 |
-
ApplicationCA - Japanese Government
|
2416 |
-
===================================
|
2417 |
-
-----BEGIN CERTIFICATE-----
|
2418 |
-
MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
|
2419 |
-
SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
|
2420 |
-
MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
|
2421 |
-
cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
2422 |
-
CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
|
2423 |
-
fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
|
2424 |
-
wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
|
2425 |
-
jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
|
2426 |
-
nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
|
2427 |
-
WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
|
2428 |
-
BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
|
2429 |
-
vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
|
2430 |
-
o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
|
2431 |
-
/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
|
2432 |
-
io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
|
2433 |
-
dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
|
2434 |
-
rosot4LKGAfmt1t06SAZf7IbiVQ=
|
2435 |
-
-----END CERTIFICATE-----
|
2436 |
-
|
2437 |
-
GeoTrust Primary Certification Authority - G3
|
2438 |
-
=============================================
|
2439 |
-
-----BEGIN CERTIFICATE-----
|
2440 |
-
MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
|
2441 |
-
BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
|
2442 |
-
IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
|
2443 |
-
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
|
2444 |
-
NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
|
2445 |
-
YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
|
2446 |
-
LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
|
2447 |
-
hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
|
2448 |
-
K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
|
2449 |
-
c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
|
2450 |
-
IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
|
2451 |
-
dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
|
2452 |
-
MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
|
2453 |
-
2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
|
2454 |
-
cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
|
2455 |
-
Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
|
2456 |
-
AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
|
2457 |
-
t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
|
2458 |
-
-----END CERTIFICATE-----
|
2459 |
-
|
2460 |
-
thawte Primary Root CA - G2
|
2461 |
-
===========================
|
2462 |
-
-----BEGIN CERTIFICATE-----
|
2463 |
-
MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
|
2464 |
-
VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
|
2465 |
-
IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
|
2466 |
-
Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
|
2467 |
-
MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
|
2468 |
-
b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
|
2469 |
-
IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
|
2470 |
-
LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
|
2471 |
-
8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
|
2472 |
-
mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
|
2473 |
-
G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
|
2474 |
-
rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
|
2475 |
-
-----END CERTIFICATE-----
|
2476 |
-
|
2477 |
-
thawte Primary Root CA - G3
|
2478 |
-
===========================
|
2479 |
-
-----BEGIN CERTIFICATE-----
|
2480 |
-
MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
|
2481 |
-
BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
|
2482 |
-
aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
|
2483 |
-
cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
|
2484 |
-
ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
|
2485 |
-
d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
|
2486 |
-
VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
|
2487 |
-
A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
2488 |
-
MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
|
2489 |
-
P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
|
2490 |
-
+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
|
2491 |
-
7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
|
2492 |
-
vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
|
2493 |
-
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
|
2494 |
-
KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
|
2495 |
-
A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
|
2496 |
-
t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
|
2497 |
-
8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
|
2498 |
-
er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
|
2499 |
-
-----END CERTIFICATE-----
|
2500 |
-
|
2501 |
-
GeoTrust Primary Certification Authority - G2
|
2502 |
-
=============================================
|
2503 |
-
-----BEGIN CERTIFICATE-----
|
2504 |
-
MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
|
2505 |
-
VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
|
2506 |
-
Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
|
2507 |
-
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
|
2508 |
-
OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
|
2509 |
-
MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
|
2510 |
-
b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
|
2511 |
-
BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
|
2512 |
-
KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
|
2513 |
-
VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
|
2514 |
-
EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
|
2515 |
-
ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
|
2516 |
-
npaqBA+K
|
2517 |
-
-----END CERTIFICATE-----
|
2518 |
-
|
2519 |
-
VeriSign Universal Root Certification Authority
|
2520 |
-
===============================================
|
2521 |
-
-----BEGIN CERTIFICATE-----
|
2522 |
-
MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
|
2523 |
-
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
|
2524 |
-
ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
|
2525 |
-
IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
|
2526 |
-
IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
|
2527 |
-
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
2528 |
-
cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
2529 |
-
IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
|
2530 |
-
aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
|
2531 |
-
1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
|
2532 |
-
MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
|
2533 |
-
9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
|
2534 |
-
AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
|
2535 |
-
tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
|
2536 |
-
CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
|
2537 |
-
a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
|
2538 |
-
DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
|
2539 |
-
Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
|
2540 |
-
Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
|
2541 |
-
P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
|
2542 |
-
wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
|
2543 |
-
mJO37M2CYfE45k+XmCpajQ==
|
2544 |
-
-----END CERTIFICATE-----
|
2545 |
-
|
2546 |
-
VeriSign Class 3 Public Primary Certification Authority - G4
|
2547 |
-
============================================================
|
2548 |
-
-----BEGIN CERTIFICATE-----
|
2549 |
-
MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
|
2550 |
-
VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
|
2551 |
-
b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
|
2552 |
-
ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
|
2553 |
-
YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
|
2554 |
-
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
|
2555 |
-
cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
|
2556 |
-
b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
2557 |
-
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
|
2558 |
-
Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
|
2559 |
-
rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
|
2560 |
-
/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
|
2561 |
-
HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
|
2562 |
-
Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
|
2563 |
-
A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
|
2564 |
-
AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
|
2565 |
-
-----END CERTIFICATE-----
|
2566 |
-
|
2567 |
-
NetLock Arany (Class Gold) FÅ‘tanúsÃtvány
|
2568 |
-
============================================
|
2569 |
-
-----BEGIN CERTIFICATE-----
|
2570 |
-
MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
|
2571 |
-
A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
|
2572 |
-
dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
|
2573 |
-
cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
|
2574 |
-
MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
|
2575 |
-
ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
|
2576 |
-
biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
|
2577 |
-
c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
|
2578 |
-
0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
|
2579 |
-
/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
|
2580 |
-
H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
|
2581 |
-
fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
|
2582 |
-
neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
|
2583 |
-
BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
|
2584 |
-
qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
|
2585 |
-
YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
|
2586 |
-
bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
|
2587 |
-
NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
|
2588 |
-
dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
|
2589 |
-
-----END CERTIFICATE-----
|
2590 |
-
|
2591 |
-
Staat der Nederlanden Root CA - G2
|
2592 |
-
==================================
|
2593 |
-
-----BEGIN CERTIFICATE-----
|
2594 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-
OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
|
2604 |
-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
-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
-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
-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
-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
-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
-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
-
A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
|
2612 |
-
+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
-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
-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
-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
-
URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
|
2617 |
-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
-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
-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
|
2620 |
-
66+KAQ==
|
2621 |
-
-----END CERTIFICATE-----
|
2622 |
-
|
2623 |
-
CA Disig
|
2624 |
-
========
|
2625 |
-
-----BEGIN CERTIFICATE-----
|
2626 |
-
MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
|
2627 |
-
QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
|
2628 |
-
MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
|
2629 |
-
bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
|
2630 |
-
DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
|
2631 |
-
GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
|
2632 |
-
Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
|
2633 |
-
hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
|
2634 |
-
ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
|
2635 |
-
gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
|
2636 |
-
AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
|
2637 |
-
aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
|
2638 |
-
ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
|
2639 |
-
BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
|
2640 |
-
WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
|
2641 |
-
mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
|
2642 |
-
CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
|
2643 |
-
ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
|
2644 |
-
4Z7CRneC9VkGjCFMhwnN5ag=
|
2645 |
-
-----END CERTIFICATE-----
|
2646 |
-
|
2647 |
-
Juur-SK
|
2648 |
-
=======
|
2649 |
-
-----BEGIN CERTIFICATE-----
|
2650 |
-
MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
|
2651 |
-
c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
|
2652 |
-
DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
|
2653 |
-
SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
|
2654 |
-
aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
2655 |
-
ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
|
2656 |
-
TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
|
2657 |
-
+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
|
2658 |
-
UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
|
2659 |
-
Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
|
2660 |
-
MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
|
2661 |
-
HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
|
2662 |
-
AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
|
2663 |
-
cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
|
2664 |
-
AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
|
2665 |
-
cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
|
2666 |
-
FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
|
2667 |
-
A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
|
2668 |
-
ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
|
2669 |
-
abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
|
2670 |
-
IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
|
2671 |
-
Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
|
2672 |
-
yyqcjg==
|
2673 |
-
-----END CERTIFICATE-----
|
2674 |
-
|
2675 |
-
Hongkong Post Root CA 1
|
2676 |
-
=======================
|
2677 |
-
-----BEGIN CERTIFICATE-----
|
2678 |
-
MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
|
2679 |
-
DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
|
2680 |
-
NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
|
2681 |
-
IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
|
2682 |
-
AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
|
2683 |
-
ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
|
2684 |
-
auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
|
2685 |
-
qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
|
2686 |
-
V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
|
2687 |
-
HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
|
2688 |
-
h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
|
2689 |
-
l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
|
2690 |
-
IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
|
2691 |
-
T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
|
2692 |
-
c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
|
2693 |
-
-----END CERTIFICATE-----
|
2694 |
-
|
2695 |
-
SecureSign RootCA11
|
2696 |
-
===================
|
2697 |
-
-----BEGIN CERTIFICATE-----
|
2698 |
-
MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
|
2699 |
-
SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
|
2700 |
-
b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
|
2701 |
-
KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
|
2702 |
-
cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
|
2703 |
-
TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
|
2704 |
-
wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
|
2705 |
-
g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
|
2706 |
-
O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
|
2707 |
-
bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
|
2708 |
-
t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
|
2709 |
-
OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
|
2710 |
-
bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
|
2711 |
-
Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
|
2712 |
-
y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
|
2713 |
-
lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
|
2714 |
-
-----END CERTIFICATE-----
|
2715 |
-
|
2716 |
-
ACEDICOM Root
|
2717 |
-
=============
|
2718 |
-
-----BEGIN CERTIFICATE-----
|
2719 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
|
2741 |
-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
-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
-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
-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
|
2745 |
-
-----END CERTIFICATE-----
|
2746 |
-
|
2747 |
-
Verisign Class 3 Public Primary Certification Authority
|
2748 |
-
=======================================================
|
2749 |
-
-----BEGIN CERTIFICATE-----
|
2750 |
-
MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
|
2751 |
-
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
2752 |
-
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
|
2753 |
-
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
|
2754 |
-
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
2755 |
-
A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
|
2756 |
-
f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
|
2757 |
-
hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
|
2758 |
-
CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
|
2759 |
-
bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
|
2760 |
-
D/xwzoiQ
|
2761 |
-
-----END CERTIFICATE-----
|
2762 |
-
|
2763 |
-
Microsec e-Szigno Root CA 2009
|
2764 |
-
==============================
|
2765 |
-
-----BEGIN CERTIFICATE-----
|
2766 |
-
MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
|
2767 |
-
MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
|
2768 |
-
c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
|
2769 |
-
dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
|
2770 |
-
BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
|
2771 |
-
U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
|
2772 |
-
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
|
2773 |
-
fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
|
2774 |
-
0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
|
2775 |
-
pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
|
2776 |
-
1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
|
2777 |
-
AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
|
2778 |
-
QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
|
2779 |
-
FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
|
2780 |
-
lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
|
2781 |
-
I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
|
2782 |
-
tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
|
2783 |
-
yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
|
2784 |
-
LXpUq3DDfSJlgnCW
|
2785 |
-
-----END CERTIFICATE-----
|
2786 |
-
|
2787 |
-
E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
|
2788 |
-
===================================================
|
2789 |
-
-----BEGIN CERTIFICATE-----
|
2790 |
-
MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
|
2791 |
-
EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
|
2792 |
-
ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
|
2793 |
-
MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
|
2794 |
-
cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
|
2795 |
-
aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
2796 |
-
AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
|
2797 |
-
8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
|
2798 |
-
jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
|
2799 |
-
JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
|
2800 |
-
9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
|
2801 |
-
AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
|
2802 |
-
SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
|
2803 |
-
F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
|
2804 |
-
D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
|
2805 |
-
Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
|
2806 |
-
fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
|
2807 |
-
-----END CERTIFICATE-----
|
2808 |
-
|
2809 |
-
GlobalSign Root CA - R3
|
2810 |
-
=======================
|
2811 |
-
-----BEGIN CERTIFICATE-----
|
2812 |
-
MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
|
2813 |
-
YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
|
2814 |
-
bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
|
2815 |
-
aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
|
2816 |
-
bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
|
2817 |
-
iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
|
2818 |
-
0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
|
2819 |
-
rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
|
2820 |
-
OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
|
2821 |
-
xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
|
2822 |
-
FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
|
2823 |
-
lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
|
2824 |
-
EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
|
2825 |
-
bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
|
2826 |
-
YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
|
2827 |
-
kpeDMdmztcpHWD9f
|
2828 |
-
-----END CERTIFICATE-----
|
2829 |
-
|
2830 |
-
TC TrustCenter Universal CA III
|
2831 |
-
===============================
|
2832 |
-
-----BEGIN CERTIFICATE-----
|
2833 |
-
MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC
|
2834 |
-
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
|
2835 |
-
IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe
|
2836 |
-
Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU
|
2837 |
-
QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex
|
2838 |
-
KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB
|
2839 |
-
AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt
|
2840 |
-
QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO
|
2841 |
-
juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut
|
2842 |
-
CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1
|
2843 |
-
M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G
|
2844 |
-
A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
|
2845 |
-
BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA
|
2846 |
-
g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+
|
2847 |
-
KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK
|
2848 |
-
BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
|
2849 |
-
CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq
|
2850 |
-
woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
|
2851 |
-
-----END CERTIFICATE-----
|
2852 |
-
|
2853 |
-
Autoridad de Certificacion Firmaprofesional CIF A62634068
|
2854 |
-
=========================================================
|
2855 |
-
-----BEGIN CERTIFICATE-----
|
2856 |
-
MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
|
2857 |
-
BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
|
2858 |
-
MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
|
2859 |
-
QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
|
2860 |
-
NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
|
2861 |
-
Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
|
2862 |
-
B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
|
2863 |
-
7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
|
2864 |
-
ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
|
2865 |
-
plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
|
2866 |
-
MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
|
2867 |
-
LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
|
2868 |
-
bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
|
2869 |
-
vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
|
2870 |
-
EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
|
2871 |
-
DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
|
2872 |
-
cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
|
2873 |
-
bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
|
2874 |
-
ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
|
2875 |
-
51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
|
2876 |
-
R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
|
2877 |
-
T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
|
2878 |
-
Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
|
2879 |
-
osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
|
2880 |
-
crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
|
2881 |
-
saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
|
2882 |
-
KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
|
2883 |
-
6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
|
2884 |
-
-----END CERTIFICATE-----
|
2885 |
-
|
2886 |
-
Izenpe.com
|
2887 |
-
==========
|
2888 |
-
-----BEGIN CERTIFICATE-----
|
2889 |
-
MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
|
2890 |
-
EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
|
2891 |
-
MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
|
2892 |
-
QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
|
2893 |
-
03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
|
2894 |
-
ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
|
2895 |
-
+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
|
2896 |
-
PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
|
2897 |
-
OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
|
2898 |
-
F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
|
2899 |
-
0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
|
2900 |
-
0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
|
2901 |
-
leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
|
2902 |
-
AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
|
2903 |
-
SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
|
2904 |
-
NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
|
2905 |
-
MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
|
2906 |
-
BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
|
2907 |
-
Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
|
2908 |
-
kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
|
2909 |
-
hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
|
2910 |
-
g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
|
2911 |
-
aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
|
2912 |
-
nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
|
2913 |
-
ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
|
2914 |
-
Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
|
2915 |
-
WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
|
2916 |
-
-----END CERTIFICATE-----
|
2917 |
-
|
2918 |
-
Chambers of Commerce Root - 2008
|
2919 |
-
================================
|
2920 |
-
-----BEGIN CERTIFICATE-----
|
2921 |
-
MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
|
2922 |
-
MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
|
2923 |
-
bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
|
2924 |
-
QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
|
2925 |
-
Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
|
2926 |
-
ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
|
2927 |
-
EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
|
2928 |
-
cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
|
2929 |
-
AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
|
2930 |
-
XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
|
2931 |
-
h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
|
2932 |
-
ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
|
2933 |
-
NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
|
2934 |
-
D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
|
2935 |
-
lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
|
2936 |
-
0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
|
2937 |
-
ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
|
2938 |
-
EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
|
2939 |
-
G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
|
2940 |
-
BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
|
2941 |
-
bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
|
2942 |
-
bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
|
2943 |
-
CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
|
2944 |
-
AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
|
2945 |
-
wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
|
2946 |
-
3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
|
2947 |
-
RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
|
2948 |
-
M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
|
2949 |
-
YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
|
2950 |
-
9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
|
2951 |
-
zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
|
2952 |
-
nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
|
2953 |
-
OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
|
2954 |
-
-----END CERTIFICATE-----
|
2955 |
-
|
2956 |
-
Global Chambersign Root - 2008
|
2957 |
-
==============================
|
2958 |
-
-----BEGIN CERTIFICATE-----
|
2959 |
-
MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
|
2960 |
-
MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
|
2961 |
-
bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
|
2962 |
-
QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
|
2963 |
-
NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
|
2964 |
-
Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
|
2965 |
-
QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
|
2966 |
-
aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
|
2967 |
-
VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
|
2968 |
-
XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
|
2969 |
-
ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
|
2970 |
-
/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
|
2971 |
-
TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
|
2972 |
-
H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
|
2973 |
-
Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
|
2974 |
-
HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
|
2975 |
-
wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
|
2976 |
-
AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
|
2977 |
-
BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
|
2978 |
-
BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
|
2979 |
-
aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
|
2980 |
-
aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
|
2981 |
-
1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
|
2982 |
-
dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
|
2983 |
-
/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
|
2984 |
-
ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
|
2985 |
-
dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
|
2986 |
-
9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
|
2987 |
-
foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
|
2988 |
-
qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
|
2989 |
-
P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
|
2990 |
-
c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
|
2991 |
-
09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
|
2992 |
-
-----END CERTIFICATE-----
|
2993 |
-
|
2994 |
-
Go Daddy Root Certificate Authority - G2
|
2995 |
-
========================================
|
2996 |
-
-----BEGIN CERTIFICATE-----
|
2997 |
-
MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
2998 |
-
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
|
2999 |
-
MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
|
3000 |
-
MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
|
3001 |
-
b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
|
3002 |
-
A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
|
3003 |
-
hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
|
3004 |
-
9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
|
3005 |
-
+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
|
3006 |
-
fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
|
3007 |
-
NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
|
3008 |
-
MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
|
3009 |
-
BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
|
3010 |
-
vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
|
3011 |
-
5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
|
3012 |
-
N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
|
3013 |
-
LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
|
3014 |
-
-----END CERTIFICATE-----
|
3015 |
-
|
3016 |
-
Starfield Root Certificate Authority - G2
|
3017 |
-
=========================================
|
3018 |
-
-----BEGIN CERTIFICATE-----
|
3019 |
-
MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
3020 |
-
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
|
3021 |
-
b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
|
3022 |
-
eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
|
3023 |
-
DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
|
3024 |
-
VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
|
3025 |
-
dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
|
3026 |
-
W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
|
3027 |
-
bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
|
3028 |
-
N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
|
3029 |
-
ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
|
3030 |
-
JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
3031 |
-
AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
|
3032 |
-
TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
|
3033 |
-
4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
|
3034 |
-
F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
|
3035 |
-
pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
|
3036 |
-
c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
|
3037 |
-
-----END CERTIFICATE-----
|
3038 |
-
|
3039 |
-
Starfield Services Root Certificate Authority - G2
|
3040 |
-
==================================================
|
3041 |
-
-----BEGIN CERTIFICATE-----
|
3042 |
-
MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
3043 |
-
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
|
3044 |
-
b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
|
3045 |
-
IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
|
3046 |
-
BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
|
3047 |
-
dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
|
3048 |
-
Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
3049 |
-
AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
|
3050 |
-
h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
|
3051 |
-
hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
|
3052 |
-
LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
|
3053 |
-
rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
|
3054 |
-
AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
|
3055 |
-
SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
|
3056 |
-
E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
|
3057 |
-
xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
|
3058 |
-
iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
|
3059 |
-
YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
|
3060 |
-
-----END CERTIFICATE-----
|
3061 |
-
|
3062 |
-
AffirmTrust Commercial
|
3063 |
-
======================
|
3064 |
-
-----BEGIN CERTIFICATE-----
|
3065 |
-
MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
|
3066 |
-
BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
|
3067 |
-
MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
|
3068 |
-
bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
|
3069 |
-
AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
|
3070 |
-
DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
|
3071 |
-
C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
|
3072 |
-
BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
|
3073 |
-
MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
|
3074 |
-
HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
3075 |
-
AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
|
3076 |
-
hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
|
3077 |
-
qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
|
3078 |
-
0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
|
3079 |
-
sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
|
3080 |
-
-----END CERTIFICATE-----
|
3081 |
-
|
3082 |
-
AffirmTrust Networking
|
3083 |
-
======================
|
3084 |
-
-----BEGIN CERTIFICATE-----
|
3085 |
-
MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
|
3086 |
-
BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
|
3087 |
-
MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
|
3088 |
-
bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
|
3089 |
-
AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
|
3090 |
-
Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
|
3091 |
-
dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
|
3092 |
-
/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
|
3093 |
-
h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
|
3094 |
-
HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
3095 |
-
AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
|
3096 |
-
UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
|
3097 |
-
12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
|
3098 |
-
WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
|
3099 |
-
/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
|
3100 |
-
-----END CERTIFICATE-----
|
3101 |
-
|
3102 |
-
AffirmTrust Premium
|
3103 |
-
===================
|
3104 |
-
-----BEGIN CERTIFICATE-----
|
3105 |
-
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
-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
-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
-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
-
MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
|
3110 |
-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
-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
-
+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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
|
3129 |
-
-----END CERTIFICATE-----
|
3130 |
-
|
3131 |
-
AffirmTrust Premium ECC
|
3132 |
-
=======================
|
3133 |
-
-----BEGIN CERTIFICATE-----
|
3134 |
-
MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
|
3135 |
-
BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
|
3136 |
-
MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
|
3137 |
-
cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
|
3138 |
-
IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
|
3139 |
-
N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
|
3140 |
-
BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
|
3141 |
-
BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
|
3142 |
-
57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
|
3143 |
-
eQ==
|
3144 |
-
-----END CERTIFICATE-----
|
3145 |
-
|
3146 |
-
Certum Trusted Network CA
|
3147 |
-
=========================
|
3148 |
-
-----BEGIN CERTIFICATE-----
|
3149 |
-
MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
|
3150 |
-
ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
|
3151 |
-
biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
|
3152 |
-
MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
|
3153 |
-
ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
3154 |
-
MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
3155 |
-
AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
|
3156 |
-
l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
|
3157 |
-
J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
|
3158 |
-
fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
|
3159 |
-
cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
|
3160 |
-
Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
|
3161 |
-
DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
|
3162 |
-
jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
|
3163 |
-
mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
|
3164 |
-
Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
|
3165 |
-
03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
|
3166 |
-
-----END CERTIFICATE-----
|
3167 |
-
|
3168 |
-
Certinomis - Autorité Racine
|
3169 |
-
=============================
|
3170 |
-
-----BEGIN CERTIFICATE-----
|
3171 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
|
3192 |
-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
-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
-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
-
wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
|
3196 |
-
vgt2Fl43N+bYdJeimUV5
|
3197 |
-
-----END CERTIFICATE-----
|
3198 |
-
|
3199 |
-
Root CA Generalitat Valenciana
|
3200 |
-
==============================
|
3201 |
-
-----BEGIN CERTIFICATE-----
|
3202 |
-
MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
|
3203 |
-
ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
|
3204 |
-
IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
|
3205 |
-
WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
|
3206 |
-
CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
|
3207 |
-
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
|
3208 |
-
F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
|
3209 |
-
ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
|
3210 |
-
D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
|
3211 |
-
JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
|
3212 |
-
AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
|
3213 |
-
dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
|
3214 |
-
ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
|
3215 |
-
AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
|
3216 |
-
YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
|
3217 |
-
AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
|
3218 |
-
aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
|
3219 |
-
AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
|
3220 |
-
YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
|
3221 |
-
AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
|
3222 |
-
OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
|
3223 |
-
dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
|
3224 |
-
BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
|
3225 |
-
A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
|
3226 |
-
b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
|
3227 |
-
TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
|
3228 |
-
Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
|
3229 |
-
NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
|
3230 |
-
iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
|
3231 |
-
+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
|
3232 |
-
-----END CERTIFICATE-----
|
3233 |
-
|
3234 |
-
A-Trust-nQual-03
|
3235 |
-
================
|
3236 |
-
-----BEGIN CERTIFICATE-----
|
3237 |
-
MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
|
3238 |
-
Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
|
3239 |
-
a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
|
3240 |
-
dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
|
3241 |
-
RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
|
3242 |
-
ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
|
3243 |
-
c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
|
3244 |
-
zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
|
3245 |
-
yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
|
3246 |
-
SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
|
3247 |
-
iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
|
3248 |
-
cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
|
3249 |
-
eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
|
3250 |
-
ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
|
3251 |
-
sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
|
3252 |
-
JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
|
3253 |
-
mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
|
3254 |
-
ahq97BvIxYSazQ==
|
3255 |
-
-----END CERTIFICATE-----
|
3256 |
-
|
3257 |
-
TWCA Root Certification Authority
|
3258 |
-
=================================
|
3259 |
-
-----BEGIN CERTIFICATE-----
|
3260 |
-
MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
|
3261 |
-
VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
|
3262 |
-
dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
|
3263 |
-
EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
|
3264 |
-
IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
3265 |
-
AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
|
3266 |
-
QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
|
3267 |
-
oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
|
3268 |
-
4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
|
3269 |
-
y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
|
3270 |
-
BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
|
3271 |
-
9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
|
3272 |
-
mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
|
3273 |
-
QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
|
3274 |
-
T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
|
3275 |
-
Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
|
3276 |
-
-----END CERTIFICATE-----
|
3277 |
-
|
3278 |
-
Security Communication RootCA2
|
3279 |
-
==============================
|
3280 |
-
-----BEGIN CERTIFICATE-----
|
3281 |
-
MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
|
3282 |
-
U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
|
3283 |
-
dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
|
3284 |
-
SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
|
3285 |
-
aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
3286 |
-
ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
|
3287 |
-
+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
|
3288 |
-
3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
|
3289 |
-
spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
|
3290 |
-
EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
|
3291 |
-
QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
|
3292 |
-
CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
|
3293 |
-
u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
|
3294 |
-
3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
|
3295 |
-
tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
|
3296 |
-
mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
|
3297 |
-
-----END CERTIFICATE-----
|
3298 |
-
|
3299 |
-
EC-ACC
|
3300 |
-
======
|
3301 |
-
-----BEGIN CERTIFICATE-----
|
3302 |
-
MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
|
3303 |
-
BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
|
3304 |
-
ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
|
3305 |
-
VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
|
3306 |
-
CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
|
3307 |
-
BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
|
3308 |
-
MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
|
3309 |
-
SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
|
3310 |
-
Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
|
3311 |
-
cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
|
3312 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
|
3313 |
-
w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
|
3314 |
-
ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
|
3315 |
-
HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
|
3316 |
-
E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
|
3317 |
-
0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
|
3318 |
-
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
|
3319 |
-
VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
|
3320 |
-
Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
|
3321 |
-
dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
|
3322 |
-
lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
|
3323 |
-
Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
|
3324 |
-
l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
|
3325 |
-
E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
|
3326 |
-
5EI=
|
3327 |
-
-----END CERTIFICATE-----
|
3328 |
-
|
3329 |
-
Hellenic Academic and Research Institutions RootCA 2011
|
3330 |
-
=======================================================
|
3331 |
-
-----BEGIN CERTIFICATE-----
|
3332 |
-
MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
|
3333 |
-
O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
|
3334 |
-
aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
|
3335 |
-
IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
|
3336 |
-
AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
|
3337 |
-
IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
|
3338 |
-
IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
3339 |
-
AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
|
3340 |
-
1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
|
3341 |
-
71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
|
3342 |
-
8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
|
3343 |
-
3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
|
3344 |
-
MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
|
3345 |
-
MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
|
3346 |
-
b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
|
3347 |
-
XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
|
3348 |
-
TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
|
3349 |
-
/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
|
3350 |
-
7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
|
3351 |
-
-----END CERTIFICATE-----
|
3352 |
-
|
3353 |
-
Actalis Authentication Root CA
|
3354 |
-
==============================
|
3355 |
-
-----BEGIN CERTIFICATE-----
|
3356 |
-
MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
|
3357 |
-
BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
|
3358 |
-
AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
|
3359 |
-
MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
|
3360 |
-
IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
|
3361 |
-
IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
|
3362 |
-
wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
|
3363 |
-
by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
|
3364 |
-
zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
|
3365 |
-
YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
|
3366 |
-
oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
|
3367 |
-
EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
|
3368 |
-
hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
|
3369 |
-
EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
|
3370 |
-
jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
|
3371 |
-
iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
|
3372 |
-
ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
|
3373 |
-
WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
|
3374 |
-
JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
|
3375 |
-
K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
|
3376 |
-
Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
|
3377 |
-
4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
|
3378 |
-
2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
|
3379 |
-
lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
|
3380 |
-
OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
|
3381 |
-
vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
|
3382 |
-
-----END CERTIFICATE-----
|
3383 |
-
|
3384 |
-
Trustis FPS Root CA
|
3385 |
-
===================
|
3386 |
-
-----BEGIN CERTIFICATE-----
|
3387 |
-
MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
|
3388 |
-
EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
|
3389 |
-
IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
|
3390 |
-
BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
|
3391 |
-
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
|
3392 |
-
RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
|
3393 |
-
H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
|
3394 |
-
cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
|
3395 |
-
o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
|
3396 |
-
AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
|
3397 |
-
BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
|
3398 |
-
GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
|
3399 |
-
yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
|
3400 |
-
8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
|
3401 |
-
l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
|
3402 |
-
iB6XzCGcKQENZetX2fNXlrtIzYE=
|
3403 |
-
-----END CERTIFICATE-----
|
3404 |
-
|
3405 |
-
StartCom Certification Authority
|
3406 |
-
================================
|
3407 |
-
-----BEGIN CERTIFICATE-----
|
3408 |
-
MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
|
3409 |
-
U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
|
3410 |
-
ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
|
3411 |
-
NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
|
3412 |
-
LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
|
3413 |
-
U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
3414 |
-
ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
|
3415 |
-
o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
|
3416 |
-
Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
|
3417 |
-
eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
|
3418 |
-
2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
|
3419 |
-
6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
|
3420 |
-
osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
|
3421 |
-
untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
|
3422 |
-
UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
|
3423 |
-
37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
|
3424 |
-
VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
|
3425 |
-
Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
|
3426 |
-
dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
|
3427 |
-
c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
|
3428 |
-
bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
|
3429 |
-
aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
|
3430 |
-
aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
|
3431 |
-
L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
|
3432 |
-
cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
|
3433 |
-
fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
|
3434 |
-
N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
|
3435 |
-
Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
|
3436 |
-
tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
|
3437 |
-
e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
|
3438 |
-
2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
|
3439 |
-
HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
|
3440 |
-
JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
|
3441 |
-
D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
|
3442 |
-
-----END CERTIFICATE-----
|
3443 |
-
|
3444 |
-
StartCom Certification Authority G2
|
3445 |
-
===================================
|
3446 |
-
-----BEGIN CERTIFICATE-----
|
3447 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-
O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H
|
3457 |
-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
-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
-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
-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
-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
-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
-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
-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
-
JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG
|
3466 |
-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
-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
-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
-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
-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
|
3471 |
-
obp573PYtlNXLfbQ4ddI
|
3472 |
-
-----END CERTIFICATE-----
|
3473 |
-
|
3474 |
-
Buypass Class 2 Root CA
|
3475 |
-
=======================
|
3476 |
-
-----BEGIN CERTIFICATE-----
|
3477 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
3501 |
-
rJgWVqA=
|
3502 |
-
-----END CERTIFICATE-----
|
3503 |
-
|
3504 |
-
Buypass Class 3 Root CA
|
3505 |
-
=======================
|
3506 |
-
-----BEGIN CERTIFICATE-----
|
3507 |
-
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
-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
-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
-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
-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
-
sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR
|
3513 |
-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
-
7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ
|
3515 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
3531 |
-
Cp/HuZc=
|
3532 |
-
-----END CERTIFICATE-----
|
3533 |
-
|
3534 |
-
T-TeleSec GlobalRoot Class 3
|
3535 |
-
============================
|
3536 |
-
-----BEGIN CERTIFICATE-----
|
3537 |
-
MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
|
3538 |
-
IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
|
3539 |
-
cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
|
3540 |
-
MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
|
3541 |
-
dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
|
3542 |
-
ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
|
3543 |
-
DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
|
3544 |
-
9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
|
3545 |
-
NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
|
3546 |
-
iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
|
3547 |
-
0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
|
3548 |
-
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
|
3549 |
-
AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
|
3550 |
-
fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
|
3551 |
-
ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
|
3552 |
-
P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
|
3553 |
-
e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
|
3554 |
-
-----END CERTIFICATE-----
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Transport/fsockopen.php
DELETED
@@ -1,404 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* fsockopen HTTP transport
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Transport
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* fsockopen HTTP transport
|
11 |
-
*
|
12 |
-
* @package Requests
|
13 |
-
* @subpackage Transport
|
14 |
-
*/
|
15 |
-
class Requests_Transport_fsockopen implements Requests_Transport {
|
16 |
-
/**
|
17 |
-
* Second to microsecond conversion
|
18 |
-
*
|
19 |
-
* @var integer
|
20 |
-
*/
|
21 |
-
const SECOND_IN_MICROSECONDS = 1000000;
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Raw HTTP data
|
25 |
-
*
|
26 |
-
* @var string
|
27 |
-
*/
|
28 |
-
public $headers = '';
|
29 |
-
|
30 |
-
/**
|
31 |
-
* Stream metadata
|
32 |
-
*
|
33 |
-
* @var array Associative array of properties, see {@see http://php.net/stream_get_meta_data}
|
34 |
-
*/
|
35 |
-
public $info;
|
36 |
-
|
37 |
-
protected $connect_error = '';
|
38 |
-
|
39 |
-
/**
|
40 |
-
* Perform a request
|
41 |
-
*
|
42 |
-
* @throws Requests_Exception On failure to connect to socket (`fsockopenerror`)
|
43 |
-
* @throws Requests_Exception On socket timeout (`timeout`)
|
44 |
-
*
|
45 |
-
* @param string $url URL to request
|
46 |
-
* @param array $headers Associative array of request headers
|
47 |
-
* @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
|
48 |
-
* @param array $options Request options, see {@see Requests::response()} for documentation
|
49 |
-
* @return string Raw HTTP result
|
50 |
-
*/
|
51 |
-
public function request($url, $headers = array(), $data = array(), $options = array()) {
|
52 |
-
$options['hooks']->dispatch('fsockopen.before_request');
|
53 |
-
|
54 |
-
$url_parts = parse_url($url);
|
55 |
-
$host = $url_parts['host'];
|
56 |
-
$context = stream_context_create();
|
57 |
-
$verifyname = false;
|
58 |
-
|
59 |
-
// HTTPS support
|
60 |
-
if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https') {
|
61 |
-
$remote_socket = 'ssl://' . $host;
|
62 |
-
$url_parts['port'] = 443;
|
63 |
-
|
64 |
-
$context_options = array(
|
65 |
-
'verify_peer' => true,
|
66 |
-
// 'CN_match' => $host,
|
67 |
-
'capture_peer_cert' => true
|
68 |
-
);
|
69 |
-
$verifyname = true;
|
70 |
-
|
71 |
-
// SNI, if enabled (OpenSSL >=0.9.8j)
|
72 |
-
if (defined('OPENSSL_TLSEXT_SERVER_NAME') && OPENSSL_TLSEXT_SERVER_NAME) {
|
73 |
-
$context_options['SNI_enabled'] = true;
|
74 |
-
if (isset($options['verifyname']) && $options['verifyname'] === false) {
|
75 |
-
$context_options['SNI_enabled'] = false;
|
76 |
-
}
|
77 |
-
}
|
78 |
-
|
79 |
-
if (isset($options['verify'])) {
|
80 |
-
if ($options['verify'] === false) {
|
81 |
-
$context_options['verify_peer'] = false;
|
82 |
-
} elseif (is_string($options['verify'])) {
|
83 |
-
$context_options['cafile'] = $options['verify'];
|
84 |
-
}
|
85 |
-
}
|
86 |
-
|
87 |
-
if (isset($options['verifyname']) && $options['verifyname'] === false) {
|
88 |
-
$verifyname = false;
|
89 |
-
}
|
90 |
-
|
91 |
-
stream_context_set_option($context, array('ssl' => $context_options));
|
92 |
-
}
|
93 |
-
else {
|
94 |
-
$remote_socket = 'tcp://' . $host;
|
95 |
-
}
|
96 |
-
|
97 |
-
$proxy = isset( $options['proxy'] );
|
98 |
-
$proxy_auth = $proxy && isset( $options['proxy_username'] ) && isset( $options['proxy_password'] );
|
99 |
-
|
100 |
-
if (!isset($url_parts['port'])) {
|
101 |
-
$url_parts['port'] = 80;
|
102 |
-
}
|
103 |
-
$remote_socket .= ':' . $url_parts['port'];
|
104 |
-
|
105 |
-
set_error_handler(array($this, 'connect_error_handler'), E_WARNING | E_NOTICE);
|
106 |
-
|
107 |
-
$options['hooks']->dispatch('fsockopen.remote_socket', array(&$remote_socket));
|
108 |
-
|
109 |
-
$fp = stream_socket_client($remote_socket, $errno, $errstr, ceil($options['connect_timeout']), STREAM_CLIENT_CONNECT, $context);
|
110 |
-
|
111 |
-
restore_error_handler();
|
112 |
-
|
113 |
-
if ($verifyname) {
|
114 |
-
if (!$this->verify_certificate_from_context($host, $context)) {
|
115 |
-
throw new Requests_Exception('SSL certificate did not match the requested domain name', 'ssl.no_match');
|
116 |
-
}
|
117 |
-
}
|
118 |
-
|
119 |
-
if (!$fp) {
|
120 |
-
if ($errno === 0) {
|
121 |
-
// Connection issue
|
122 |
-
throw new Requests_Exception(rtrim($this->connect_error), 'fsockopen.connect_error');
|
123 |
-
}
|
124 |
-
else {
|
125 |
-
throw new Requests_Exception($errstr, 'fsockopenerror');
|
126 |
-
return;
|
127 |
-
}
|
128 |
-
}
|
129 |
-
|
130 |
-
$request_body = '';
|
131 |
-
$out = '';
|
132 |
-
switch ($options['type']) {
|
133 |
-
case Requests::POST:
|
134 |
-
case Requests::PUT:
|
135 |
-
case Requests::PATCH:
|
136 |
-
if (isset($url_parts['path'])) {
|
137 |
-
$path = $url_parts['path'];
|
138 |
-
if (isset($url_parts['query'])) {
|
139 |
-
$path .= '?' . $url_parts['query'];
|
140 |
-
}
|
141 |
-
}
|
142 |
-
else {
|
143 |
-
$path = '/';
|
144 |
-
}
|
145 |
-
|
146 |
-
$options['hooks']->dispatch( 'fsockopen.remote_host_path', array( &$path, $url ) );
|
147 |
-
$out = $options['type'] . " $path HTTP/1.0\r\n";
|
148 |
-
|
149 |
-
if (is_array($data)) {
|
150 |
-
$request_body = http_build_query($data, null, '&');
|
151 |
-
}
|
152 |
-
else {
|
153 |
-
$request_body = $data;
|
154 |
-
}
|
155 |
-
if (empty($headers['Content-Length'])) {
|
156 |
-
$headers['Content-Length'] = strlen($request_body);
|
157 |
-
}
|
158 |
-
if (empty($headers['Content-Type'])) {
|
159 |
-
$headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
|
160 |
-
}
|
161 |
-
break;
|
162 |
-
case Requests::HEAD:
|
163 |
-
case Requests::GET:
|
164 |
-
case Requests::DELETE:
|
165 |
-
$path = self::format_get($url_parts, $data);
|
166 |
-
$options['hooks']->dispatch('fsockopen.remote_host_path', array(&$path, $url));
|
167 |
-
$out = $options['type'] . " $path HTTP/1.0\r\n";
|
168 |
-
break;
|
169 |
-
}
|
170 |
-
$out .= "Host: {$url_parts['host']}";
|
171 |
-
|
172 |
-
if ($url_parts['port'] !== 80) {
|
173 |
-
$out .= ":{$url_parts['port']}";
|
174 |
-
}
|
175 |
-
$out .= "\r\n";
|
176 |
-
|
177 |
-
$out .= "User-Agent: {$options['useragent']}\r\n";
|
178 |
-
$accept_encoding = $this->accept_encoding();
|
179 |
-
if (!empty($accept_encoding)) {
|
180 |
-
$out .= "Accept-Encoding: $accept_encoding\r\n";
|
181 |
-
}
|
182 |
-
|
183 |
-
$headers = Requests::flatten($headers);
|
184 |
-
|
185 |
-
if (!empty($headers)) {
|
186 |
-
$out .= implode($headers, "\r\n") . "\r\n";
|
187 |
-
}
|
188 |
-
|
189 |
-
$options['hooks']->dispatch('fsockopen.after_headers', array(&$out));
|
190 |
-
|
191 |
-
if (substr($out, -2) !== "\r\n") {
|
192 |
-
$out .= "\r\n";
|
193 |
-
}
|
194 |
-
|
195 |
-
$out .= "Connection: Close\r\n\r\n" . $request_body;
|
196 |
-
|
197 |
-
$options['hooks']->dispatch('fsockopen.before_send', array(&$out));
|
198 |
-
|
199 |
-
fwrite($fp, $out);
|
200 |
-
$options['hooks']->dispatch('fsockopen.after_send', array(&$fake_headers));
|
201 |
-
|
202 |
-
if (!$options['blocking']) {
|
203 |
-
fclose($fp);
|
204 |
-
$fake_headers = '';
|
205 |
-
$options['hooks']->dispatch('fsockopen.after_request', array(&$fake_headers));
|
206 |
-
return '';
|
207 |
-
}
|
208 |
-
|
209 |
-
$timeout_sec = (int) floor($options['timeout']);
|
210 |
-
$timeout_msec = $timeout_sec == $options['timeout'] ? 0 : self::SECOND_IN_MICROSECONDS * $options['timeout'] % self::SECOND_IN_MICROSECONDS;
|
211 |
-
stream_set_timeout($fp, $timeout_sec, $timeout_msec);
|
212 |
-
|
213 |
-
$this->info = stream_get_meta_data($fp);
|
214 |
-
|
215 |
-
$this->headers = '';
|
216 |
-
$this->info = stream_get_meta_data($fp);
|
217 |
-
if (!$options['filename']) {
|
218 |
-
while (!feof($fp)) {
|
219 |
-
$this->info = stream_get_meta_data($fp);
|
220 |
-
if ($this->info['timed_out']) {
|
221 |
-
throw new Requests_Exception('fsocket timed out', 'timeout');
|
222 |
-
}
|
223 |
-
|
224 |
-
$this->headers .= fread($fp, 1160);
|
225 |
-
}
|
226 |
-
}
|
227 |
-
else {
|
228 |
-
$download = fopen($options['filename'], 'wb');
|
229 |
-
$doingbody = false;
|
230 |
-
$response = '';
|
231 |
-
while (!feof($fp)) {
|
232 |
-
$this->info = stream_get_meta_data($fp);
|
233 |
-
if ($this->info['timed_out']) {
|
234 |
-
throw new Requests_Exception('fsocket timed out', 'timeout');
|
235 |
-
}
|
236 |
-
|
237 |
-
$block = fread($fp, 1160);
|
238 |
-
if ($doingbody) {
|
239 |
-
fwrite($download, $block);
|
240 |
-
}
|
241 |
-
else {
|
242 |
-
$response .= $block;
|
243 |
-
if (strpos($response, "\r\n\r\n")) {
|
244 |
-
list($this->headers, $block) = explode("\r\n\r\n", $response, 2);
|
245 |
-
$doingbody = true;
|
246 |
-
fwrite($download, $block);
|
247 |
-
}
|
248 |
-
}
|
249 |
-
}
|
250 |
-
fclose($download);
|
251 |
-
}
|
252 |
-
fclose($fp);
|
253 |
-
|
254 |
-
$options['hooks']->dispatch('fsockopen.after_request', array(&$this->headers));
|
255 |
-
return $this->headers;
|
256 |
-
}
|
257 |
-
|
258 |
-
/**
|
259 |
-
* Send multiple requests simultaneously
|
260 |
-
*
|
261 |
-
* @param array $requests Request data (array of 'url', 'headers', 'data', 'options') as per {@see Requests_Transport::request}
|
262 |
-
* @param array $options Global options, see {@see Requests::response()} for documentation
|
263 |
-
* @return array Array of Requests_Response objects (may contain Requests_Exception or string responses as well)
|
264 |
-
*/
|
265 |
-
public function request_multiple($requests, $options) {
|
266 |
-
$responses = array();
|
267 |
-
$class = get_class($this);
|
268 |
-
foreach ($requests as $id => $request) {
|
269 |
-
try {
|
270 |
-
$handler = new $class();
|
271 |
-
$responses[$id] = $handler->request($request['url'], $request['headers'], $request['data'], $request['options']);
|
272 |
-
|
273 |
-
$request['options']['hooks']->dispatch('transport.internal.parse_response', array(&$responses[$id], $request));
|
274 |
-
}
|
275 |
-
catch (Requests_Exception $e) {
|
276 |
-
$responses[$id] = $e;
|
277 |
-
}
|
278 |
-
|
279 |
-
if (!is_string($responses[$id])) {
|
280 |
-
$request['options']['hooks']->dispatch('multiple.request.complete', array(&$responses[$id], $id));
|
281 |
-
}
|
282 |
-
}
|
283 |
-
|
284 |
-
return $responses;
|
285 |
-
}
|
286 |
-
|
287 |
-
/**
|
288 |
-
* Retrieve the encodings we can accept
|
289 |
-
*
|
290 |
-
* @return string Accept-Encoding header value
|
291 |
-
*/
|
292 |
-
protected static function accept_encoding() {
|
293 |
-
$type = array();
|
294 |
-
if (function_exists('gzinflate')) {
|
295 |
-
$type[] = 'deflate;q=1.0';
|
296 |
-
}
|
297 |
-
|
298 |
-
if (function_exists('gzuncompress')) {
|
299 |
-
$type[] = 'compress;q=0.5';
|
300 |
-
}
|
301 |
-
|
302 |
-
$type[] = 'gzip;q=0.5';
|
303 |
-
|
304 |
-
return implode(', ', $type);
|
305 |
-
}
|
306 |
-
|
307 |
-
/**
|
308 |
-
* Format a URL given GET data
|
309 |
-
*
|
310 |
-
* @param array $url_parts
|
311 |
-
* @param array|object $data Data to build query using, see {@see http://php.net/http_build_query}
|
312 |
-
* @return string URL with data
|
313 |
-
*/
|
314 |
-
protected static function format_get($url_parts, $data) {
|
315 |
-
if (!empty($data)) {
|
316 |
-
if (empty($url_parts['query']))
|
317 |
-
$url_parts['query'] = '';
|
318 |
-
|
319 |
-
$url_parts['query'] .= '&' . http_build_query($data, null, '&');
|
320 |
-
$url_parts['query'] = trim($url_parts['query'], '&');
|
321 |
-
}
|
322 |
-
if (isset($url_parts['path'])) {
|
323 |
-
if (isset($url_parts['query'])) {
|
324 |
-
$get = $url_parts['path'] . '?' . $url_parts['query'];
|
325 |
-
}
|
326 |
-
else {
|
327 |
-
$get = $url_parts['path'];
|
328 |
-
}
|
329 |
-
}
|
330 |
-
else {
|
331 |
-
$get = '/';
|
332 |
-
}
|
333 |
-
return $get;
|
334 |
-
}
|
335 |
-
|
336 |
-
/**
|
337 |
-
* Error handler for stream_socket_client()
|
338 |
-
*
|
339 |
-
* @param int $errno Error number (e.g. E_WARNING)
|
340 |
-
* @param string $errstr Error message
|
341 |
-
*/
|
342 |
-
public function connect_error_handler($errno, $errstr) {
|
343 |
-
// Double-check we can handle it
|
344 |
-
if (($errno & E_WARNING) === 0 && ($errno & E_NOTICE) === 0) {
|
345 |
-
// Return false to indicate the default error handler should engage
|
346 |
-
return false;
|
347 |
-
}
|
348 |
-
|
349 |
-
$this->connect_error .= $errstr . "\n";
|
350 |
-
return true;
|
351 |
-
}
|
352 |
-
|
353 |
-
/**
|
354 |
-
* Verify the certificate against common name and subject alternative names
|
355 |
-
*
|
356 |
-
* Unfortunately, PHP doesn't check the certificate against the alternative
|
357 |
-
* names, leading things like 'https://www.github.com/' to be invalid.
|
358 |
-
* Instead
|
359 |
-
*
|
360 |
-
* @see http://tools.ietf.org/html/rfc2818#section-3.1 RFC2818, Section 3.1
|
361 |
-
*
|
362 |
-
* @throws Requests_Exception On failure to connect via TLS (`fsockopen.ssl.connect_error`)
|
363 |
-
* @throws Requests_Exception On not obtaining a match for the host (`fsockopen.ssl.no_match`)
|
364 |
-
* @param string $host Host name to verify against
|
365 |
-
* @param resource $context Stream context
|
366 |
-
* @return bool
|
367 |
-
*/
|
368 |
-
public function verify_certificate_from_context($host, $context) {
|
369 |
-
$meta = stream_context_get_options($context);
|
370 |
-
|
371 |
-
// If we don't have SSL options, then we couldn't make the connection at
|
372 |
-
// all
|
373 |
-
if (empty($meta) || empty($meta['ssl']) || empty($meta['ssl']['peer_certificate'])) {
|
374 |
-
throw new Requests_Exception(rtrim($this->connect_error), 'ssl.connect_error');
|
375 |
-
}
|
376 |
-
|
377 |
-
$cert = openssl_x509_parse($meta['ssl']['peer_certificate']);
|
378 |
-
|
379 |
-
return Requests_SSL::verify_certificate($host, $cert);
|
380 |
-
}
|
381 |
-
|
382 |
-
/**
|
383 |
-
* Whether this transport is valid
|
384 |
-
*
|
385 |
-
* @codeCoverageIgnore
|
386 |
-
* @return boolean True if the transport is valid, false otherwise.
|
387 |
-
*/
|
388 |
-
public static function test($capabilities = array()) {
|
389 |
-
if (!function_exists('fsockopen'))
|
390 |
-
return false;
|
391 |
-
|
392 |
-
// If needed, check that streams support SSL
|
393 |
-
if (isset( $capabilities['ssl'] ) && $capabilities['ssl']) {
|
394 |
-
if (!extension_loaded('openssl') || !function_exists('openssl_x509_parse'))
|
395 |
-
return false;
|
396 |
-
|
397 |
-
// Currently broken, thanks to https://github.com/facebook/hhvm/issues/2156
|
398 |
-
if (defined('HHVM_VERSION'))
|
399 |
-
return false;
|
400 |
-
}
|
401 |
-
|
402 |
-
return true;
|
403 |
-
}
|
404 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Utility/CaseInsensitiveDictionary.php
DELETED
@@ -1,91 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Case-insensitive dictionary, suitable for HTTP headers
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Utilities
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Case-insensitive dictionary, suitable for HTTP headers
|
11 |
-
*
|
12 |
-
* @package Requests
|
13 |
-
* @subpackage Utilities
|
14 |
-
*/
|
15 |
-
class Requests_Utility_CaseInsensitiveDictionary implements ArrayAccess, IteratorAggregate {
|
16 |
-
/**
|
17 |
-
* Actual item data
|
18 |
-
*
|
19 |
-
* @var array
|
20 |
-
*/
|
21 |
-
protected $data = array();
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Check if the given item exists
|
25 |
-
*
|
26 |
-
* @param string $key Item key
|
27 |
-
* @return boolean Does the item exist?
|
28 |
-
*/
|
29 |
-
public function offsetExists($key) {
|
30 |
-
$key = strtolower($key);
|
31 |
-
return isset($this->data[$key]);
|
32 |
-
}
|
33 |
-
|
34 |
-
/**
|
35 |
-
* Get the value for the item
|
36 |
-
*
|
37 |
-
* @param string $key Item key
|
38 |
-
* @return string Item value
|
39 |
-
*/
|
40 |
-
public function offsetGet($key) {
|
41 |
-
$key = strtolower($key);
|
42 |
-
if (!isset($this->data[$key]))
|
43 |
-
return null;
|
44 |
-
|
45 |
-
return $this->data[$key];
|
46 |
-
}
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Set the given item
|
50 |
-
*
|
51 |
-
* @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
|
52 |
-
*
|
53 |
-
* @param string $key Item name
|
54 |
-
* @param string $value Item value
|
55 |
-
*/
|
56 |
-
public function offsetSet($key, $value) {
|
57 |
-
if ($key === null) {
|
58 |
-
throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
|
59 |
-
}
|
60 |
-
|
61 |
-
$key = strtolower($key);
|
62 |
-
$this->data[$key] = $value;
|
63 |
-
}
|
64 |
-
|
65 |
-
/**
|
66 |
-
* Unset the given header
|
67 |
-
*
|
68 |
-
* @param string $key
|
69 |
-
*/
|
70 |
-
public function offsetUnset($key) {
|
71 |
-
unset($this->data[strtolower($key)]);
|
72 |
-
}
|
73 |
-
|
74 |
-
/**
|
75 |
-
* Get an iterator for the data
|
76 |
-
*
|
77 |
-
* @return ArrayIterator
|
78 |
-
*/
|
79 |
-
public function getIterator() {
|
80 |
-
return new ArrayIterator($this->data);
|
81 |
-
}
|
82 |
-
|
83 |
-
/**
|
84 |
-
* Get the headers as an array
|
85 |
-
*
|
86 |
-
* @return array Header data
|
87 |
-
*/
|
88 |
-
public function getAll() {
|
89 |
-
return $this->data;
|
90 |
-
}
|
91 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/library/Requests/Utility/FilteredIterator.php
DELETED
@@ -1,38 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Iterator for arrays requiring filtered values
|
4 |
-
*
|
5 |
-
* @package Requests
|
6 |
-
* @subpackage Utilities
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Iterator for arrays requiring filtered values
|
11 |
-
*
|
12 |
-
* @package Requests
|
13 |
-
* @subpackage Utilities
|
14 |
-
*/
|
15 |
-
class Requests_Utility_FilteredIterator extends ArrayIterator {
|
16 |
-
/**
|
17 |
-
* Create a new iterator
|
18 |
-
*
|
19 |
-
* @param array $data
|
20 |
-
* @param callable $callback Callback to be called on each value
|
21 |
-
*/
|
22 |
-
public function __construct($data, $callback) {
|
23 |
-
parent::__construct($data);
|
24 |
-
|
25 |
-
$this->callback = $callback;
|
26 |
-
}
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Get the current item's value after filtering
|
30 |
-
*
|
31 |
-
* @return string
|
32 |
-
*/
|
33 |
-
public function current() {
|
34 |
-
$value = parent::current();
|
35 |
-
$value = call_user_func($this->callback, $value);
|
36 |
-
return $value;
|
37 |
-
}
|
38 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/package.xml.tpl
DELETED
@@ -1,60 +0,0 @@
|
|
1 |
-
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
-
<package packagerversion="1.8.0" version="2.0"
|
3 |
-
xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
4 |
-
xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
|
5 |
-
http://pear.php.net/dtd/tasks-1.0.xsd
|
6 |
-
http://pear.php.net/dtd/package-2.0
|
7 |
-
http://pear.php.net/dtd/package-2.0.xsd">
|
8 |
-
<name>Requests</name>
|
9 |
-
<channel>pear.ryanmccue.info</channel>
|
10 |
-
<summary>A HTTP library written in PHP, for human beings.</summary>
|
11 |
-
<description>
|
12 |
-
Requests is a HTTP library written in PHP, for human beings. It is
|
13 |
-
roughly based on the API from the excellent Requests Python library.
|
14 |
-
Requests is ISC Licensed (similar to the new BSD license) and has
|
15 |
-
no dependencies.
|
16 |
-
</description>
|
17 |
-
<lead>
|
18 |
-
<name>Ryan McCue</name>
|
19 |
-
<user>rmccue</user>
|
20 |
-
<email>me+pear@ryanmccue dot info</email>
|
21 |
-
<active>yes</active>
|
22 |
-
</lead>
|
23 |
-
<date>{{ date }}</date>
|
24 |
-
<time>{{ time }}</time>
|
25 |
-
<version>
|
26 |
-
<release>{{ version }}</release>
|
27 |
-
<api>{{ api_version }}</api>
|
28 |
-
</version>
|
29 |
-
<stability>
|
30 |
-
<release>{{ stability }}</release>
|
31 |
-
<api>{{ stability }}</api>
|
32 |
-
</stability>
|
33 |
-
<license uri="https://github.com/rmccue/Requests/blob/master/LICENSE" filesource="LICENSE">ISC</license>
|
34 |
-
<notes>-</notes>
|
35 |
-
<contents>
|
36 |
-
<dir name="/">
|
37 |
-
<file name="CHANGELOG.md" role="doc" />
|
38 |
-
<file name="LICENSE" role="doc" />
|
39 |
-
<file name="README.md" role="doc" />
|
40 |
-
<dir name="library">
|
41 |
-
<file install-as="Requests.php" name="Requests.php" role="php" />
|
42 |
-
<dir name="Requests">
|
43 |
-
{{ files }}
|
44 |
-
</dir>
|
45 |
-
</dir>
|
46 |
-
<file name="library/Requests/Transport/cacert.pem" install-as="library/Requests/Transport/cacert.pem" role="data" />
|
47 |
-
</dir>
|
48 |
-
</contents>
|
49 |
-
<dependencies>
|
50 |
-
<required>
|
51 |
-
<php>
|
52 |
-
<min>5.2.0</min>
|
53 |
-
</php>
|
54 |
-
<pearinstaller>
|
55 |
-
<min>1.4.0</min>
|
56 |
-
</pearinstaller>
|
57 |
-
</required>
|
58 |
-
</dependencies>
|
59 |
-
<phprelease />
|
60 |
-
</package>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/tests/Auth/Basic.php
DELETED
@@ -1,87 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class RequestsTest_Auth_Basic extends PHPUnit_Framework_TestCase {
|
4 |
-
public static function transportProvider() {
|
5 |
-
$transports = array(
|
6 |
-
array('Requests_Transport_fsockopen'),
|
7 |
-
array('Requests_Transport_cURL'),
|
8 |
-
);
|
9 |
-
return $transports;
|
10 |
-
}
|
11 |
-
|
12 |
-
/**
|
13 |
-
* @dataProvider transportProvider
|
14 |
-
*/
|
15 |
-
public function testUsingArray($transport) {
|
16 |
-
if (!call_user_func(array($transport, 'test'))) {
|
17 |
-
$this->markTestSkipped($transport . ' is not available');
|
18 |
-
return;
|
19 |
-
}
|
20 |
-
|
21 |
-
$options = array(
|
22 |
-
'auth' => array('user', 'passwd'),
|
23 |
-
'transport' => $transport,
|
24 |
-
);
|
25 |
-
$request = Requests::get(httpbin('/basic-auth/user/passwd'), array(), $options);
|
26 |
-
$this->assertEquals(200, $request->status_code);
|
27 |
-
|
28 |
-
$result = json_decode($request->body);
|
29 |
-
$this->assertEquals(true, $result->authenticated);
|
30 |
-
$this->assertEquals('user', $result->user);
|
31 |
-
}
|
32 |
-
|
33 |
-
/**
|
34 |
-
* @dataProvider transportProvider
|
35 |
-
*/
|
36 |
-
public function testUsingInstantiation($transport) {
|
37 |
-
if (!call_user_func(array($transport, 'test'))) {
|
38 |
-
$this->markTestSkipped($transport . ' is not available');
|
39 |
-
return;
|
40 |
-
}
|
41 |
-
|
42 |
-
$options = array(
|
43 |
-
'auth' => new Requests_Auth_Basic(array('user', 'passwd')),
|
44 |
-
'transport' => $transport,
|
45 |
-
);
|
46 |
-
$request = Requests::get(httpbin('/basic-auth/user/passwd'), array(), $options);
|
47 |
-
$this->assertEquals(200, $request->status_code);
|
48 |
-
|
49 |
-
$result = json_decode($request->body);
|
50 |
-
$this->assertEquals(true, $result->authenticated);
|
51 |
-
$this->assertEquals('user', $result->user);
|
52 |
-
}
|
53 |
-
|
54 |
-
/**
|
55 |
-
* @dataProvider transportProvider
|
56 |
-
*/
|
57 |
-
public function testPOSTUsingInstantiation($transport) {
|
58 |
-
if (!call_user_func(array($transport, 'test'))) {
|
59 |
-
$this->markTestSkipped($transport . ' is not available');
|
60 |
-
return;
|
61 |
-
}
|
62 |
-
|
63 |
-
$options = array(
|
64 |
-
'auth' => new Requests_Auth_Basic(array('user', 'passwd')),
|
65 |
-
'transport' => $transport,
|
66 |
-
);
|
67 |
-
$data = 'test';
|
68 |
-
$request = Requests::post(httpbin('/post'), array(), $data, $options);
|
69 |
-
$this->assertEquals(200, $request->status_code);
|
70 |
-
|
71 |
-
$result = json_decode($request->body);
|
72 |
-
|
73 |
-
$auth = $result->headers->Authorization;
|
74 |
-
$auth = explode(' ', $auth);
|
75 |
-
|
76 |
-
$this->assertEquals(base64_encode('user:passwd'), $auth[1]);
|
77 |
-
$this->assertEquals('test', $result->data);
|
78 |
-
}
|
79 |
-
|
80 |
-
/**
|
81 |
-
* @expectedException Requests_Exception
|
82 |
-
*/
|
83 |
-
public function testMissingPassword() {
|
84 |
-
$auth = new Requests_Auth_Basic(array('user'));
|
85 |
-
}
|
86 |
-
|
87 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/tests/ChunkedEncoding.php
DELETED
@@ -1,68 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class RequestsTest_ChunkedDecoding extends PHPUnit_Framework_TestCase {
|
4 |
-
public static function chunkedProvider() {
|
5 |
-
return array(
|
6 |
-
array(
|
7 |
-
"25\r\nThis is the data in the first chunk\r\n\r\n1A\r\nand this is the second one\r\n0\r\n",
|
8 |
-
"This is the data in the first chunk\r\nand this is the second one"
|
9 |
-
),
|
10 |
-
array(
|
11 |
-
"02\r\nab\r\n04\r\nra\nc\r\n06\r\nadabra\r\n0\r\nnothing\n",
|
12 |
-
"abra\ncadabra"
|
13 |
-
),
|
14 |
-
array(
|
15 |
-
"02\r\nab\r\n04\r\nra\nc\r\n06\r\nadabra\r\n0c\r\n\nall we got\n",
|
16 |
-
"abra\ncadabra\nall we got\n"
|
17 |
-
),
|
18 |
-
);
|
19 |
-
}
|
20 |
-
|
21 |
-
/**
|
22 |
-
* @dataProvider chunkedProvider
|
23 |
-
*/
|
24 |
-
public function testChunked($body, $expected){
|
25 |
-
$transport = new MockTransport();
|
26 |
-
$transport->body = $body;
|
27 |
-
$transport->chunked = true;
|
28 |
-
|
29 |
-
$options = array(
|
30 |
-
'transport' => $transport
|
31 |
-
);
|
32 |
-
$response = Requests::get('http://example.com/', array(), $options);
|
33 |
-
|
34 |
-
$this->assertEquals($expected, $response->body);
|
35 |
-
}
|
36 |
-
|
37 |
-
/**
|
38 |
-
* Response says it's chunked, but actually isn't
|
39 |
-
*/
|
40 |
-
public function testNotActuallyChunked() {
|
41 |
-
$transport = new MockTransport();
|
42 |
-
$transport->body = 'Hello! This is a non-chunked response!';
|
43 |
-
$transport->chunked = true;
|
44 |
-
|
45 |
-
$options = array(
|
46 |
-
'transport' => $transport
|
47 |
-
);
|
48 |
-
$response = Requests::get('http://example.com/', array(), $options);
|
49 |
-
|
50 |
-
$this->assertEquals($transport->body, $response->body);
|
51 |
-
}
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Response says it's chunked and starts looking like it is, but turns out
|
55 |
-
* that they're lying to us
|
56 |
-
*/
|
57 |
-
public function testMixedChunkiness() {
|
58 |
-
$transport = new MockTransport();
|
59 |
-
$transport->body = "02\r\nab\r\nNot actually chunked!";
|
60 |
-
$transport->chunked = true;
|
61 |
-
|
62 |
-
$options = array(
|
63 |
-
'transport' => $transport
|
64 |
-
);
|
65 |
-
$response = Requests::get('http://example.com/', array(), $options);
|
66 |
-
$this->assertEquals($transport->body, $response->body);
|
67 |
-
}
|
68 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/tests/Cookies.php
DELETED
@@ -1,346 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class RequestsTest_Cookies extends PHPUnit_Framework_TestCase {
|
4 |
-
public function testBasicCookie() {
|
5 |
-
$cookie = new Requests_Cookie('requests-testcookie', 'testvalue');
|
6 |
-
|
7 |
-
$this->assertEquals('requests-testcookie', $cookie->name);
|
8 |
-
$this->assertEquals('testvalue', $cookie->value);
|
9 |
-
$this->assertEquals('testvalue', (string) $cookie);
|
10 |
-
|
11 |
-
$this->assertEquals('requests-testcookie=testvalue', $cookie->formatForHeader());
|
12 |
-
$this->assertEquals('requests-testcookie=testvalue', $cookie->formatForSetCookie());
|
13 |
-
}
|
14 |
-
|
15 |
-
public function testCookieWithAttributes() {
|
16 |
-
$attributes = array(
|
17 |
-
'httponly',
|
18 |
-
'path' => '/'
|
19 |
-
);
|
20 |
-
$cookie = new Requests_Cookie('requests-testcookie', 'testvalue', $attributes);
|
21 |
-
|
22 |
-
$this->assertEquals('requests-testcookie=testvalue', $cookie->formatForHeader());
|
23 |
-
$this->assertEquals('requests-testcookie=testvalue; httponly; path=/', $cookie->formatForSetCookie());
|
24 |
-
}
|
25 |
-
|
26 |
-
public function testEmptyCookieName() {
|
27 |
-
$cookie = Requests_Cookie::parse('test');
|
28 |
-
$this->assertEquals('', $cookie->name);
|
29 |
-
$this->assertEquals('test', $cookie->value);
|
30 |
-
}
|
31 |
-
|
32 |
-
public function testEmptyAttributes() {
|
33 |
-
$cookie = Requests_Cookie::parse('foo=bar; HttpOnly');
|
34 |
-
$this->assertTrue($cookie->attributes['httponly']);
|
35 |
-
}
|
36 |
-
|
37 |
-
public function testCookieJarSetter() {
|
38 |
-
$jar1 = new Requests_Cookie_Jar();
|
39 |
-
$jar1['requests-testcookie'] = 'testvalue';
|
40 |
-
|
41 |
-
$jar2 = new Requests_Cookie_Jar(array(
|
42 |
-
'requests-testcookie' => 'testvalue',
|
43 |
-
));
|
44 |
-
$this->assertEquals($jar1, $jar2);
|
45 |
-
}
|
46 |
-
|
47 |
-
public function testCookieJarUnsetter() {
|
48 |
-
$jar = new Requests_Cookie_Jar();
|
49 |
-
$jar['requests-testcookie'] = 'testvalue';
|
50 |
-
|
51 |
-
$this->assertEquals('testvalue', $jar['requests-testcookie']);
|
52 |
-
|
53 |
-
unset($jar['requests-testcookie']);
|
54 |
-
$this->assertEmpty($jar['requests-testcookie']);
|
55 |
-
$this->assertFalse(isset($jar['requests-testcookie']));
|
56 |
-
}
|
57 |
-
|
58 |
-
/**
|
59 |
-
* @expectedException Requests_Exception
|
60 |
-
*/
|
61 |
-
public function testCookieJarAsList() {
|
62 |
-
$cookies = new Requests_Cookie_Jar();
|
63 |
-
$cookies[] = 'requests-testcookie1=testvalue1';
|
64 |
-
}
|
65 |
-
|
66 |
-
public function testCookieJarIterator() {
|
67 |
-
$cookies = array(
|
68 |
-
'requests-testcookie1' => 'testvalue1',
|
69 |
-
'requests-testcookie2' => 'testvalue2',
|
70 |
-
);
|
71 |
-
$jar = new Requests_Cookie_Jar($cookies);
|
72 |
-
|
73 |
-
foreach ($jar as $key => $value) {
|
74 |
-
$this->assertEquals($cookies[$key], $value);
|
75 |
-
}
|
76 |
-
}
|
77 |
-
|
78 |
-
public function testReceivingCookies() {
|
79 |
-
$options = array(
|
80 |
-
'follow_redirects' => false,
|
81 |
-
);
|
82 |
-
$url = httpbin('/cookies/set?requests-testcookie=testvalue');
|
83 |
-
|
84 |
-
$response = Requests::get($url, array(), $options);
|
85 |
-
|
86 |
-
$cookie = $response->cookies['requests-testcookie'];
|
87 |
-
$this->assertNotEmpty( $cookie );
|
88 |
-
$this->assertEquals( 'testvalue', $cookie->value );
|
89 |
-
}
|
90 |
-
|
91 |
-
public function testPersistenceOnRedirect() {
|
92 |
-
$options = array(
|
93 |
-
'follow_redirects' => true,
|
94 |
-
);
|
95 |
-
$url = httpbin('/cookies/set?requests-testcookie=testvalue');
|
96 |
-
|
97 |
-
$response = Requests::get($url, array(), $options);
|
98 |
-
|
99 |
-
$cookie = $response->cookies['requests-testcookie'];
|
100 |
-
$this->assertNotEmpty( $cookie );
|
101 |
-
$this->assertEquals( 'testvalue', $cookie->value );
|
102 |
-
}
|
103 |
-
|
104 |
-
protected function setCookieRequest($cookies) {
|
105 |
-
$options = array(
|
106 |
-
'cookies' => $cookies,
|
107 |
-
);
|
108 |
-
$response = Requests::get(httpbin('/cookies/set'), array(), $options);
|
109 |
-
|
110 |
-
$data = json_decode($response->body, true);
|
111 |
-
$this->assertInternalType('array', $data);
|
112 |
-
$this->assertArrayHasKey('cookies', $data);
|
113 |
-
return $data['cookies'];
|
114 |
-
}
|
115 |
-
|
116 |
-
public function testSendingCookie() {
|
117 |
-
$cookies = array(
|
118 |
-
'requests-testcookie1' => 'testvalue1',
|
119 |
-
);
|
120 |
-
|
121 |
-
$data = $this->setCookieRequest($cookies);
|
122 |
-
|
123 |
-
$this->assertArrayHasKey('requests-testcookie1', $data);
|
124 |
-
$this->assertEquals('testvalue1', $data['requests-testcookie1']);
|
125 |
-
}
|
126 |
-
|
127 |
-
public function testSendingCookieWithJar() {
|
128 |
-
$cookies = new Requests_Cookie_Jar(array(
|
129 |
-
'requests-testcookie1' => 'testvalue1',
|
130 |
-
));
|
131 |
-
$data = $this->setCookieRequest($cookies);
|
132 |
-
|
133 |
-
$this->assertArrayHasKey('requests-testcookie1', $data);
|
134 |
-
$this->assertEquals('testvalue1', $data['requests-testcookie1']);
|
135 |
-
}
|
136 |
-
|
137 |
-
public function testSendingMultipleCookies() {
|
138 |
-
$cookies = array(
|
139 |
-
'requests-testcookie1' => 'testvalue1',
|
140 |
-
'requests-testcookie2' => 'testvalue2',
|
141 |
-
);
|
142 |
-
$data = $this->setCookieRequest($cookies);
|
143 |
-
|
144 |
-
$this->assertArrayHasKey('requests-testcookie1', $data);
|
145 |
-
$this->assertEquals('testvalue1', $data['requests-testcookie1']);
|
146 |
-
|
147 |
-
$this->assertArrayHasKey('requests-testcookie2', $data);
|
148 |
-
$this->assertEquals('testvalue2', $data['requests-testcookie2']);
|
149 |
-
}
|
150 |
-
|
151 |
-
public function testSendingMultipleCookiesWithJar() {
|
152 |
-
$cookies = new Requests_Cookie_Jar(array(
|
153 |
-
'requests-testcookie1' => 'testvalue1',
|
154 |
-
'requests-testcookie2' => 'testvalue2',
|
155 |
-
));
|
156 |
-
$data = $this->setCookieRequest($cookies);
|
157 |
-
|
158 |
-
$this->assertArrayHasKey('requests-testcookie1', $data);
|
159 |
-
$this->assertEquals('testvalue1', $data['requests-testcookie1']);
|
160 |
-
|
161 |
-
$this->assertArrayHasKey('requests-testcookie2', $data);
|
162 |
-
$this->assertEquals('testvalue2', $data['requests-testcookie2']);
|
163 |
-
}
|
164 |
-
|
165 |
-
public function testSendingPrebakedCookie() {
|
166 |
-
$cookies = new Requests_Cookie_Jar(array(
|
167 |
-
new Requests_Cookie('requests-testcookie', 'testvalue'),
|
168 |
-
));
|
169 |
-
$data = $this->setCookieRequest($cookies);
|
170 |
-
|
171 |
-
$this->assertArrayHasKey('requests-testcookie', $data);
|
172 |
-
$this->assertEquals('testvalue', $data['requests-testcookie']);
|
173 |
-
}
|
174 |
-
|
175 |
-
public function domainMatchProvider() {
|
176 |
-
return array(
|
177 |
-
array('example.com', 'example.com', true, true),
|
178 |
-
array('example.com', 'www.example.com', false, true),
|
179 |
-
array('example.com', 'example.net', false, false),
|
180 |
-
|
181 |
-
// Leading period
|
182 |
-
array('.example.com', 'example.com', true, true),
|
183 |
-
array('.example.com', 'www.example.com', false, true),
|
184 |
-
array('.example.com', 'example.net', false, false),
|
185 |
-
|
186 |
-
// Prefix, but not subdomain
|
187 |
-
array('example.com', 'notexample.com', false, false),
|
188 |
-
array('example.com', 'notexample.net', false, false),
|
189 |
-
|
190 |
-
// Reject IP address prefixes
|
191 |
-
array('127.0.0.1', '127.0.0.1', true, true),
|
192 |
-
array('127.0.0.1', 'abc.127.0.0.1', false, false),
|
193 |
-
array('127.0.0.1', 'example.com', false, false),
|
194 |
-
);
|
195 |
-
}
|
196 |
-
|
197 |
-
/**
|
198 |
-
* @dataProvider domainMatchProvider
|
199 |
-
*/
|
200 |
-
public function testDomainExactMatch($original, $check, $matches, $domain_matches) {
|
201 |
-
$attributes = new Requests_Utility_CaseInsensitiveDictionary();
|
202 |
-
$attributes['domain'] = $original;
|
203 |
-
$cookie = new Requests_Cookie('requests-testcookie', 'testvalue', $attributes);
|
204 |
-
$this->assertEquals($matches, $cookie->domainMatches($check));
|
205 |
-
}
|
206 |
-
|
207 |
-
/**
|
208 |
-
* @dataProvider domainMatchProvider
|
209 |
-
*/
|
210 |
-
public function testDomainMatch($original, $check, $matches, $domain_matches) {
|
211 |
-
$attributes = new Requests_Utility_CaseInsensitiveDictionary();
|
212 |
-
$attributes['domain'] = $original;
|
213 |
-
$flags = array(
|
214 |
-
'host-only' => false
|
215 |
-
);
|
216 |
-
$cookie = new Requests_Cookie('requests-testcookie', 'testvalue', $attributes, $flags);
|
217 |
-
$this->assertEquals($domain_matches, $cookie->domainMatches($check));
|
218 |
-
}
|
219 |
-
|
220 |
-
public function pathMatchProvider() {
|
221 |
-
return array(
|
222 |
-
array('/', '/', true),
|
223 |
-
|
224 |
-
array('/', '/test', true),
|
225 |
-
array('/', '/test/', true),
|
226 |
-
|
227 |
-
array('/test', '/', false),
|
228 |
-
array('/test', '/test', true),
|
229 |
-
array('/test', '/testing', false),
|
230 |
-
array('/test', '/test/', true),
|
231 |
-
array('/test', '/test/ing', true),
|
232 |
-
array('/test', '/test/ing/', true),
|
233 |
-
|
234 |
-
array('/test/', '/test/', true),
|
235 |
-
array('/test/', '/', false),
|
236 |
-
);
|
237 |
-
}
|
238 |
-
|
239 |
-
/**
|
240 |
-
* @dataProvider pathMatchProvider
|
241 |
-
*/
|
242 |
-
public function testPathMatch($original, $check, $matches) {
|
243 |
-
$attributes = new Requests_Utility_CaseInsensitiveDictionary();
|
244 |
-
$attributes['path'] = $original;
|
245 |
-
$cookie = new Requests_Cookie('requests-testcookie', 'testvalue', $attributes);
|
246 |
-
$this->assertEquals($matches, $cookie->pathMatches($check));
|
247 |
-
}
|
248 |
-
|
249 |
-
public function urlMatchProvider() {
|
250 |
-
return array(
|
251 |
-
// Domain handling
|
252 |
-
array( 'example.com', '/', 'http://example.com/', true, true ),
|
253 |
-
array( 'example.com', '/', 'http://www.example.com/', false, true ),
|
254 |
-
array( 'example.com', '/', 'http://example.net/', false, false ),
|
255 |
-
array( 'example.com', '/', 'http://www.example.net/', false, false ),
|
256 |
-
|
257 |
-
// /test
|
258 |
-
array( 'example.com', '/test', 'http://example.com/', false, false ),
|
259 |
-
array( 'example.com', '/test', 'http://www.example.com/', false, false ),
|
260 |
-
|
261 |
-
array( 'example.com', '/test', 'http://example.com/test', true, true ),
|
262 |
-
array( 'example.com', '/test', 'http://www.example.com/test', false, true ),
|
263 |
-
|
264 |
-
array( 'example.com', '/test', 'http://example.com/testing', false, false ),
|
265 |
-
array( 'example.com', '/test', 'http://www.example.com/testing', false, false ),
|
266 |
-
|
267 |
-
array( 'example.com', '/test', 'http://example.com/test/', true, true ),
|
268 |
-
array( 'example.com', '/test', 'http://www.example.com/test/', false, true ),
|
269 |
-
|
270 |
-
// /test/
|
271 |
-
array( 'example.com', '/test/', 'http://example.com/', false, false ),
|
272 |
-
array( 'example.com', '/test/', 'http://www.example.com/', false, false ),
|
273 |
-
);
|
274 |
-
}
|
275 |
-
|
276 |
-
/**
|
277 |
-
* @depends testDomainExactMatch
|
278 |
-
* @depends testPathMatch
|
279 |
-
* @dataProvider urlMatchProvider
|
280 |
-
*/
|
281 |
-
public function testUrlExactMatch($domain, $path, $check, $matches, $domain_matches) {
|
282 |
-
$attributes = new Requests_Utility_CaseInsensitiveDictionary();
|
283 |
-
$attributes['domain'] = $domain;
|
284 |
-
$attributes['path'] = $path;
|
285 |
-
$check = new Requests_IRI($check);
|
286 |
-
$cookie = new Requests_Cookie('requests-testcookie', 'testvalue', $attributes);
|
287 |
-
$this->assertEquals($matches, $cookie->uriMatches($check));
|
288 |
-
}
|
289 |
-
|
290 |
-
/**
|
291 |
-
* @depends testDomainMatch
|
292 |
-
* @depends testPathMatch
|
293 |
-
* @dataProvider urlMatchProvider
|
294 |
-
*/
|
295 |
-
public function testUrlMatch($domain, $path, $check, $matches, $domain_matches) {
|
296 |
-
$attributes = new Requests_Utility_CaseInsensitiveDictionary();
|
297 |
-
$attributes['domain'] = $domain;
|
298 |
-
$attributes['path'] = $path;
|
299 |
-
$flags = array(
|
300 |
-
'host-only' => false
|
301 |
-
);
|
302 |
-
$check = new Requests_IRI($check);
|
303 |
-
$cookie = new Requests_Cookie('requests-testcookie', 'testvalue', $attributes, $flags);
|
304 |
-
$this->assertEquals($domain_matches, $cookie->uriMatches($check));
|
305 |
-
}
|
306 |
-
|
307 |
-
public function testUrlMatchSecure() {
|
308 |
-
$attributes = new Requests_Utility_CaseInsensitiveDictionary();
|
309 |
-
$attributes['domain'] = 'example.com';
|
310 |
-
$attributes['path'] = '/';
|
311 |
-
$attributes['secure'] = true;
|
312 |
-
$flags = array(
|
313 |
-
'host-only' => false,
|
314 |
-
);
|
315 |
-
$cookie = new Requests_Cookie('requests-testcookie', 'testvalue', $attributes, $flags);
|
316 |
-
|
317 |
-
$this->assertTrue($cookie->uriMatches(new Requests_IRI('https://example.com/')));
|
318 |
-
$this->assertFalse($cookie->uriMatches(new Requests_IRI('http://example.com/')));
|
319 |
-
|
320 |
-
// Double-check host-only
|
321 |
-
$this->assertTrue($cookie->uriMatches(new Requests_IRI('https://www.example.com/')));
|
322 |
-
$this->assertFalse($cookie->uriMatches(new Requests_IRI('http://www.example.com/')));
|
323 |
-
}
|
324 |
-
|
325 |
-
/**
|
326 |
-
* Manually set cookies without a domain/path set should always be valid
|
327 |
-
*
|
328 |
-
* Cookies parsed from headers internally in Requests will always have a
|
329 |
-
* domain/path set, but those created manually will not. Manual cookies
|
330 |
-
* should be regarded as "global" cookies (that is, set for `.`)
|
331 |
-
*/
|
332 |
-
public function testUrlMatchManuallySet() {
|
333 |
-
$cookie = new Requests_Cookie('requests-testcookie', 'testvalue');
|
334 |
-
$this->assertTrue($cookie->domainMatches('example.com'));
|
335 |
-
$this->assertTrue($cookie->domainMatches('example.net'));
|
336 |
-
$this->assertTrue($cookie->pathMatches('/'));
|
337 |
-
$this->assertTrue($cookie->pathMatches('/test'));
|
338 |
-
$this->assertTrue($cookie->pathMatches('/test/'));
|
339 |
-
$this->assertTrue($cookie->uriMatches(new Requests_IRI('http://example.com/')));
|
340 |
-
$this->assertTrue($cookie->uriMatches(new Requests_IRI('http://example.com/test')));
|
341 |
-
$this->assertTrue($cookie->uriMatches(new Requests_IRI('http://example.com/test/')));
|
342 |
-
$this->assertTrue($cookie->uriMatches(new Requests_IRI('http://example.net/')));
|
343 |
-
$this->assertTrue($cookie->uriMatches(new Requests_IRI('http://example.net/test')));
|
344 |
-
$this->assertTrue($cookie->uriMatches(new Requests_IRI('http://example.net/test/')));
|
345 |
-
}
|
346 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/tests/Encoding.php
DELETED
@@ -1,94 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class RequestsTests_Encoding extends PHPUnit_Framework_TestCase {
|
4 |
-
protected static function mapData($type, $data) {
|
5 |
-
$real_data = array();
|
6 |
-
foreach ($data as $value) {
|
7 |
-
$key = $type . ': ' . $value[0];
|
8 |
-
$real_data[$key] = $value;
|
9 |
-
}
|
10 |
-
return $real_data;
|
11 |
-
}
|
12 |
-
|
13 |
-
public static function gzipData() {
|
14 |
-
return array(
|
15 |
-
array(
|
16 |
-
'foobar',
|
17 |
-
"\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x4b\xcb\xcf\x4f\x4a"
|
18 |
-
. "\x2c\x02\x00\x95\x1f\xf6\x9e\x06\x00\x00\x00",
|
19 |
-
),
|
20 |
-
array(
|
21 |
-
'Requests for PHP',
|
22 |
-
"\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x0b\x4a\x2d\x2c\x4d"
|
23 |
-
. "\x2d\x2e\x29\x56\x48\xcb\x2f\x52\x08\xf0\x08\x00\x00\x58\x35"
|
24 |
-
. "\x18\x17\x10\x00\x00\x00",
|
25 |
-
),
|
26 |
-
);
|
27 |
-
}
|
28 |
-
|
29 |
-
public static function deflateData() {
|
30 |
-
return array(
|
31 |
-
array(
|
32 |
-
'foobar',
|
33 |
-
"\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x78\x9c\x4b\xcb\xcf"
|
34 |
-
. "\x4f\x4a\x2c\x02\x00\x08\xab\x02\x7a"
|
35 |
-
),
|
36 |
-
array(
|
37 |
-
'Requests for PHP',
|
38 |
-
"\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x78\x9c\x0b\x4a\x2d"
|
39 |
-
. "\x2c\x4d\x2d\x2e\x29\x56\x48\xcb\x2f\x52\x08\xf0\x08\x00\x00"
|
40 |
-
. "\x34\x68\x05\xcc"
|
41 |
-
)
|
42 |
-
);
|
43 |
-
}
|
44 |
-
public static function deflateWithoutHeadersData() {
|
45 |
-
return array(
|
46 |
-
array(
|
47 |
-
'foobar',
|
48 |
-
"\x78\x9c\x4b\xcb\xcf\x4f\x4a\x2c\x02\x00\x08\xab\x02\x7a"
|
49 |
-
),
|
50 |
-
array(
|
51 |
-
'Requests for PHP',
|
52 |
-
"\x78\x9c\x0b\x4a\x2d\x2c\x4d\x2d\x2e\x29\x56\x48\xcb\x2f\x52"
|
53 |
-
. "\x08\xf0\x08\x00\x00\x34\x68\x05\xcc"
|
54 |
-
)
|
55 |
-
);
|
56 |
-
}
|
57 |
-
|
58 |
-
public static function encodedData() {
|
59 |
-
$datasets = array();
|
60 |
-
$datasets['gzip'] = self::gzipData();
|
61 |
-
$datasets['deflate'] = self::deflateData();
|
62 |
-
$datasets['deflate without zlib headers'] = self::deflateWithoutHeadersData();
|
63 |
-
|
64 |
-
$data = array();
|
65 |
-
foreach ($datasets as $key => $set) {
|
66 |
-
$real_set = self::mapData($key, $set);
|
67 |
-
$data = array_merge($data, $real_set);
|
68 |
-
}
|
69 |
-
return $data;
|
70 |
-
}
|
71 |
-
|
72 |
-
/**
|
73 |
-
* @dataProvider encodedData
|
74 |
-
*/
|
75 |
-
public function testDecompress($original, $encoded) {
|
76 |
-
$decoded = Requests::decompress($encoded);
|
77 |
-
$this->assertEquals($original, $decoded);
|
78 |
-
}
|
79 |
-
|
80 |
-
/**
|
81 |
-
* @dataProvider encodedData
|
82 |
-
*/
|
83 |
-
public function testCompatibleInflate($original, $encoded) {
|
84 |
-
$decoded = Requests::compatible_gzinflate($encoded);
|
85 |
-
$this->assertEquals($original, $decoded);
|
86 |
-
}
|
87 |
-
|
88 |
-
protected function bin2hex($field) {
|
89 |
-
$field = bin2hex($field);
|
90 |
-
$field = chunk_split($field,2,"\\x");
|
91 |
-
$field = "\\x" . substr($field,0,-2);
|
92 |
-
return $field;
|
93 |
-
}
|
94 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/tests/IDNAEncoder.php
DELETED
@@ -1,102 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class RequestsTest_IDNAEncoder extends PHPUnit_Framework_TestCase {
|
4 |
-
public static function specExamples() {
|
5 |
-
return array(
|
6 |
-
array(
|
7 |
-
"\xe4\xbb\x96\xe4\xbb\xac\xe4\xb8\xba\xe4\xbb\x80\xe4\xb9\x88\xe4\xb8\x8d\xe8\xaf\xb4\xe4\xb8\xad\xe6\x96\x87",
|
8 |
-
"xn--ihqwcrb4cv8a8dqg056pqjye"
|
9 |
-
),
|
10 |
-
array(
|
11 |
-
"\x33\xe5\xb9\xb4\x42\xe7\xb5\x84\xe9\x87\x91\xe5\x85\xab\xe5\x85\x88\xe7\x94\x9f",
|
12 |
-
"xn--3B-ww4c5e180e575a65lsy2b",
|
13 |
-
)
|
14 |
-
);
|
15 |
-
}
|
16 |
-
|
17 |
-
/**
|
18 |
-
* @dataProvider specExamples
|
19 |
-
*/
|
20 |
-
public function testEncoding($data, $expected) {
|
21 |
-
$result = Requests_IDNAEncoder::encode($data);
|
22 |
-
$this->assertEquals($expected, $result);
|
23 |
-
}
|
24 |
-
|
25 |
-
/**
|
26 |
-
* @expectedException Requests_Exception
|
27 |
-
*/
|
28 |
-
public function testASCIITooLong() {
|
29 |
-
$data = str_repeat("abcd", 20);
|
30 |
-
$result = Requests_IDNAEncoder::encode($data);
|
31 |
-
}
|
32 |
-
|
33 |
-
/**
|
34 |
-
* @expectedException Requests_Exception
|
35 |
-
*/
|
36 |
-
public function testEncodedTooLong() {
|
37 |
-
$data = str_repeat("\xe4\xbb\x96", 60);
|
38 |
-
$result = Requests_IDNAEncoder::encode($data);
|
39 |
-
}
|
40 |
-
|
41 |
-
/**
|
42 |
-
* @expectedException Requests_Exception
|
43 |
-
*/
|
44 |
-
public function testAlreadyPrefixed() {
|
45 |
-
$result = Requests_IDNAEncoder::encode("xn--\xe4\xbb\x96");
|
46 |
-
}
|
47 |
-
|
48 |
-
public function testASCIICharacter() {
|
49 |
-
$result = Requests_IDNAEncoder::encode("a");
|
50 |
-
$this->assertEquals('a', $result);
|
51 |
-
}
|
52 |
-
|
53 |
-
public function testTwoByteCharacter() {
|
54 |
-
$result = Requests_IDNAEncoder::encode("\xc2\xb6"); // Pilcrow character
|
55 |
-
$this->assertEquals('xn--tba', $result);
|
56 |
-
}
|
57 |
-
|
58 |
-
public function testThreeByteCharacter() {
|
59 |
-
$result = Requests_IDNAEncoder::encode("\xe2\x82\xac"); // Euro symbol
|
60 |
-
$this->assertEquals('xn--lzg', $result);
|
61 |
-
}
|
62 |
-
|
63 |
-
public function testFourByteCharacter() {
|
64 |
-
$result = Requests_IDNAEncoder::encode("\xf0\xa4\xad\xa2"); // Chinese symbol?
|
65 |
-
$this->assertEquals('xn--ww6j', $result);
|
66 |
-
}
|
67 |
-
|
68 |
-
/**
|
69 |
-
* @expectedException Requests_Exception
|
70 |
-
*/
|
71 |
-
public function testFiveByteCharacter() {
|
72 |
-
$result = Requests_IDNAEncoder::encode("\xfb\xb6\xb6\xb6\xb6");
|
73 |
-
}
|
74 |
-
|
75 |
-
/**
|
76 |
-
* @expectedException Requests_Exception
|
77 |
-
*/
|
78 |
-
public function testSixByteCharacter() {
|
79 |
-
$result = Requests_IDNAEncoder::encode("\xfd\xb6\xb6\xb6\xb6\xb6");
|
80 |
-
}
|
81 |
-
|
82 |
-
/**
|
83 |
-
* @expectedException Requests_Exception
|
84 |
-
*/
|
85 |
-
public function testInvalidASCIICharacterWithMultibyte() {
|
86 |
-
$result = Requests_IDNAEncoder::encode("\0\xc2\xb6");
|
87 |
-
}
|
88 |
-
|
89 |
-
/**
|
90 |
-
* @expectedException Requests_Exception
|
91 |
-
*/
|
92 |
-
public function testUnfinishedMultibyte() {
|
93 |
-
$result = Requests_IDNAEncoder::encode("\xc2");
|
94 |
-
}
|
95 |
-
|
96 |
-
/**
|
97 |
-
* @expectedException Requests_Exception
|
98 |
-
*/
|
99 |
-
public function testPartialMultibyte() {
|
100 |
-
$result = Requests_IDNAEncoder::encode("\xc2\xc2\xb6");
|
101 |
-
}
|
102 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/tests/IRI.php
DELETED
@@ -1,418 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* IRI test cases
|
5 |
-
*
|
6 |
-
* Copyright (c) 2008-2010 Geoffrey Sneddon.
|
7 |
-
* All rights reserved.
|
8 |
-
*
|
9 |
-
* Redistribution and use in source and binary forms, with or without
|
10 |
-
* modification, are permitted provided that the following conditions are met:
|
11 |
-
*
|
12 |
-
* * Redistributions of source code must retain the above copyright notice,
|
13 |
-
* this list of conditions and the following disclaimer.
|
14 |
-
*
|
15 |
-
* * Redistributions in binary form must reproduce the above copyright notice,
|
16 |
-
* this list of conditions and the following disclaimer in the documentation
|
17 |
-
* and/or other materials provided with the distribution.
|
18 |
-
*
|
19 |
-
* * Neither the name of the SimplePie Team nor the names of its contributors
|
20 |
-
* may be used to endorse or promote products derived from this software
|
21 |
-
* without specific prior written permission.
|
22 |
-
*
|
23 |
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
24 |
-
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
25 |
-
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
26 |
-
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
|
27 |
-
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
28 |
-
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
29 |
-
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
30 |
-
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
31 |
-
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
32 |
-
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
33 |
-
* POSSIBILITY OF SUCH DAMAGE.
|
34 |
-
*
|
35 |
-
* @package IRI
|
36 |
-
* @author Geoffrey Sneddon
|
37 |
-
* @copyright 2008-2010 Geoffrey Sneddon
|
38 |
-
* @license http://www.opensource.org/licenses/bsd-license.php
|
39 |
-
* @link http://hg.gsnedders.com/iri/
|
40 |
-
*
|
41 |
-
*/
|
42 |
-
|
43 |
-
class RequestsTest_IRI extends PHPUnit_Framework_TestCase
|
44 |
-
{
|
45 |
-
public static function rfc3986_tests()
|
46 |
-
{
|
47 |
-
return array(
|
48 |
-
// Normal
|
49 |
-
array('g:h', 'g:h'),
|
50 |
-
array('g', 'http://a/b/c/g'),
|
51 |
-
array('./g', 'http://a/b/c/g'),
|
52 |
-
array('g/', 'http://a/b/c/g/'),
|
53 |
-
array('/g', 'http://a/g'),
|
54 |
-
array('//g', 'http://g'),
|
55 |
-
array('?y', 'http://a/b/c/d;p?y'),
|
56 |
-
array('g?y', 'http://a/b/c/g?y'),
|
57 |
-
array('#s', 'http://a/b/c/d;p?q#s'),
|
58 |
-
array('g#s', 'http://a/b/c/g#s'),
|
59 |
-
array('g?y#s', 'http://a/b/c/g?y#s'),
|
60 |
-
array(';x', 'http://a/b/c/;x'),
|
61 |
-
array('g;x', 'http://a/b/c/g;x'),
|
62 |
-
array('g;x?y#s', 'http://a/b/c/g;x?y#s'),
|
63 |
-
array('', 'http://a/b/c/d;p?q'),
|
64 |
-
array('.', 'http://a/b/c/'),
|
65 |
-
array('./', 'http://a/b/c/'),
|
66 |
-
array('..', 'http://a/b/'),
|
67 |
-
array('../', 'http://a/b/'),
|
68 |
-
array('../g', 'http://a/b/g'),
|
69 |
-
array('../..', 'http://a'),
|
70 |
-
array('../../', 'http://a'),
|
71 |
-
array('../../g', 'http://a/g'),
|
72 |
-
// Abnormal
|
73 |
-
array('../../../g', 'http://a/g'),
|
74 |
-
array('../../../../g', 'http://a/g'),
|
75 |
-
array('/./g', 'http://a/g'),
|
76 |
-
array('/../g', 'http://a/g'),
|
77 |
-
array('g.', 'http://a/b/c/g.'),
|
78 |
-
array('.g', 'http://a/b/c/.g'),
|
79 |
-
array('g..', 'http://a/b/c/g..'),
|
80 |
-
array('..g', 'http://a/b/c/..g'),
|
81 |
-
array('./../g', 'http://a/b/g'),
|
82 |
-
array('./g/.', 'http://a/b/c/g/'),
|
83 |
-
array('g/./h', 'http://a/b/c/g/h'),
|
84 |
-
array('g/../h', 'http://a/b/c/h'),
|
85 |
-
array('g;x=1/./y', 'http://a/b/c/g;x=1/y'),
|
86 |
-
array('g;x=1/../y', 'http://a/b/c/y'),
|
87 |
-
array('g?y/./x', 'http://a/b/c/g?y/./x'),
|
88 |
-
array('g?y/../x', 'http://a/b/c/g?y/../x'),
|
89 |
-
array('g#s/./x', 'http://a/b/c/g#s/./x'),
|
90 |
-
array('g#s/../x', 'http://a/b/c/g#s/../x'),
|
91 |
-
array('http:g', 'http:g'),
|
92 |
-
);
|
93 |
-
}
|
94 |
-
|
95 |
-
/**
|
96 |
-
* @dataProvider rfc3986_tests
|
97 |
-
*/
|
98 |
-
public function testStringRFC3986($relative, $expected)
|
99 |
-
{
|
100 |
-
$base = new Requests_IRI('http://a/b/c/d;p?q');
|
101 |
-
$this->assertEquals($expected, Requests_IRI::absolutize($base, $relative)->iri);
|
102 |
-
$this->assertEquals($expected, (string) Requests_IRI::absolutize($base, $relative));
|
103 |
-
}
|
104 |
-
|
105 |
-
/**
|
106 |
-
* @dataProvider rfc3986_tests
|
107 |
-
*/
|
108 |
-
public function testBothStringRFC3986($relative, $expected)
|
109 |
-
{
|
110 |
-
$base = 'http://a/b/c/d;p?q';
|
111 |
-
$this->assertEquals($expected, Requests_IRI::absolutize($base, $relative)->iri);
|
112 |
-
$this->assertEquals($expected, (string) Requests_IRI::absolutize($base, $relative));
|
113 |
-
}
|
114 |
-
|
115 |
-
/**
|
116 |
-
* @dataProvider rfc3986_tests
|
117 |
-
*/
|
118 |
-
public function testObjectRFC3986($relative, $expected)
|
119 |
-
{
|
120 |
-
$base = new Requests_IRI('http://a/b/c/d;p?q');
|
121 |
-
$expected = new Requests_IRI($expected);
|
122 |
-
$this->assertEquals($expected, Requests_IRI::absolutize($base, $relative));
|
123 |
-
}
|
124 |
-
|
125 |
-
public static function sp_tests()
|
126 |
-
{
|
127 |
-
return array(
|
128 |
-
array('http://a/b/c/d', 'f%0o', 'http://a/b/c/f%250o'),
|
129 |
-
array('http://a/b/', 'c', 'http://a/b/c'),
|
130 |
-
array('http://a/', 'b', 'http://a/b'),
|
131 |
-
array('http://a/', '/b', 'http://a/b'),
|
132 |
-
array('http://a/b', 'c', 'http://a/c'),
|
133 |
-
array('http://a/b/', "c\x0Ad", 'http://a/b/c%0Ad'),
|
134 |
-
array('http://a/b/', "c\x0A\x0B", 'http://a/b/c%0A%0B'),
|
135 |
-
array('http://a/b/c', '//0', 'http://0'),
|
136 |
-
array('http://a/b/c', '0', 'http://a/b/0'),
|
137 |
-
array('http://a/b/c', '?0', 'http://a/b/c?0'),
|
138 |
-
array('http://a/b/c', '#0', 'http://a/b/c#0'),
|
139 |
-
array('http://0/b/c', 'd', 'http://0/b/d'),
|
140 |
-
array('http://a/b/c?0', 'd', 'http://a/b/d'),
|
141 |
-
array('http://a/b/c#0', 'd', 'http://a/b/d'),
|
142 |
-
array('http://example.com', '//example.net', 'http://example.net'),
|
143 |
-
array('http:g', 'a', 'http:a'),
|
144 |
-
);
|
145 |
-
}
|
146 |
-
|
147 |
-
/**
|
148 |
-
* @dataProvider sp_tests
|
149 |
-
*/
|
150 |
-
public function testStringSP($base, $relative, $expected)
|
151 |
-
{
|
152 |
-
$base = new Requests_IRI($base);
|
153 |
-
$this->assertEquals($expected, Requests_IRI::absolutize($base, $relative)->iri);
|
154 |
-
$this->assertEquals($expected, (string) Requests_IRI::absolutize($base, $relative));
|
155 |
-
}
|
156 |
-
|
157 |
-
/**
|
158 |
-
* @dataProvider sp_tests
|
159 |
-
*/
|
160 |
-
public function testObjectSP($base, $relative, $expected)
|
161 |
-
{
|
162 |
-
$base = new Requests_IRI($base);
|
163 |
-
$expected = new Requests_IRI($expected);
|
164 |
-
$this->assertEquals($expected, Requests_IRI::absolutize($base, $relative));
|
165 |
-
}
|
166 |
-
|
167 |
-
public static function absolutize_tests()
|
168 |
-
{
|
169 |
-
return array(
|
170 |
-
array('http://example.com/', 'foo/111:bar', 'http://example.com/foo/111:bar'),
|
171 |
-
array('http://example.com/#foo', '', 'http://example.com'),
|
172 |
-
);
|
173 |
-
}
|
174 |
-
|
175 |
-
/**
|
176 |
-
* @dataProvider absolutize_tests
|
177 |
-
*/
|
178 |
-
public function testAbsolutizeString($base, $relative, $expected)
|
179 |
-
{
|
180 |
-
$base = new Requests_IRI($base);
|
181 |
-
$this->assertEquals($expected, Requests_IRI::absolutize($base, $relative)->iri);
|
182 |
-
}
|
183 |
-
|
184 |
-
/**
|
185 |
-
* @dataProvider absolutize_tests
|
186 |
-
*/
|
187 |
-
public function testAbsolutizeObject($base, $relative, $expected)
|
188 |
-
{
|
189 |
-
$base = new Requests_IRI($base);
|
190 |
-
$expected = new Requests_IRI($expected);
|
191 |
-
$this->assertEquals($expected, Requests_IRI::absolutize($base, $relative));
|
192 |
-
}
|
193 |
-
|
194 |
-
public static function normalization_tests()
|
195 |
-
{
|
196 |
-
return array(
|
197 |
-
array('example://a/b/c/%7Bfoo%7D', 'example://a/b/c/%7Bfoo%7D'),
|
198 |
-
array('eXAMPLE://a/./b/../b/%63/%7bfoo%7d', 'example://a/b/c/%7Bfoo%7D'),
|
199 |
-
array('example://%61/', 'example://a/'),
|
200 |
-
array('example://%41/', 'example://a/'),
|
201 |
-
array('example://A/', 'example://a/'),
|
202 |
-
array('example://a/', 'example://a/'),
|
203 |
-
array('example://%25A/', 'example://%25a/'),
|
204 |
-
array('HTTP://EXAMPLE.com/', 'http://example.com'),
|
205 |
-
array('http://example.com/', 'http://example.com'),
|
206 |
-
array('http://example.com:', 'http://example.com'),
|
207 |
-
array('http://example.com:80', 'http://example.com'),
|
208 |
-
array('http://@example.com', 'http://@example.com'),
|
209 |
-
array('http://', 'http://'),
|
210 |
-
array('http://example.com?', 'http://example.com?'),
|
211 |
-
array('http://example.com#', 'http://example.com#'),
|
212 |
-
array('https://example.com/', 'https://example.com'),
|
213 |
-
array('https://example.com:', 'https://example.com'),
|
214 |
-
array('https://@example.com', 'https://@example.com'),
|
215 |
-
array('https://example.com?', 'https://example.com?'),
|
216 |
-
array('https://example.com#', 'https://example.com#'),
|
217 |
-
array('file://localhost/foobar', 'file:/foobar'),
|
218 |
-
array('http://[0:0:0:0:0:0:0:1]', 'http://[::1]'),
|
219 |
-
array('http://[2001:db8:85a3:0000:0000:8a2e:370:7334]', 'http://[2001:db8:85a3::8a2e:370:7334]'),
|
220 |
-
array('http://[0:0:0:0:0:ffff:c0a8:a01]', 'http://[::ffff:c0a8:a01]'),
|
221 |
-
array('http://[ffff:0:0:0:0:0:0:0]', 'http://[ffff::]'),
|
222 |
-
array('http://[::ffff:192.0.2.128]', 'http://[::ffff:192.0.2.128]'),
|
223 |
-
array('http://[invalid]', 'http:'),
|
224 |
-
array('http://[0:0:0:0:0:0:0:1]:', 'http://[::1]'),
|
225 |
-
array('http://[0:0:0:0:0:0:0:1]:80', 'http://[::1]'),
|
226 |
-
array('http://[0:0:0:0:0:0:0:1]:1234', 'http://[::1]:1234'),
|
227 |
-
// Punycode decoding helps with normalisation of IRIs, but is not
|
228 |
-
// needed for URIs, so we don't really care about it for Requests
|
229 |
-
//array('http://xn--tdali-d8a8w.lv', 'http://tūdaliņ.lv'),
|
230 |
-
//array('http://t%C5%ABdali%C5%86.lv', 'http://tūdaliņ.lv'),
|
231 |
-
array('http://Aa@example.com', 'http://Aa@example.com'),
|
232 |
-
array('http://example.com?Aa', 'http://example.com?Aa'),
|
233 |
-
array('http://example.com/Aa', 'http://example.com/Aa'),
|
234 |
-
array('http://example.com#Aa', 'http://example.com#Aa'),
|
235 |
-
array('http://[0:0:0:0:0:0:0:0]', 'http://[::]'),
|
236 |
-
array('http:.', 'http:'),
|
237 |
-
array('http:..', 'http:'),
|
238 |
-
array('http:./', 'http:'),
|
239 |
-
array('http:../', 'http:'),
|
240 |
-
array('http://example.com/%3A', 'http://example.com/%3A'),
|
241 |
-
array('http://example.com/:', 'http://example.com/:'),
|
242 |
-
array('http://example.com/%C2', 'http://example.com/%C2'),
|
243 |
-
array('http://example.com/%C2a', 'http://example.com/%C2a'),
|
244 |
-
array('http://example.com/%C2%00', 'http://example.com/%C2%00'),
|
245 |
-
array('http://example.com/%C3%A9', 'http://example.com/é'),
|
246 |
-
array('http://example.com/%C3%A9%00', 'http://example.com/é%00'),
|
247 |
-
array('http://example.com/%C3%A9cole', 'http://example.com/école'),
|
248 |
-
array('http://example.com/%FF', 'http://example.com/%FF'),
|
249 |
-
array("http://example.com/\xF3\xB0\x80\x80", 'http://example.com/%F3%B0%80%80'),
|
250 |
-
array("http://example.com/\xF3\xB0\x80\x80%00", 'http://example.com/%F3%B0%80%80%00'),
|
251 |
-
array("http://example.com/\xF3\xB0\x80\x80a", 'http://example.com/%F3%B0%80%80a'),
|
252 |
-
array("http://example.com?\xF3\xB0\x80\x80", "http://example.com?\xF3\xB0\x80\x80"),
|
253 |
-
array("http://example.com?\xF3\xB0\x80\x80%00", "http://example.com?\xF3\xB0\x80\x80%00"),
|
254 |
-
array("http://example.com?\xF3\xB0\x80\x80a", "http://example.com?\xF3\xB0\x80\x80a"),
|
255 |
-
array("http://example.com/\xEE\x80\x80", 'http://example.com/%EE%80%80'),
|
256 |
-
array("http://example.com/\xEE\x80\x80%00", 'http://example.com/%EE%80%80%00'),
|
257 |
-
array("http://example.com/\xEE\x80\x80a", 'http://example.com/%EE%80%80a'),
|
258 |
-
array("http://example.com?\xEE\x80\x80", "http://example.com?\xEE\x80\x80"),
|
259 |
-
array("http://example.com?\xEE\x80\x80%00", "http://example.com?\xEE\x80\x80%00"),
|
260 |
-
array("http://example.com?\xEE\x80\x80a", "http://example.com?\xEE\x80\x80a"),
|
261 |
-
array("http://example.com/\xC2", 'http://example.com/%C2'),
|
262 |
-
array("http://example.com/\xC2a", 'http://example.com/%C2a'),
|
263 |
-
array("http://example.com/\xC2\x00", 'http://example.com/%C2%00'),
|
264 |
-
array("http://example.com/\xC3\xA9", 'http://example.com/é'),
|
265 |
-
array("http://example.com/\xC3\xA9\x00", 'http://example.com/é%00'),
|
266 |
-
array("http://example.com/\xC3\xA9cole", 'http://example.com/école'),
|
267 |
-
array("http://example.com/\xFF", 'http://example.com/%FF'),
|
268 |
-
array("http://example.com/\xFF%00", 'http://example.com/%FF%00'),
|
269 |
-
array("http://example.com/\xFFa", 'http://example.com/%FFa'),
|
270 |
-
array('http://example.com/%61', 'http://example.com/a'),
|
271 |
-
array('http://example.com?%26', 'http://example.com?%26'),
|
272 |
-
array('http://example.com?%61', 'http://example.com?a'),
|
273 |
-
array('///', '///'),
|
274 |
-
);
|
275 |
-
}
|
276 |
-
|
277 |
-
/**
|
278 |
-
* @dataProvider normalization_tests
|
279 |
-
*/
|
280 |
-
public function testStringNormalization($input, $output)
|
281 |
-
{
|
282 |
-
$input = new Requests_IRI($input);
|
283 |
-
$this->assertEquals($output, $input->iri);
|
284 |
-
$this->assertEquals($output, (string) $input);
|
285 |
-
}
|
286 |
-
|
287 |
-
/**
|
288 |
-
* @dataProvider normalization_tests
|
289 |
-
*/
|
290 |
-
public function testObjectNormalization($input, $output)
|
291 |
-
{
|
292 |
-
$input = new Requests_IRI($input);
|
293 |
-
$output = new Requests_IRI($output);
|
294 |
-
$this->assertEquals($output, $input);
|
295 |
-
}
|
296 |
-
|
297 |
-
public static function equivalence_tests()
|
298 |
-
{
|
299 |
-
return array(
|
300 |
-
array('http://É.com', 'http://%C3%89.com'),
|
301 |
-
);
|
302 |
-
}
|
303 |
-
|
304 |
-
/**
|
305 |
-
* @dataProvider equivalence_tests
|
306 |
-
*/
|
307 |
-
public function testObjectEquivalence($input, $output)
|
308 |
-
{
|
309 |
-
$input = new Requests_IRI($input);
|
310 |
-
$output = new Requests_IRI($output);
|
311 |
-
$this->assertEquals($output, $input);
|
312 |
-
}
|
313 |
-
|
314 |
-
public static function not_equivalence_tests()
|
315 |
-
{
|
316 |
-
return array(
|
317 |
-
array('http://example.com/foo/bar', 'http://example.com/foo%2Fbar'),
|
318 |
-
);
|
319 |
-
}
|
320 |
-
|
321 |
-
/**
|
322 |
-
* @dataProvider not_equivalence_tests
|
323 |
-
*/
|
324 |
-
public function testObjectNotEquivalence($input, $output)
|
325 |
-
{
|
326 |
-
$input = new Requests_IRI($input);
|
327 |
-
$output = new Requests_IRI($output);
|
328 |
-
$this->assertNotEquals($output, $input);
|
329 |
-
}
|
330 |
-
|
331 |
-
public function testInvalidAbsolutizeBase()
|
332 |
-
{
|
333 |
-
$this->assertFalse(Requests_IRI::absolutize('://not a URL', '../'));
|
334 |
-
}
|
335 |
-
|
336 |
-
public function testInvalidAbsolutizeRelative()
|
337 |
-
{
|
338 |
-
$this->assertFalse(Requests_IRI::absolutize('http://example.com/', 'http://example.com//not a URL'));
|
339 |
-
}
|
340 |
-
|
341 |
-
public function testFullGamut()
|
342 |
-
{
|
343 |
-
$iri = new Requests_IRI();
|
344 |
-
$iri->scheme = 'http';
|
345 |
-
$iri->userinfo = 'user:password';
|
346 |
-
$iri->host = 'example.com';
|
347 |
-
$iri->path = '/test/';
|
348 |
-
$iri->fragment = 'test';
|
349 |
-
|
350 |
-
$this->assertEquals('http', $iri->scheme);
|
351 |
-
$this->assertEquals('user:password', $iri->userinfo);
|
352 |
-
$this->assertEquals('example.com', $iri->host);
|
353 |
-
$this->assertEquals(80, $iri->port);
|
354 |
-
$this->assertEquals('/test/', $iri->path);
|
355 |
-
$this->assertEquals('test', $iri->fragment);
|
356 |
-
}
|
357 |
-
|
358 |
-
public function testReadAliased()
|
359 |
-
{
|
360 |
-
$iri = new Requests_IRI();
|
361 |
-
$iri->scheme = 'http';
|
362 |
-
$iri->userinfo = 'user:password';
|
363 |
-
$iri->host = 'example.com';
|
364 |
-
$iri->path = '/test/';
|
365 |
-
$iri->fragment = 'test';
|
366 |
-
|
367 |
-
$this->assertEquals('http', $iri->ischeme);
|
368 |
-
$this->assertEquals('user:password', $iri->iuserinfo);
|
369 |
-
$this->assertEquals('example.com', $iri->ihost);
|
370 |
-
$this->assertEquals(80, $iri->iport);
|
371 |
-
$this->assertEquals('/test/', $iri->ipath);
|
372 |
-
$this->assertEquals('test', $iri->ifragment);
|
373 |
-
}
|
374 |
-
|
375 |
-
public function testWriteAliased()
|
376 |
-
{
|
377 |
-
$iri = new Requests_IRI();
|
378 |
-
$iri->scheme = 'http';
|
379 |
-
$iri->iuserinfo = 'user:password';
|
380 |
-
$iri->ihost = 'example.com';
|
381 |
-
$iri->ipath = '/test/';
|
382 |
-
$iri->ifragment = 'test';
|
383 |
-
|
384 |
-
$this->assertEquals('http', $iri->scheme);
|
385 |
-
$this->assertEquals('user:password', $iri->userinfo);
|
386 |
-
$this->assertEquals('example.com', $iri->host);
|
387 |
-
$this->assertEquals(80, $iri->port);
|
388 |
-
$this->assertEquals('/test/', $iri->path);
|
389 |
-
$this->assertEquals('test', $iri->fragment);
|
390 |
-
}
|
391 |
-
|
392 |
-
/**
|
393 |
-
* @expectedException PHPUnit_Framework_Error_Notice
|
394 |
-
*/
|
395 |
-
public function testNonexistantProperty()
|
396 |
-
{
|
397 |
-
$iri = new Requests_IRI();
|
398 |
-
$this->assertFalse(isset($iri->nonexistant_prop));
|
399 |
-
$should_fail = $iri->nonexistant_prop;
|
400 |
-
}
|
401 |
-
|
402 |
-
public function testBlankHost()
|
403 |
-
{
|
404 |
-
$iri = new Requests_IRI('http://example.com/a/?b=c#d');
|
405 |
-
$iri->host = null;
|
406 |
-
|
407 |
-
$this->assertEquals(null, $iri->host);
|
408 |
-
$this->assertEquals('http:/a/?b=c#d', (string) $iri);
|
409 |
-
}
|
410 |
-
|
411 |
-
public function testBadPort()
|
412 |
-
{
|
413 |
-
$iri = new Requests_IRI();
|
414 |
-
$iri->port = 'example';
|
415 |
-
|
416 |
-
$this->assertEquals(null, $iri->port);
|
417 |
-
}
|
418 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/tests/Requests.php
DELETED
@@ -1,148 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class RequestsTest_Requests extends PHPUnit_Framework_TestCase {
|
4 |
-
/**
|
5 |
-
* @expectedException Requests_Exception
|
6 |
-
*/
|
7 |
-
public function testInvalidProtocol() {
|
8 |
-
$request = Requests::request('ftp://128.0.0.1/');
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testDefaultTransport() {
|
12 |
-
$request = Requests::get(httpbin('/get'));
|
13 |
-
$this->assertEquals(200, $request->status_code);
|
14 |
-
}
|
15 |
-
|
16 |
-
/**
|
17 |
-
* Standard response header parsing
|
18 |
-
*/
|
19 |
-
public function testHeaderParsing() {
|
20 |
-
$transport = new RawTransport();
|
21 |
-
$transport->data =
|
22 |
-
"HTTP/1.0 200 OK\r\n".
|
23 |
-
"Host: localhost\r\n".
|
24 |
-
"Host: ambiguous\r\n".
|
25 |
-
"Nospace:here\r\n".
|
26 |
-
"Muchspace: there \r\n".
|
27 |
-
"Empty:\r\n".
|
28 |
-
"Empty2: \r\n".
|
29 |
-
"Folded: one\r\n".
|
30 |
-
"\ttwo\r\n".
|
31 |
-
" three\r\n\r\n".
|
32 |
-
"stop\r\n";
|
33 |
-
|
34 |
-
$options = array(
|
35 |
-
'transport' => $transport
|
36 |
-
);
|
37 |
-
$response = Requests::get('http://example.com/', array(), $options);
|
38 |
-
$expected = new Requests_Response_Headers();
|
39 |
-
$expected['host'] = 'localhost,ambiguous';
|
40 |
-
$expected['nospace'] = 'here';
|
41 |
-
$expected['muchspace'] = 'there';
|
42 |
-
$expected['empty'] = '';
|
43 |
-
$expected['empty2'] = '';
|
44 |
-
$expected['folded'] = 'one two three';
|
45 |
-
foreach ($expected as $key => $value) {
|
46 |
-
$this->assertEquals($value, $response->headers[$key]);
|
47 |
-
}
|
48 |
-
|
49 |
-
foreach ($response->headers as $key => $value) {
|
50 |
-
$this->assertEquals($value, $expected[$key]);
|
51 |
-
}
|
52 |
-
}
|
53 |
-
|
54 |
-
public function testRawAccess() {
|
55 |
-
$transport = new RawTransport();
|
56 |
-
$transport->data =
|
57 |
-
"HTTP/1.0 200 OK\r\n".
|
58 |
-
"Host: localhost\r\n\r\n".
|
59 |
-
"Test";
|
60 |
-
|
61 |
-
$options = array(
|
62 |
-
'transport' => $transport
|
63 |
-
);
|
64 |
-
$response = Requests::get('http://example.com/', array(), $options);
|
65 |
-
$this->assertEquals($transport->data, $response->raw);
|
66 |
-
}
|
67 |
-
|
68 |
-
/**
|
69 |
-
* Headers with only \n delimiting should be treated as if they're \r\n
|
70 |
-
*/
|
71 |
-
public function testHeaderOnlyLF() {
|
72 |
-
$transport = new RawTransport();
|
73 |
-
$transport->data = "HTTP/1.0 200 OK\r\nTest: value\nAnother-Test: value\r\n\r\n";
|
74 |
-
|
75 |
-
$options = array(
|
76 |
-
'transport' => $transport
|
77 |
-
);
|
78 |
-
$response = Requests::get('http://example.com/', array(), $options);
|
79 |
-
$this->assertEquals('value', $response->headers['test']);
|
80 |
-
$this->assertEquals('value', $response->headers['another-test']);
|
81 |
-
}
|
82 |
-
|
83 |
-
/**
|
84 |
-
* Check that invalid protocols are not accepted
|
85 |
-
*
|
86 |
-
* We do not support HTTP/0.9. If this is really an issue for you, file a
|
87 |
-
* new issue, and update your server/proxy to support a proper protocol.
|
88 |
-
*
|
89 |
-
* @expectedException Requests_Exception
|
90 |
-
*/
|
91 |
-
public function testInvalidProtocolVersion() {
|
92 |
-
$transport = new RawTransport();
|
93 |
-
$transport->data = "HTTP/0.9 200 OK\r\n\r\n<p>Test";
|
94 |
-
|
95 |
-
$options = array(
|
96 |
-
'transport' => $transport
|
97 |
-
);
|
98 |
-
$response = Requests::get('http://example.com/', array(), $options);
|
99 |
-
}
|
100 |
-
|
101 |
-
/**
|
102 |
-
* HTTP/0.9 also appears to use a single CRLF instead of two
|
103 |
-
*
|
104 |
-
* @expectedException Requests_Exception
|
105 |
-
*/
|
106 |
-
public function testSingleCRLFSeparator() {
|
107 |
-
$transport = new RawTransport();
|
108 |
-
$transport->data = "HTTP/0.9 200 OK\r\n<p>Test";
|
109 |
-
|
110 |
-
$options = array(
|
111 |
-
'transport' => $transport
|
112 |
-
);
|
113 |
-
$response = Requests::get('http://example.com/', array(), $options);
|
114 |
-
}
|
115 |
-
|
116 |
-
/**
|
117 |
-
* @expectedException Requests_Exception
|
118 |
-
*/
|
119 |
-
public function testInvalidStatus() {
|
120 |
-
$transport = new RawTransport();
|
121 |
-
$transport->data = "HTTP/1.1 OK\r\nTest: value\nAnother-Test: value\r\n\r\nTest";
|
122 |
-
|
123 |
-
$options = array(
|
124 |
-
'transport' => $transport
|
125 |
-
);
|
126 |
-
$response = Requests::get('http://example.com/', array(), $options);
|
127 |
-
}
|
128 |
-
|
129 |
-
public function test30xWithoutLocation() {
|
130 |
-
$transport = new MockTransport();
|
131 |
-
$transport->code = 302;
|
132 |
-
|
133 |
-
$options = array(
|
134 |
-
'transport' => $transport
|
135 |
-
);
|
136 |
-
$response = Requests::get('http://example.com/', array(), $options);
|
137 |
-
$this->assertEquals(302, $response->status_code);
|
138 |
-
$this->assertEquals(0, $response->redirects);
|
139 |
-
}
|
140 |
-
|
141 |
-
/**
|
142 |
-
* @expectedException Requests_Exception
|
143 |
-
*/
|
144 |
-
public function testTimeoutException() {
|
145 |
-
$options = array('timeout' => 0.5);
|
146 |
-
$response = Requests::get(httpbin('/delay/3'), array(), $options);
|
147 |
-
}
|
148 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/tests/Response/Headers.php
DELETED
@@ -1,55 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class RequestsTest_Response_Headers extends PHPUnit_Framework_TestCase {
|
4 |
-
public function testArrayAccess() {
|
5 |
-
$headers = new Requests_Response_Headers();
|
6 |
-
$headers['Content-Type'] = 'text/plain';
|
7 |
-
|
8 |
-
$this->assertEquals('text/plain', $headers['Content-Type']);
|
9 |
-
}
|
10 |
-
public function testCaseInsensitiveArrayAccess() {
|
11 |
-
$headers = new Requests_Response_Headers();
|
12 |
-
$headers['Content-Type'] = 'text/plain';
|
13 |
-
|
14 |
-
$this->assertEquals('text/plain', $headers['CONTENT-TYPE']);
|
15 |
-
$this->assertEquals('text/plain', $headers['content-type']);
|
16 |
-
}
|
17 |
-
|
18 |
-
/**
|
19 |
-
* @depends testArrayAccess
|
20 |
-
*/
|
21 |
-
public function testIteration() {
|
22 |
-
$headers = new Requests_Response_Headers();
|
23 |
-
$headers['Content-Type'] = 'text/plain';
|
24 |
-
$headers['Content-Length'] = 10;
|
25 |
-
|
26 |
-
foreach ($headers as $name => $value) {
|
27 |
-
switch (strtolower($name)) {
|
28 |
-
case 'content-type':
|
29 |
-
$this->assertEquals('text/plain', $value);
|
30 |
-
break;
|
31 |
-
case 'content-length':
|
32 |
-
$this->assertEquals(10, $value);
|
33 |
-
break;
|
34 |
-
default:
|
35 |
-
throw new Exception('Invalid name: ' . $name);
|
36 |
-
}
|
37 |
-
}
|
38 |
-
}
|
39 |
-
|
40 |
-
/**
|
41 |
-
* @expectedException Requests_Exception
|
42 |
-
*/
|
43 |
-
public function testInvalidKey() {
|
44 |
-
$headers = new Requests_Response_Headers();
|
45 |
-
$headers[] = 'text/plain';
|
46 |
-
}
|
47 |
-
|
48 |
-
public function testMultipleHeaders() {
|
49 |
-
$headers = new Requests_Response_Headers();
|
50 |
-
$headers['Accept'] = 'text/html;q=1.0';
|
51 |
-
$headers['Accept'] = '*/*;q=0.1';
|
52 |
-
|
53 |
-
$this->assertEquals('text/html;q=1.0,*/*;q=0.1', $headers['Accept']);
|
54 |
-
}
|
55 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/tests/SSL.php
DELETED
@@ -1,108 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class RequestsTest_SSL extends PHPUnit_Framework_TestCase {
|
4 |
-
public static function domainMatchProvider() {
|
5 |
-
return array(
|
6 |
-
array('example.com', 'example.com'),
|
7 |
-
array('test.example.com', 'test.example.com'),
|
8 |
-
array('test.example.com', '*.example.com'),
|
9 |
-
);
|
10 |
-
}
|
11 |
-
|
12 |
-
public static function domainNoMatchProvider() {
|
13 |
-
return array(
|
14 |
-
// Check that we need at least 3 components
|
15 |
-
array('com', '*'),
|
16 |
-
array('example.com', '*.com'),
|
17 |
-
|
18 |
-
// Check that double wildcards don't work
|
19 |
-
array('abc.def.example.com', '*.*.example.com'),
|
20 |
-
|
21 |
-
// Check that we only match with the correct number of components
|
22 |
-
array('abc.def.example.com', 'def.example.com'),
|
23 |
-
array('abc.def.example.com', '*.example.com'),
|
24 |
-
|
25 |
-
// Check that the wildcard only works as the full first component
|
26 |
-
array('abc.def.example.com', 'a*.def.example.com'),
|
27 |
-
|
28 |
-
// Check that wildcards are not allowed for IPs
|
29 |
-
array('192.168.0.1', '*.168.0.1'),
|
30 |
-
array('192.168.0.1', '192.168.0.*'),
|
31 |
-
);
|
32 |
-
}
|
33 |
-
|
34 |
-
/**
|
35 |
-
* @dataProvider domainMatchProvider
|
36 |
-
*/
|
37 |
-
public function testMatch($base, $dnsname) {
|
38 |
-
$this->assertTrue(Requests_SSL::match_domain($base, $dnsname));
|
39 |
-
}
|
40 |
-
|
41 |
-
/**
|
42 |
-
* @dataProvider domainNoMatchProvider
|
43 |
-
*/
|
44 |
-
public function testNoMatch($base, $dnsname) {
|
45 |
-
$this->assertFalse(Requests_SSL::match_domain($base, $dnsname));
|
46 |
-
}
|
47 |
-
|
48 |
-
protected function fakeCertificate($dnsname, $with_san = true) {
|
49 |
-
$certificate = array(
|
50 |
-
'subject' => array(
|
51 |
-
'CN' => $dnsname
|
52 |
-
),
|
53 |
-
);
|
54 |
-
|
55 |
-
if ($with_san !== false) {
|
56 |
-
// If SAN is set to true, default it to the dNSName
|
57 |
-
if ($with_san === true) {
|
58 |
-
$with_san = $dnsname;
|
59 |
-
}
|
60 |
-
$certificate['extensions'] = array(
|
61 |
-
'subjectAltName' => 'DNS: ' . $with_san,
|
62 |
-
);
|
63 |
-
}
|
64 |
-
|
65 |
-
return $certificate;
|
66 |
-
}
|
67 |
-
|
68 |
-
/**
|
69 |
-
* @dataProvider domainMatchProvider
|
70 |
-
*/
|
71 |
-
public function testMatchViaCertificate($base, $dnsname) {
|
72 |
-
$certificate = $this->fakeCertificate($dnsname);
|
73 |
-
$this->assertTrue(Requests_SSL::verify_certificate($base, $certificate));
|
74 |
-
}
|
75 |
-
|
76 |
-
/**
|
77 |
-
* @dataProvider domainNoMatchProvider
|
78 |
-
*/
|
79 |
-
public function testNoMatchViaCertificate($base, $dnsname) {
|
80 |
-
$certificate = $this->fakeCertificate($dnsname);
|
81 |
-
$this->assertFalse(Requests_SSL::verify_certificate($base, $certificate));
|
82 |
-
}
|
83 |
-
|
84 |
-
public function testCNFallback() {
|
85 |
-
$certificate = $this->fakeCertificate('example.com', false);
|
86 |
-
$this->assertTrue(Requests_SSL::verify_certificate('example.com', $certificate));
|
87 |
-
}
|
88 |
-
|
89 |
-
public function testInvalidCNFallback() {
|
90 |
-
$certificate = $this->fakeCertificate('example.com', false);
|
91 |
-
$this->assertFalse(Requests_SSL::verify_certificate('example.net', $certificate));
|
92 |
-
}
|
93 |
-
|
94 |
-
/**
|
95 |
-
* Test a certificate with both CN and SAN fields
|
96 |
-
*
|
97 |
-
* As per RFC2818, if the SAN field exists, we should parse that and ignore
|
98 |
-
* the value of the CN field.
|
99 |
-
*
|
100 |
-
* @link http://tools.ietf.org/html/rfc2818#section-3.1
|
101 |
-
*/
|
102 |
-
public function testIgnoreCNWithSAN() {
|
103 |
-
$certificate = $this->fakeCertificate('example.net', 'example.com');
|
104 |
-
|
105 |
-
$this->assertTrue(Requests_SSL::verify_certificate('example.com', $certificate), 'Checking SAN validation');
|
106 |
-
$this->assertFalse(Requests_SSL::verify_certificate('example.net', $certificate), 'Checking CN non-validation');
|
107 |
-
}
|
108 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/tests/Session.php
DELETED
@@ -1,86 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class RequestsTest_Session extends PHPUnit_Framework_TestCase {
|
4 |
-
public function testPropertyUsage() {
|
5 |
-
$headers = array(
|
6 |
-
'X-TestHeader' => 'testing',
|
7 |
-
'X-TestHeader2' => 'requests-test'
|
8 |
-
);
|
9 |
-
$data = array(
|
10 |
-
'testdata' => 'value1',
|
11 |
-
'test2' => 'value2',
|
12 |
-
'test3' => array(
|
13 |
-
'foo' => 'bar',
|
14 |
-
'abc' => 'xyz'
|
15 |
-
)
|
16 |
-
);
|
17 |
-
$options = array(
|
18 |
-
'testoption' => 'test',
|
19 |
-
'foo' => 'bar'
|
20 |
-
);
|
21 |
-
|
22 |
-
$session = new Requests_Session('http://example.com/', $headers, $data, $options);
|
23 |
-
$this->assertEquals('http://example.com/', $session->url);
|
24 |
-
$this->assertEquals($headers, $session->headers);
|
25 |
-
$this->assertEquals($data, $session->data);
|
26 |
-
$this->assertEquals($options['testoption'], $session->options['testoption']);
|
27 |
-
|
28 |
-
// Test via property access
|
29 |
-
$this->assertEquals($options['testoption'], $session->testoption);
|
30 |
-
|
31 |
-
// Test setting new property
|
32 |
-
$session->newoption = 'foobar';
|
33 |
-
$options['newoption'] = 'foobar';
|
34 |
-
$this->assertEquals($options['newoption'], $session->options['newoption']);
|
35 |
-
|
36 |
-
// Test unsetting property
|
37 |
-
unset($session->newoption);
|
38 |
-
$this->assertFalse(isset($session->newoption));
|
39 |
-
|
40 |
-
// Update property
|
41 |
-
$session->testoption = 'foobar';
|
42 |
-
$options['testoption'] = 'foobar';
|
43 |
-
$this->assertEquals($options['testoption'], $session->testoption);
|
44 |
-
|
45 |
-
// Test getting invalid property
|
46 |
-
$this->assertNull($session->invalidoption);
|
47 |
-
}
|
48 |
-
|
49 |
-
public function testURLResolution() {
|
50 |
-
$session = new Requests_Session(httpbin('/'));
|
51 |
-
|
52 |
-
// Set the cookies up
|
53 |
-
$response = $session->get('/get');
|
54 |
-
$this->assertTrue($response->success);
|
55 |
-
$this->assertEquals(httpbin('/get'), $response->url);
|
56 |
-
|
57 |
-
$data = json_decode($response->body, true);
|
58 |
-
$this->assertNotNull($data);
|
59 |
-
$this->assertArrayHasKey('url', $data);
|
60 |
-
$this->assertEquals(httpbin('/get'), $data['url']);
|
61 |
-
}
|
62 |
-
|
63 |
-
public function testSharedCookies() {
|
64 |
-
$session = new Requests_Session(httpbin('/'));
|
65 |
-
|
66 |
-
$options = array(
|
67 |
-
'follow_redirects' => false
|
68 |
-
);
|
69 |
-
$response = $session->get('/cookies/set?requests-testcookie=testvalue', array(), $options);
|
70 |
-
$this->assertEquals(302, $response->status_code);
|
71 |
-
|
72 |
-
// Check the cookies
|
73 |
-
$response = $session->get('/cookies');
|
74 |
-
$this->assertTrue($response->success);
|
75 |
-
|
76 |
-
// Check the response
|
77 |
-
$data = json_decode($response->body, true);
|
78 |
-
$this->assertNotNull($data);
|
79 |
-
$this->assertArrayHasKey('cookies', $data);
|
80 |
-
|
81 |
-
$cookies = array(
|
82 |
-
'requests-testcookie' => 'testvalue'
|
83 |
-
);
|
84 |
-
$this->assertEquals($cookies, $data['cookies']);
|
85 |
-
}
|
86 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/tests/Transport/Base.php
DELETED
@@ -1,683 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
abstract class RequestsTest_Transport_Base extends PHPUnit_Framework_TestCase {
|
4 |
-
public function setUp() {
|
5 |
-
$callback = array($this->transport, 'test');
|
6 |
-
$supported = call_user_func($callback);
|
7 |
-
|
8 |
-
if (!$supported) {
|
9 |
-
$this->markTestSkipped($this->transport . ' is not available');
|
10 |
-
return;
|
11 |
-
}
|
12 |
-
|
13 |
-
$ssl_supported = call_user_func($callback, array('ssl' => true));
|
14 |
-
if (!$ssl_supported) {
|
15 |
-
$this->skip_https = true;
|
16 |
-
}
|
17 |
-
}
|
18 |
-
protected $skip_https = false;
|
19 |
-
|
20 |
-
protected function getOptions($other = array()) {
|
21 |
-
$options = array(
|
22 |
-
'transport' => $this->transport
|
23 |
-
);
|
24 |
-
$options = array_merge($options, $other);
|
25 |
-
return $options;
|
26 |
-
}
|
27 |
-
|
28 |
-
public function testSimpleGET() {
|
29 |
-
$request = Requests::get(httpbin('/get'), array(), $this->getOptions());
|
30 |
-
$this->assertEquals(200, $request->status_code);
|
31 |
-
|
32 |
-
$result = json_decode($request->body, true);
|
33 |
-
$this->assertEquals(httpbin('/get'), $result['url']);
|
34 |
-
$this->assertEmpty($result['args']);
|
35 |
-
}
|
36 |
-
|
37 |
-
public function testGETWithArgs() {
|
38 |
-
$request = Requests::get(httpbin('/get?test=true&test2=test'), array(), $this->getOptions());
|
39 |
-
$this->assertEquals(200, $request->status_code);
|
40 |
-
|
41 |
-
$result = json_decode($request->body, true);
|
42 |
-
$this->assertEquals(httpbin('/get?test=true&test2=test'), $result['url']);
|
43 |
-
$this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['args']);
|
44 |
-
}
|
45 |
-
|
46 |
-
public function testGETWithData() {
|
47 |
-
$data = array(
|
48 |
-
'test' => 'true',
|
49 |
-
'test2' => 'test',
|
50 |
-
);
|
51 |
-
$request = Requests::request(httpbin('/get'), array(), $data, Requests::GET, $this->getOptions());
|
52 |
-
$this->assertEquals(200, $request->status_code);
|
53 |
-
|
54 |
-
$result = json_decode($request->body, true);
|
55 |
-
$this->assertEquals(httpbin('/get?test=true&test2=test'), $result['url']);
|
56 |
-
$this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['args']);
|
57 |
-
}
|
58 |
-
|
59 |
-
public function testGETWithNestedData() {
|
60 |
-
$data = array(
|
61 |
-
'test' => 'true',
|
62 |
-
'test2' => array(
|
63 |
-
'test3' => 'test',
|
64 |
-
'test4' => 'test-too',
|
65 |
-
),
|
66 |
-
);
|
67 |
-
$request = Requests::request(httpbin('/get'), array(), $data, Requests::GET, $this->getOptions());
|
68 |
-
$this->assertEquals(200, $request->status_code);
|
69 |
-
|
70 |
-
$result = json_decode($request->body, true);
|
71 |
-
$this->assertEquals(httpbin('/get?test=true&test2%5Btest3%5D=test&test2%5Btest4%5D=test-too'), $result['url']);
|
72 |
-
$this->assertEquals(array('test' => 'true', 'test2[test3]' => 'test', 'test2[test4]' => 'test-too'), $result['args']);
|
73 |
-
}
|
74 |
-
|
75 |
-
public function testGETWithDataAndQuery() {
|
76 |
-
$data = array(
|
77 |
-
'test2' => 'test',
|
78 |
-
);
|
79 |
-
$request = Requests::request(httpbin('/get?test=true'), array(), $data, Requests::GET, $this->getOptions());
|
80 |
-
$this->assertEquals(200, $request->status_code);
|
81 |
-
|
82 |
-
$result = json_decode($request->body, true);
|
83 |
-
$this->assertEquals(httpbin('/get?test=true&test2=test'), $result['url']);
|
84 |
-
$this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['args']);
|
85 |
-
}
|
86 |
-
|
87 |
-
public function testGETWithHeaders() {
|
88 |
-
$headers = array(
|
89 |
-
'Requested-At' => time(),
|
90 |
-
);
|
91 |
-
$request = Requests::get(httpbin('/get'), $headers, $this->getOptions());
|
92 |
-
$this->assertEquals(200, $request->status_code);
|
93 |
-
|
94 |
-
$result = json_decode($request->body, true);
|
95 |
-
$this->assertEquals($headers['Requested-At'], $result['headers']['Requested-At']);
|
96 |
-
}
|
97 |
-
|
98 |
-
public function testChunked() {
|
99 |
-
$request = Requests::get(httpbin('/stream/1'), array(), $this->getOptions());
|
100 |
-
$this->assertEquals(200, $request->status_code);
|
101 |
-
|
102 |
-
$result = json_decode($request->body, true);
|
103 |
-
$this->assertEquals(httpbin('/stream/1'), $result['url']);
|
104 |
-
$this->assertEmpty($result['args']);
|
105 |
-
}
|
106 |
-
|
107 |
-
public function testHEAD() {
|
108 |
-
$request = Requests::head(httpbin('/get'), array(), $this->getOptions());
|
109 |
-
$this->assertEquals(200, $request->status_code);
|
110 |
-
$this->assertEquals('', $request->body);
|
111 |
-
}
|
112 |
-
|
113 |
-
public function testRawPOST() {
|
114 |
-
$data = 'test';
|
115 |
-
$request = Requests::post(httpbin('/post'), array(), $data, $this->getOptions());
|
116 |
-
$this->assertEquals(200, $request->status_code);
|
117 |
-
|
118 |
-
$result = json_decode($request->body, true);
|
119 |
-
$this->assertEquals('test', $result['data']);
|
120 |
-
}
|
121 |
-
|
122 |
-
public function testFormPost() {
|
123 |
-
$data = 'test=true&test2=test';
|
124 |
-
$request = Requests::post(httpbin('/post'), array(), $data, $this->getOptions());
|
125 |
-
$this->assertEquals(200, $request->status_code);
|
126 |
-
|
127 |
-
$result = json_decode($request->body, true);
|
128 |
-
$this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['form']);
|
129 |
-
}
|
130 |
-
|
131 |
-
public function testPOSTWithArray() {
|
132 |
-
$data = array(
|
133 |
-
'test' => 'true',
|
134 |
-
'test2' => 'test',
|
135 |
-
);
|
136 |
-
$request = Requests::post(httpbin('/post'), array(), $data, $this->getOptions());
|
137 |
-
$this->assertEquals(200, $request->status_code);
|
138 |
-
|
139 |
-
$result = json_decode($request->body, true);
|
140 |
-
$this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['form']);
|
141 |
-
}
|
142 |
-
|
143 |
-
public function testPOSTWithNestedData() {
|
144 |
-
$data = array(
|
145 |
-
'test' => 'true',
|
146 |
-
'test2' => array(
|
147 |
-
'test3' => 'test',
|
148 |
-
'test4' => 'test-too',
|
149 |
-
),
|
150 |
-
);
|
151 |
-
$request = Requests::post(httpbin('/post'), array(), $data, $this->getOptions());
|
152 |
-
$this->assertEquals(200, $request->status_code);
|
153 |
-
|
154 |
-
$result = json_decode($request->body, true);
|
155 |
-
$this->assertEquals(array('test' => 'true', 'test2[test3]' => 'test', 'test2[test4]' => 'test-too'), $result['form']);
|
156 |
-
}
|
157 |
-
|
158 |
-
public function testRawPUT() {
|
159 |
-
$data = 'test';
|
160 |
-
$request = Requests::put(httpbin('/put'), array(), $data, $this->getOptions());
|
161 |
-
$this->assertEquals(200, $request->status_code);
|
162 |
-
|
163 |
-
$result = json_decode($request->body, true);
|
164 |
-
$this->assertEquals('test', $result['data']);
|
165 |
-
}
|
166 |
-
|
167 |
-
public function testFormPUT() {
|
168 |
-
$data = 'test=true&test2=test';
|
169 |
-
$request = Requests::put(httpbin('/put'), array(), $data, $this->getOptions());
|
170 |
-
$this->assertEquals(200, $request->status_code);
|
171 |
-
|
172 |
-
$result = json_decode($request->body, true);
|
173 |
-
$this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['form']);
|
174 |
-
}
|
175 |
-
|
176 |
-
public function testPUTWithArray() {
|
177 |
-
$data = array(
|
178 |
-
'test' => 'true',
|
179 |
-
'test2' => 'test',
|
180 |
-
);
|
181 |
-
$request = Requests::put(httpbin('/put'), array(), $data, $this->getOptions());
|
182 |
-
$this->assertEquals(200, $request->status_code);
|
183 |
-
|
184 |
-
$result = json_decode($request->body, true);
|
185 |
-
$this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['form']);
|
186 |
-
}
|
187 |
-
|
188 |
-
public function testRawPATCH() {
|
189 |
-
$data = 'test';
|
190 |
-
$request = Requests::patch(httpbin('/patch'), array(), $data, $this->getOptions());
|
191 |
-
$this->assertEquals(200, $request->status_code);
|
192 |
-
|
193 |
-
$result = json_decode($request->body, true);
|
194 |
-
$this->assertEquals('test', $result['data']);
|
195 |
-
}
|
196 |
-
|
197 |
-
public function testFormPATCH() {
|
198 |
-
$data = 'test=true&test2=test';
|
199 |
-
$request = Requests::patch(httpbin('/patch'), array(), $data, $this->getOptions());
|
200 |
-
$this->assertEquals(200, $request->status_code, $request->body);
|
201 |
-
|
202 |
-
$result = json_decode($request->body, true);
|
203 |
-
$this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['form']);
|
204 |
-
}
|
205 |
-
|
206 |
-
public function testPATCHWithArray() {
|
207 |
-
$data = array(
|
208 |
-
'test' => 'true',
|
209 |
-
'test2' => 'test',
|
210 |
-
);
|
211 |
-
$request = Requests::patch(httpbin('/patch'), array(), $data, $this->getOptions());
|
212 |
-
$this->assertEquals(200, $request->status_code);
|
213 |
-
|
214 |
-
$result = json_decode($request->body, true);
|
215 |
-
$this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['form']);
|
216 |
-
}
|
217 |
-
|
218 |
-
public function testDELETE() {
|
219 |
-
$request = Requests::delete(httpbin('/delete'), array(), $this->getOptions());
|
220 |
-
$this->assertEquals(200, $request->status_code);
|
221 |
-
|
222 |
-
$result = json_decode($request->body, true);
|
223 |
-
$this->assertEquals(httpbin('/delete'), $result['url']);
|
224 |
-
$this->assertEmpty($result['args']);
|
225 |
-
}
|
226 |
-
|
227 |
-
public function testDELETEWithData() {
|
228 |
-
$data = array(
|
229 |
-
'test' => 'true',
|
230 |
-
'test2' => 'test',
|
231 |
-
);
|
232 |
-
$request = Requests::request(httpbin('/delete'), array(), $data, Requests::DELETE, $this->getOptions());
|
233 |
-
$this->assertEquals(200, $request->status_code);
|
234 |
-
|
235 |
-
$result = json_decode($request->body, true);
|
236 |
-
$this->assertEquals(httpbin('/delete?test=true&test2=test'), $result['url']);
|
237 |
-
$this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['args']);
|
238 |
-
}
|
239 |
-
|
240 |
-
public function testRedirects() {
|
241 |
-
$request = Requests::get(httpbin('/redirect/6'), array(), $this->getOptions());
|
242 |
-
$this->assertEquals(200, $request->status_code);
|
243 |
-
|
244 |
-
$this->assertEquals(6, $request->redirects);
|
245 |
-
}
|
246 |
-
|
247 |
-
public function testRelativeRedirects() {
|
248 |
-
$request = Requests::get(httpbin('/relative-redirect/6'), array(), $this->getOptions());
|
249 |
-
$this->assertEquals(200, $request->status_code);
|
250 |
-
|
251 |
-
$this->assertEquals(6, $request->redirects);
|
252 |
-
}
|
253 |
-
|
254 |
-
/**
|
255 |
-
* @expectedException Requests_Exception
|
256 |
-
* @todo This should also check that the type is "toomanyredirects"
|
257 |
-
*/
|
258 |
-
public function testTooManyRedirects() {
|
259 |
-
$options = array(
|
260 |
-
'redirects' => 10, // default, but force just in case
|
261 |
-
);
|
262 |
-
$request = Requests::get(httpbin('/redirect/11'), array(), $this->getOptions($options));
|
263 |
-
}
|
264 |
-
|
265 |
-
public static function statusCodeSuccessProvider() {
|
266 |
-
return array(
|
267 |
-
array(200, true),
|
268 |
-
array(201, true),
|
269 |
-
array(202, true),
|
270 |
-
array(203, true),
|
271 |
-
array(204, true),
|
272 |
-
array(205, true),
|
273 |
-
array(206, true),
|
274 |
-
array(300, false),
|
275 |
-
array(301, false),
|
276 |
-
array(302, false),
|
277 |
-
array(303, false),
|
278 |
-
array(304, false),
|
279 |
-
array(305, false),
|
280 |
-
array(306, false),
|
281 |
-
array(307, false),
|
282 |
-
array(400, false),
|
283 |
-
array(401, false),
|
284 |
-
array(402, false),
|
285 |
-
array(403, false),
|
286 |
-
array(404, false),
|
287 |
-
array(405, false),
|
288 |
-
array(406, false),
|
289 |
-
array(407, false),
|
290 |
-
array(408, false),
|
291 |
-
array(409, false),
|
292 |
-
array(410, false),
|
293 |
-
array(411, false),
|
294 |
-
array(412, false),
|
295 |
-
array(413, false),
|
296 |
-
array(414, false),
|
297 |
-
array(415, false),
|
298 |
-
array(416, false),
|
299 |
-
array(417, false),
|
300 |
-
array(418, false), // RFC 2324
|
301 |
-
array(428, false), // RFC 6585
|
302 |
-
array(429, false), // RFC 6585
|
303 |
-
array(431, false), // RFC 6585
|
304 |
-
array(500, false),
|
305 |
-
array(501, false),
|
306 |
-
array(502, false),
|
307 |
-
array(503, false),
|
308 |
-
array(504, false),
|
309 |
-
array(505, false),
|
310 |
-
array(511, false), // RFC 6585
|
311 |
-
);
|
312 |
-
}
|
313 |
-
|
314 |
-
/**
|
315 |
-
* @dataProvider statusCodeSuccessProvider
|
316 |
-
*/
|
317 |
-
public function testStatusCode($code, $success) {
|
318 |
-
$url = sprintf(httpbin('/status/%d'), $code);
|
319 |
-
$options = array(
|
320 |
-
'follow_redirects' => false,
|
321 |
-
);
|
322 |
-
$request = Requests::get($url, array(), $this->getOptions($options));
|
323 |
-
$this->assertEquals($code, $request->status_code);
|
324 |
-
$this->assertEquals($success, $request->success);
|
325 |
-
}
|
326 |
-
|
327 |
-
/**
|
328 |
-
* @dataProvider statusCodeSuccessProvider
|
329 |
-
*/
|
330 |
-
public function testStatusCodeThrow($code, $success) {
|
331 |
-
$url = sprintf(httpbin('/status/%d'), $code);
|
332 |
-
$options = array(
|
333 |
-
'follow_redirects' => false,
|
334 |
-
);
|
335 |
-
|
336 |
-
if (!$success) {
|
337 |
-
if ($code >= 400) {
|
338 |
-
$this->setExpectedException('Requests_Exception_HTTP_' . $code, $code);
|
339 |
-
}
|
340 |
-
elseif ($code >= 300 && $code < 400) {
|
341 |
-
$this->setExpectedException('Requests_Exception');
|
342 |
-
}
|
343 |
-
}
|
344 |
-
$request = Requests::get($url, array(), $this->getOptions($options));
|
345 |
-
$request->throw_for_status(false);
|
346 |
-
}
|
347 |
-
|
348 |
-
/**
|
349 |
-
* @dataProvider statusCodeSuccessProvider
|
350 |
-
*/
|
351 |
-
public function testStatusCodeThrowAllowRedirects($code, $success) {
|
352 |
-
$url = sprintf(httpbin('/status/%d'), $code);
|
353 |
-
$options = array(
|
354 |
-
'follow_redirects' => false,
|
355 |
-
);
|
356 |
-
|
357 |
-
if (!$success) {
|
358 |
-
if ($code >= 400) {
|
359 |
-
$this->setExpectedException('Requests_Exception_HTTP_' . $code, $code);
|
360 |
-
}
|
361 |
-
}
|
362 |
-
$request = Requests::get($url, array(), $this->getOptions($options));
|
363 |
-
$request->throw_for_status(true);
|
364 |
-
}
|
365 |
-
|
366 |
-
public function testStatusCodeUnknown(){
|
367 |
-
$request = Requests::get(httpbin('/status/599'), array(), $this->getOptions());
|
368 |
-
$this->assertEquals(599, $request->status_code);
|
369 |
-
$this->assertEquals(false, $request->success);
|
370 |
-
}
|
371 |
-
|
372 |
-
/**
|
373 |
-
* @expectedException Requests_Exception_HTTP_Unknown
|
374 |
-
*/
|
375 |
-
public function testStatusCodeThrowUnknown(){
|
376 |
-
$request = Requests::get(httpbin('/status/599'), array(), $this->getOptions());
|
377 |
-
$request->throw_for_status(true);
|
378 |
-
}
|
379 |
-
|
380 |
-
public function testGzipped() {
|
381 |
-
$request = Requests::get(httpbin('/gzip'), array(), $this->getOptions());
|
382 |
-
$this->assertEquals(200, $request->status_code);
|
383 |
-
|
384 |
-
$result = json_decode($request->body);
|
385 |
-
$this->assertEquals(true, $result->gzipped);
|
386 |
-
}
|
387 |
-
|
388 |
-
public function testStreamToFile() {
|
389 |
-
$options = array(
|
390 |
-
'filename' => tempnam(sys_get_temp_dir(), 'RLT') // RequestsLibraryTest
|
391 |
-
);
|
392 |
-
$request = Requests::get(httpbin('/get'), array(), $this->getOptions($options));
|
393 |
-
$this->assertEquals(200, $request->status_code);
|
394 |
-
$this->assertEmpty($request->body);
|
395 |
-
|
396 |
-
$contents = file_get_contents($options['filename']);
|
397 |
-
$result = json_decode($contents, true);
|
398 |
-
$this->assertEquals(httpbin('/get'), $result['url']);
|
399 |
-
$this->assertEmpty($result['args']);
|
400 |
-
|
401 |
-
unlink($options['filename']);
|
402 |
-
}
|
403 |
-
|
404 |
-
public function testNonblocking() {
|
405 |
-
$options = array(
|
406 |
-
'blocking' => false
|
407 |
-
);
|
408 |
-
$request = Requests::get(httpbin('/get'), array(), $this->getOptions($options));
|
409 |
-
$empty = new Requests_Response();
|
410 |
-
$this->assertEquals($empty, $request);
|
411 |
-
}
|
412 |
-
|
413 |
-
/**
|
414 |
-
* @expectedException Requests_Exception
|
415 |
-
*/
|
416 |
-
public function testBadIP() {
|
417 |
-
$request = Requests::get('http://256.256.256.0/', array(), $this->getOptions());
|
418 |
-
}
|
419 |
-
|
420 |
-
public function testHTTPS() {
|
421 |
-
if ($this->skip_https) {
|
422 |
-
$this->markTestSkipped('SSL support is not available.');
|
423 |
-
return;
|
424 |
-
}
|
425 |
-
|
426 |
-
$request = Requests::get(httpbin('/get', true), array(), $this->getOptions());
|
427 |
-
$this->assertEquals(200, $request->status_code);
|
428 |
-
|
429 |
-
$result = json_decode($request->body, true);
|
430 |
-
// Disable, since httpbin always returns http
|
431 |
-
// $this->assertEquals(httpbin('/get', true), $result['url']);
|
432 |
-
$this->assertEmpty($result['args']);
|
433 |
-
}
|
434 |
-
|
435 |
-
/**
|
436 |
-
* @expectedException Requests_Exception
|
437 |
-
*/
|
438 |
-
public function testExpiredHTTPS() {
|
439 |
-
if ($this->skip_https) {
|
440 |
-
$this->markTestSkipped('SSL support is not available.');
|
441 |
-
return;
|
442 |
-
}
|
443 |
-
|
444 |
-
$request = Requests::get('https://testssl-expire.disig.sk/index.en.html', array(), $this->getOptions());
|
445 |
-
}
|
446 |
-
|
447 |
-
/**
|
448 |
-
* @expectedException Requests_Exception
|
449 |
-
*/
|
450 |
-
public function testRevokedHTTPS() {
|
451 |
-
if ($this->skip_https) {
|
452 |
-
$this->markTestSkipped('SSL support is not available.');
|
453 |
-
return;
|
454 |
-
}
|
455 |
-
|
456 |
-
$request = Requests::get('https://testssl-revoked.disig.sk/index.en.html', array(), $this->getOptions());
|
457 |
-
}
|
458 |
-
|
459 |
-
/**
|
460 |
-
* Test that SSL fails with a bad certificate
|
461 |
-
*
|
462 |
-
* This is defined as invalid by
|
463 |
-
* https://onlinessl.netlock.hu/en/test-center/invalid-ssl-certificate.html
|
464 |
-
* and is used in testing in PhantomJS. That said, expect this to break.
|
465 |
-
*
|
466 |
-
* @expectedException Requests_Exception
|
467 |
-
*/
|
468 |
-
public function testBadDomain() {
|
469 |
-
if ($this->skip_https) {
|
470 |
-
$this->markTestSkipped('SSL support is not available.');
|
471 |
-
return;
|
472 |
-
}
|
473 |
-
|
474 |
-
$request = Requests::get('https://tv.eurosport.com/', array(), $this->getOptions());
|
475 |
-
}
|
476 |
-
|
477 |
-
/**
|
478 |
-
* Test that the transport supports Server Name Indication with HTTPS
|
479 |
-
*
|
480 |
-
* sni.velox.ch is used for SNI testing, and the common name is set to
|
481 |
-
* `*.sni.velox.ch` as such. Without alternate name support, this will fail
|
482 |
-
* as `sni.velox.ch` is only in the alternate name
|
483 |
-
*/
|
484 |
-
public function testAlternateNameSupport() {
|
485 |
-
if ($this->skip_https) {
|
486 |
-
$this->markTestSkipped('SSL support is not available.');
|
487 |
-
return;
|
488 |
-
}
|
489 |
-
|
490 |
-
$request = Requests::get('https://sni.velox.ch/', array(), $this->getOptions());
|
491 |
-
$this->assertEquals(200, $request->status_code);
|
492 |
-
}
|
493 |
-
|
494 |
-
/**
|
495 |
-
* Test that the transport supports Server Name Indication with HTTPS
|
496 |
-
*
|
497 |
-
* sni.velox.ch is used for SNI testing, and the common name is set to
|
498 |
-
* `*.sni.velox.ch` as such. Without SNI support, this will fail. Also tests
|
499 |
-
* our wildcard support.
|
500 |
-
*/
|
501 |
-
public function testSNISupport() {
|
502 |
-
if ($this->skip_https) {
|
503 |
-
$this->markTestSkipped('SSL support is not available.');
|
504 |
-
return;
|
505 |
-
}
|
506 |
-
|
507 |
-
$request = Requests::get('https://abc.sni.velox.ch/', array(), $this->getOptions());
|
508 |
-
$this->assertEquals(200, $request->status_code);
|
509 |
-
}
|
510 |
-
|
511 |
-
/**
|
512 |
-
* @expectedException Requests_Exception
|
513 |
-
*/
|
514 |
-
public function testTimeout() {
|
515 |
-
$options = array(
|
516 |
-
'timeout' => 1,
|
517 |
-
);
|
518 |
-
$request = Requests::get(httpbin('/delay/10'), array(), $this->getOptions($options));
|
519 |
-
var_dump($request);
|
520 |
-
}
|
521 |
-
|
522 |
-
public function testMultiple() {
|
523 |
-
$requests = array(
|
524 |
-
'test1' => array(
|
525 |
-
'url' => httpbin('/get')
|
526 |
-
),
|
527 |
-
'test2' => array(
|
528 |
-
'url' => httpbin('/get')
|
529 |
-
),
|
530 |
-
);
|
531 |
-
$responses = Requests::request_multiple($requests, $this->getOptions());
|
532 |
-
|
533 |
-
// test1
|
534 |
-
$this->assertNotEmpty($responses['test1']);
|
535 |
-
$this->assertInstanceOf('Requests_Response', $responses['test1']);
|
536 |
-
$this->assertEquals(200, $responses['test1']->status_code);
|
537 |
-
|
538 |
-
$result = json_decode($responses['test1']->body, true);
|
539 |
-
$this->assertEquals(httpbin('/get'), $result['url']);
|
540 |
-
$this->assertEmpty($result['args']);
|
541 |
-
|
542 |
-
// test2
|
543 |
-
$this->assertNotEmpty($responses['test2']);
|
544 |
-
$this->assertInstanceOf('Requests_Response', $responses['test2']);
|
545 |
-
$this->assertEquals(200, $responses['test2']->status_code);
|
546 |
-
|
547 |
-
$result = json_decode($responses['test2']->body, true);
|
548 |
-
$this->assertEquals(httpbin('/get'), $result['url']);
|
549 |
-
$this->assertEmpty($result['args']);
|
550 |
-
}
|
551 |
-
|
552 |
-
public function testMultipleWithDifferingMethods() {
|
553 |
-
$requests = array(
|
554 |
-
'get' => array(
|
555 |
-
'url' => httpbin('/get'),
|
556 |
-
),
|
557 |
-
'post' => array(
|
558 |
-
'url' => httpbin('/post'),
|
559 |
-
'type' => Requests::POST,
|
560 |
-
'data' => 'test',
|
561 |
-
),
|
562 |
-
);
|
563 |
-
$responses = Requests::request_multiple($requests, $this->getOptions());
|
564 |
-
|
565 |
-
// get
|
566 |
-
$this->assertEquals(200, $responses['get']->status_code);
|
567 |
-
|
568 |
-
// post
|
569 |
-
$this->assertEquals(200, $responses['post']->status_code);
|
570 |
-
$result = json_decode($responses['post']->body, true);
|
571 |
-
$this->assertEquals('test', $result['data']);
|
572 |
-
}
|
573 |
-
|
574 |
-
/**
|
575 |
-
* @depends testTimeout
|
576 |
-
*/
|
577 |
-
public function testMultipleWithFailure() {
|
578 |
-
$requests = array(
|
579 |
-
'success' => array(
|
580 |
-
'url' => httpbin('/get'),
|
581 |
-
),
|
582 |
-
'timeout' => array(
|
583 |
-
'url' => httpbin('/delay/10'),
|
584 |
-
'options' => array(
|
585 |
-
'timeout' => 1,
|
586 |
-
),
|
587 |
-
),
|
588 |
-
);
|
589 |
-
$responses = Requests::request_multiple($requests, $this->getOptions());
|
590 |
-
$this->assertEquals(200, $responses['success']->status_code);
|
591 |
-
$this->assertInstanceOf('Requests_Exception', $responses['timeout']);
|
592 |
-
}
|
593 |
-
|
594 |
-
public function testMultipleUsingCallback() {
|
595 |
-
$requests = array(
|
596 |
-
'get' => array(
|
597 |
-
'url' => httpbin('/get'),
|
598 |
-
),
|
599 |
-
'post' => array(
|
600 |
-
'url' => httpbin('/post'),
|
601 |
-
'type' => Requests::POST,
|
602 |
-
'data' => 'test',
|
603 |
-
),
|
604 |
-
);
|
605 |
-
$this->completed = array();
|
606 |
-
$options = array(
|
607 |
-
'complete' => array($this, 'completeCallback'),
|
608 |
-
);
|
609 |
-
$responses = Requests::request_multiple($requests, $this->getOptions($options));
|
610 |
-
|
611 |
-
$this->assertEquals($this->completed, $responses);
|
612 |
-
$this->completed = array();
|
613 |
-
}
|
614 |
-
|
615 |
-
public function testMultipleUsingCallbackAndFailure() {
|
616 |
-
$requests = array(
|
617 |
-
'success' => array(
|
618 |
-
'url' => httpbin('/get'),
|
619 |
-
),
|
620 |
-
'timeout' => array(
|
621 |
-
'url' => httpbin('/delay/10'),
|
622 |
-
'options' => array(
|
623 |
-
'timeout' => 1,
|
624 |
-
),
|
625 |
-
),
|
626 |
-
);
|
627 |
-
$this->completed = array();
|
628 |
-
$options = array(
|
629 |
-
'complete' => array($this, 'completeCallback'),
|
630 |
-
);
|
631 |
-
$responses = Requests::request_multiple($requests, $this->getOptions($options));
|
632 |
-
|
633 |
-
$this->assertEquals($this->completed, $responses);
|
634 |
-
$this->completed = array();
|
635 |
-
}
|
636 |
-
|
637 |
-
public function completeCallback($response, $key) {
|
638 |
-
$this->completed[$key] = $response;
|
639 |
-
}
|
640 |
-
|
641 |
-
public function testMultipleToFile() {
|
642 |
-
$requests = array(
|
643 |
-
'get' => array(
|
644 |
-
'url' => httpbin('/get'),
|
645 |
-
'options' => array(
|
646 |
-
'filename' => tempnam(sys_get_temp_dir(), 'RLT') // RequestsLibraryTest
|
647 |
-
),
|
648 |
-
),
|
649 |
-
'post' => array(
|
650 |
-
'url' => httpbin('/post'),
|
651 |
-
'type' => Requests::POST,
|
652 |
-
'data' => 'test',
|
653 |
-
'options' => array(
|
654 |
-
'filename' => tempnam(sys_get_temp_dir(), 'RLT') // RequestsLibraryTest
|
655 |
-
),
|
656 |
-
),
|
657 |
-
);
|
658 |
-
$responses = Requests::request_multiple($requests, $this->getOptions());
|
659 |
-
|
660 |
-
// GET request
|
661 |
-
$contents = file_get_contents($requests['get']['options']['filename']);
|
662 |
-
$result = json_decode($contents, true);
|
663 |
-
$this->assertEquals(httpbin('/get'), $result['url']);
|
664 |
-
$this->assertEmpty($result['args']);
|
665 |
-
unlink($requests['get']['options']['filename']);
|
666 |
-
|
667 |
-
// POST request
|
668 |
-
$contents = file_get_contents($requests['post']['options']['filename']);
|
669 |
-
$result = json_decode($contents, true);
|
670 |
-
$this->assertEquals(httpbin('/post'), $result['url']);
|
671 |
-
$this->assertEquals('test', $result['data']);
|
672 |
-
unlink($requests['post']['options']['filename']);
|
673 |
-
}
|
674 |
-
|
675 |
-
public function testHostHeader() {
|
676 |
-
$request = Requests::get('http://portquiz.positon.org:8080/', array(), $this->getOptions());
|
677 |
-
$responseDoc = new DOMDocument;
|
678 |
-
$responseDoc->loadHTML($request->body);
|
679 |
-
$portXpath = new DOMXPath($responseDoc);
|
680 |
-
$portXpathMatches = $portXpath->query('//p/b');
|
681 |
-
$this->assertEquals(8080, $portXpathMatches->item(0)->nodeValue);
|
682 |
-
}
|
683 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/tests/Transport/cURL.php
DELETED
@@ -1,5 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class RequestsTest_Transport_cURL extends RequestsTest_Transport_Base {
|
4 |
-
protected $transport = 'Requests_Transport_cURL';
|
5 |
-
}
|
|
|
|
|
|
|
|
|
|
inc/Requests/tests/Transport/fsockopen.php
DELETED
@@ -1,5 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class RequestsTest_Transport_fsockopen extends RequestsTest_Transport_Base {
|
4 |
-
protected $transport = 'Requests_Transport_fsockopen';
|
5 |
-
}
|
|
|
|
|
|
|
|
|
|
inc/Requests/tests/bootstrap.php
DELETED
@@ -1,139 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
date_default_timezone_set('UTC');
|
4 |
-
|
5 |
-
$host = getenv('REQUESTS_TEST_HOST');
|
6 |
-
if (empty($host)) {
|
7 |
-
$host = 'httpbin.org';
|
8 |
-
}
|
9 |
-
define('REQUESTS_TEST_HOST', getenv('REQUESTS_TEST_HOST') ? getenv('REQUESTS_TEST_HOST') : 'httpbin.org');
|
10 |
-
define('REQUESTS_TEST_HOST_HTTP', getenv('REQUESTS_TEST_HOST_HTTP') ? getenv('REQUESTS_TEST_HOST_HTTP') : REQUESTS_TEST_HOST);
|
11 |
-
define('REQUESTS_TEST_HOST_HTTPS', getenv('REQUESTS_TEST_HOST_HTTPS') ? getenv('REQUESTS_TEST_HOST_HTTPS'): REQUESTS_TEST_HOST);
|
12 |
-
|
13 |
-
include(dirname(dirname(__FILE__)) . '/library/Requests.php');
|
14 |
-
Requests::register_autoloader();
|
15 |
-
|
16 |
-
function autoload_tests($class) {
|
17 |
-
if (strpos($class, 'RequestsTest_') !== 0) {
|
18 |
-
return;
|
19 |
-
}
|
20 |
-
|
21 |
-
$class = substr($class, 13);
|
22 |
-
$file = str_replace('_', '/', $class);
|
23 |
-
if (file_exists(dirname(__FILE__) . '/' . $file . '.php')) {
|
24 |
-
require_once(dirname(__FILE__) . '/' . $file . '.php');
|
25 |
-
}
|
26 |
-
}
|
27 |
-
|
28 |
-
spl_autoload_register('autoload_tests');
|
29 |
-
|
30 |
-
function httpbin($suffix = '', $ssl = false) {
|
31 |
-
$host = $ssl ? 'https://' . REQUESTS_TEST_HOST_HTTPS : 'http://' . REQUESTS_TEST_HOST_HTTP;
|
32 |
-
return rtrim( $host, '/' ) . '/' . ltrim( $suffix, '/' );
|
33 |
-
}
|
34 |
-
|
35 |
-
class MockTransport implements Requests_Transport {
|
36 |
-
public $code = 200;
|
37 |
-
public $chunked = false;
|
38 |
-
public $body = 'Test Body';
|
39 |
-
public $raw_headers = '';
|
40 |
-
|
41 |
-
private static $messages = array(
|
42 |
-
100 => '100 Continue',
|
43 |
-
101 => '101 Switching Protocols',
|
44 |
-
200 => '200 OK',
|
45 |
-
201 => '201 Created',
|
46 |
-
202 => '202 Accepted',
|
47 |
-
203 => '203 Non-Authoritative Information',
|
48 |
-
204 => '204 No Content',
|
49 |
-
205 => '205 Reset Content',
|
50 |
-
206 => '206 Partial Content',
|
51 |
-
300 => '300 Multiple Choices',
|
52 |
-
301 => '301 Moved Permanently',
|
53 |
-
302 => '302 Found',
|
54 |
-
303 => '303 See Other',
|
55 |
-
304 => '304 Not Modified',
|
56 |
-
305 => '305 Use Proxy',
|
57 |
-
306 => '306 (Unused)',
|
58 |
-
307 => '307 Temporary Redirect',
|
59 |
-
400 => '400 Bad Request',
|
60 |
-
401 => '401 Unauthorized',
|
61 |
-
402 => '402 Payment Required',
|
62 |
-
403 => '403 Forbidden',
|
63 |
-
404 => '404 Not Found',
|
64 |
-
405 => '405 Method Not Allowed',
|
65 |
-
406 => '406 Not Acceptable',
|
66 |
-
407 => '407 Proxy Authentication Required',
|
67 |
-
408 => '408 Request Timeout',
|
68 |
-
409 => '409 Conflict',
|
69 |
-
410 => '410 Gone',
|
70 |
-
411 => '411 Length Required',
|
71 |
-
412 => '412 Precondition Failed',
|
72 |
-
413 => '413 Request Entity Too Large',
|
73 |
-
414 => '414 Request-URI Too Long',
|
74 |
-
415 => '415 Unsupported Media Type',
|
75 |
-
416 => '416 Requested Range Not Satisfiable',
|
76 |
-
417 => '417 Expectation Failed',
|
77 |
-
500 => '500 Internal Server Error',
|
78 |
-
501 => '501 Not Implemented',
|
79 |
-
502 => '502 Bad Gateway',
|
80 |
-
503 => '503 Service Unavailable',
|
81 |
-
504 => '504 Gateway Timeout',
|
82 |
-
505 => '505 HTTP Version Not Supported',
|
83 |
-
);
|
84 |
-
|
85 |
-
public function request($url, $headers = array(), $data = array(), $options = array()) {
|
86 |
-
$status = self::$messages[$this->code];
|
87 |
-
$response = "HTTP/1.0 $status\r\n";
|
88 |
-
$response .= "Content-Type: text/plain\r\n";
|
89 |
-
if ($this->chunked) {
|
90 |
-
$response .= "Transfer-Encoding: chunked\r\n";
|
91 |
-
}
|
92 |
-
$response .= $this->raw_headers;
|
93 |
-
$response .= "Connection: close\r\n\r\n";
|
94 |
-
$response .= $this->body;
|
95 |
-
return $response;
|
96 |
-
}
|
97 |
-
|
98 |
-
public function request_multiple($requests, $options) {
|
99 |
-
$responses = array();
|
100 |
-
foreach ($requests as $id => $request) {
|
101 |
-
$handler = new MockTransport();
|
102 |
-
$handler->code = $request['options']['mock.code'];
|
103 |
-
$handler->chunked = $request['options']['mock.chunked'];
|
104 |
-
$handler->body = $request['options']['mock.body'];
|
105 |
-
$handler->raw_headers = $request['options']['mock.raw_headers'];
|
106 |
-
$responses[$id] = $handler->request($request['url'], $request['headers'], $request['data'], $request['options']);
|
107 |
-
|
108 |
-
if (!empty($options['mock.parse'])) {
|
109 |
-
$request['options']['hooks']->dispatch('transport.internal.parse_response', array(&$responses[$id], $request));
|
110 |
-
$request['options']['hooks']->dispatch('multiple.request.complete', array(&$responses[$id], $id));
|
111 |
-
}
|
112 |
-
}
|
113 |
-
|
114 |
-
return $responses;
|
115 |
-
}
|
116 |
-
|
117 |
-
public static function test() {
|
118 |
-
return true;
|
119 |
-
}
|
120 |
-
}
|
121 |
-
|
122 |
-
class RawTransport implements Requests_Transport {
|
123 |
-
public $data = '';
|
124 |
-
public function request($url, $headers = array(), $data = array(), $options = array()) {
|
125 |
-
return $this->data;
|
126 |
-
}
|
127 |
-
public function request_multiple($requests, $options) {
|
128 |
-
foreach ($requests as $id => &$request) {
|
129 |
-
$handler = new RawTransport();
|
130 |
-
$handler->data = $request['options']['raw.data'];
|
131 |
-
$request = $handler->request($request['url'], $request['headers'], $request['data'], $request['options']);
|
132 |
-
}
|
133 |
-
|
134 |
-
return $requests;
|
135 |
-
}
|
136 |
-
public static function test() {
|
137 |
-
return true;
|
138 |
-
}
|
139 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/Requests/tests/phpunit.xml.dist
DELETED
@@ -1,35 +0,0 @@
|
|
1 |
-
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
-
<phpunit bootstrap="bootstrap.php">
|
3 |
-
<testsuites>
|
4 |
-
<testsuite name="Authentication">
|
5 |
-
<directory suffix=".php">Auth</directory>
|
6 |
-
</testsuite>
|
7 |
-
<testsuite name="Transports">
|
8 |
-
<directory suffix=".php">Transport</directory>
|
9 |
-
</testsuite>
|
10 |
-
<testsuite name="General">
|
11 |
-
<file>ChunkedEncoding.php</file>
|
12 |
-
<file>Cookies.php</file>
|
13 |
-
<file>IDNAEncoder.php</file>
|
14 |
-
<file>IRI.php</file>
|
15 |
-
<file>Requests.php</file>
|
16 |
-
<file>Response/Headers.php</file>
|
17 |
-
<file>SSL.php</file>
|
18 |
-
</testsuite>
|
19 |
-
</testsuites>
|
20 |
-
|
21 |
-
<logging>
|
22 |
-
<log type="coverage-html" target="coverage" title="PHPUnit"
|
23 |
-
charset="UTF-8" yui="true" highlight="true"
|
24 |
-
lowUpperBound="35" highLowerBound="90"/>
|
25 |
-
</logging>
|
26 |
-
|
27 |
-
<filter>
|
28 |
-
<blacklist>
|
29 |
-
<directory suffix=".php">.</directory>
|
30 |
-
</blacklist>
|
31 |
-
<whitelist>
|
32 |
-
<directory suffix=".php">../library</directory>
|
33 |
-
</whitelist>
|
34 |
-
</filter>
|
35 |
-
</phpunit>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/common.php
CHANGED
@@ -1,51 +1,73 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
2 |
|
3 |
-
function getEmailPassword() {
|
4 |
-
|
5 |
-
|
6 |
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
|
16 |
-
|
17 |
-
|
18 |
|
19 |
-
|
20 |
-
}
|
21 |
|
22 |
-
function getSite($sites, $site_id) {
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
|
|
27 |
}
|
|
|
|
|
28 |
}
|
29 |
|
30 |
-
|
31 |
-
|
|
|
32 |
|
33 |
-
|
34 |
-
|
35 |
-
|
|
|
|
|
|
|
36 |
|
37 |
-
|
38 |
-
|
|
|
|
|
|
|
39 |
}
|
40 |
-
$request = $mm->sites();
|
41 |
-
if ($request->status_code == 200){
|
42 |
-
$sites = $request->body;
|
43 |
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
}
|
49 |
}
|
50 |
-
|
51 |
-
?>
|
1 |
<?php
|
2 |
+
class MailmunchHelpers {
|
3 |
+
function __construct() {
|
4 |
+
}
|
5 |
|
6 |
+
function getEmailPassword() {
|
7 |
+
$mailmunch_email = get_option("mailmunch_user_email");
|
8 |
+
$mailmunch_password = get_option("mailmunch_user_password");
|
9 |
|
10 |
+
if (empty($mailmunch_email)) {
|
11 |
+
$current_user = wp_get_current_user();
|
12 |
+
update_option("mailmunch_user_email", $current_user->user_email);
|
13 |
+
}
|
14 |
|
15 |
+
if (empty($mailmunch_password)) {
|
16 |
+
update_option("mailmunch_user_password", base64_encode(uniqid()));
|
17 |
+
}
|
18 |
|
19 |
+
$mailmunch_email = get_option("mailmunch_user_email");
|
20 |
+
$mailmunch_password = get_option("mailmunch_user_password");
|
21 |
|
22 |
+
return array('email' => $mailmunch_email, 'password' => $mailmunch_password);
|
23 |
+
}
|
24 |
|
25 |
+
function getSite($sites, $site_id) {
|
26 |
+
foreach ($sites as $s) {
|
27 |
+
if ($s->id == intval($site_id)) {
|
28 |
+
$site = $s;
|
29 |
+
break;
|
30 |
+
}
|
31 |
}
|
32 |
+
|
33 |
+
return (isset($site) ? $site : false);
|
34 |
}
|
35 |
|
36 |
+
function createAndGetSites($mm) {
|
37 |
+
$site_url = home_url();
|
38 |
+
$site_name = get_bloginfo();
|
39 |
|
40 |
+
if (!$mm->hasSite()) {
|
41 |
+
$mm->createSite($site_name, $site_url);
|
42 |
+
}
|
43 |
+
$request = $mm->sites();
|
44 |
+
if ($request['response']['code'] == 200){
|
45 |
+
$sites = $request['body'];
|
46 |
|
47 |
+
return json_decode($sites);
|
48 |
+
}
|
49 |
+
else {
|
50 |
+
return array();
|
51 |
+
}
|
52 |
}
|
|
|
|
|
|
|
53 |
|
54 |
+
function createAndGetGuestSites($mm) {
|
55 |
+
// This is for GUEST users. Do NOT collect any user data.
|
56 |
+
$site_url = "";
|
57 |
+
$site_name = "WordPress";
|
58 |
+
|
59 |
+
if (!$mm->hasSite()) {
|
60 |
+
$mm->createSite($site_name, $site_url);
|
61 |
+
}
|
62 |
+
$request = $mm->sites();
|
63 |
+
if ($request['response']['code'] == 200){
|
64 |
+
$sites = $request['body'];
|
65 |
+
|
66 |
+
return json_decode($sites);
|
67 |
+
}
|
68 |
+
else {
|
69 |
+
return array();
|
70 |
+
}
|
71 |
}
|
72 |
}
|
73 |
+
?>
|
|
inc/mailmunchapi.php
CHANGED
@@ -1,7 +1,4 @@
|
|
1 |
<?php
|
2 |
-
require_once( plugin_dir_path( __FILE__ ) . 'Requests/library/Requests.php' );
|
3 |
-
Requests::register_autoloader();
|
4 |
-
|
5 |
class MailmunchApi {
|
6 |
protected $base_url = '';
|
7 |
protected $email = '';
|
@@ -20,24 +17,28 @@
|
|
20 |
return $this->ping('/sites');
|
21 |
}
|
22 |
|
23 |
-
function widgets($site_id) {
|
24 |
$this->requestType = 'get';
|
25 |
-
|
|
|
|
|
|
|
|
|
26 |
}
|
27 |
|
28 |
function getWidgetsHtml($site_id) {
|
29 |
$this->requestType = 'get';
|
30 |
-
return $this->ping('/sites/'.$site_id.'/widgets/wordpress');
|
31 |
}
|
32 |
|
33 |
function deleteWidget($site_id, $widget_id) {
|
34 |
-
$this->requestType = '
|
35 |
-
return $this->ping('/sites/'.$site_id.'/widgets/'.$widget_id);
|
36 |
}
|
37 |
|
38 |
function hasSite() {
|
39 |
$request = $this->sites();
|
40 |
-
$sites = $request
|
41 |
$result = json_decode($sites);
|
42 |
|
43 |
return (sizeof($result) > 0);
|
@@ -46,6 +47,19 @@
|
|
46 |
function createSite($sitename, $domain) {
|
47 |
$this->requestType = 'post';
|
48 |
return $this->ping('/sites', array(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
'site' => array(
|
50 |
'name' => $sitename,
|
51 |
'domain' => $domain
|
@@ -53,6 +67,18 @@
|
|
53 |
));
|
54 |
}
|
55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
function signUp() {
|
57 |
$this->requestType = 'post';
|
58 |
return $this->ping('/users', array(
|
@@ -64,38 +90,71 @@
|
|
64 |
), true);
|
65 |
}
|
66 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
function signIn() {
|
68 |
$this->requestType = 'post';
|
69 |
return $this->ping('/users/sign_in');
|
70 |
}
|
71 |
|
72 |
function validPassword() {
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
|
|
|
|
|
|
82 |
}
|
83 |
|
84 |
-
function isNewUser() {
|
|
|
|
|
|
|
85 |
$this->requestType = 'get';
|
86 |
-
|
|
|
87 |
}
|
88 |
|
89 |
function ping($path, $options=array(), $skipAuth=false) {
|
90 |
$auth = array('auth' => array($this->email, $this->password));
|
91 |
$type = $this->requestType;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
if ($type != 'post') {
|
93 |
-
$request =
|
94 |
}
|
95 |
else {
|
96 |
-
$
|
|
|
|
|
|
|
|
|
|
|
97 |
}
|
|
|
98 |
return $request;
|
99 |
}
|
100 |
}
|
101 |
-
?>
|
1 |
<?php
|
|
|
|
|
|
|
2 |
class MailmunchApi {
|
3 |
protected $base_url = '';
|
4 |
protected $email = '';
|
17 |
return $this->ping('/sites');
|
18 |
}
|
19 |
|
20 |
+
function widgets($site_id, $widget_type_name) {
|
21 |
$this->requestType = 'get';
|
22 |
+
if (!empty($widget_type_name)) {
|
23 |
+
return $this->ping('/sites/'.$site_id.'/widgets?widget_type_name='.$widget_type_name);
|
24 |
+
} else {
|
25 |
+
return $this->ping('/sites/'.$site_id.'/widgets');
|
26 |
+
}
|
27 |
}
|
28 |
|
29 |
function getWidgetsHtml($site_id) {
|
30 |
$this->requestType = 'get';
|
31 |
+
return $this->ping('/sites/'.$site_id.'/widgets/wordpress?plugin=mailmunch');
|
32 |
}
|
33 |
|
34 |
function deleteWidget($site_id, $widget_id) {
|
35 |
+
$this->requestType = 'post';
|
36 |
+
return $this->ping('/sites/'.$site_id.'/widgets/'.$widget_id.'/delete');
|
37 |
}
|
38 |
|
39 |
function hasSite() {
|
40 |
$request = $this->sites();
|
41 |
+
$sites = $request['body'];
|
42 |
$result = json_decode($sites);
|
43 |
|
44 |
return (sizeof($result) > 0);
|
47 |
function createSite($sitename, $domain) {
|
48 |
$this->requestType = 'post';
|
49 |
return $this->ping('/sites', array(
|
50 |
+
'site' => array(
|
51 |
+
'name' => $sitename,
|
52 |
+
'domain' => $domain,
|
53 |
+
'wordpress' => true,
|
54 |
+
'external_id' => get_option("mailmunch_wordpress_instance_id")
|
55 |
+
)
|
56 |
+
));
|
57 |
+
}
|
58 |
+
|
59 |
+
function updateSite($sitename, $domain) {
|
60 |
+
$this->requestType = 'post';
|
61 |
+
return $this->ping('/wordpress/update_site', array(
|
62 |
+
'external_id' => get_option("mailmunch_wordpress_instance_id"),
|
63 |
'site' => array(
|
64 |
'name' => $sitename,
|
65 |
'domain' => $domain
|
67 |
));
|
68 |
}
|
69 |
|
70 |
+
function createGuestUser() {
|
71 |
+
$this->requestType = 'post';
|
72 |
+
return $this->ping('/users', array(
|
73 |
+
'user' => array(
|
74 |
+
'email' => $this->email,
|
75 |
+
'password' => $this->password,
|
76 |
+
'guest_user' => true,
|
77 |
+
'referral' => "wordpress-plugin"
|
78 |
+
)
|
79 |
+
), true);
|
80 |
+
}
|
81 |
+
|
82 |
function signUp() {
|
83 |
$this->requestType = 'post';
|
84 |
return $this->ping('/users', array(
|
90 |
), true);
|
91 |
}
|
92 |
|
93 |
+
function updateGuest($new_email, $new_password) {
|
94 |
+
$this->requestType = 'post';
|
95 |
+
return $this->ping('/wordpress/update_guest', array(
|
96 |
+
'user' => array(
|
97 |
+
'email' => $new_email,
|
98 |
+
'password' => $new_password,
|
99 |
+
'guest_user' => false
|
100 |
+
)
|
101 |
+
), true);
|
102 |
+
}
|
103 |
+
|
104 |
function signIn() {
|
105 |
$this->requestType = 'post';
|
106 |
return $this->ping('/users/sign_in');
|
107 |
}
|
108 |
|
109 |
function validPassword() {
|
110 |
+
$this->requestType = 'get';
|
111 |
+
$request = $this->ping('/sites');
|
112 |
+
if( is_wp_error( $request ) ) {
|
113 |
+
return new WP_Error( 'broke', "Unable to connect to MailMunch. Please try again later." );
|
114 |
+
}
|
115 |
+
|
116 |
+
if ($request['response']['code'] == 200){
|
117 |
+
return true;
|
118 |
+
}
|
119 |
+
else {
|
120 |
+
return false;
|
121 |
+
}
|
122 |
}
|
123 |
|
124 |
+
function isNewUser($email) {
|
125 |
+
if (empty($email)) {
|
126 |
+
$email = $this->email;
|
127 |
+
}
|
128 |
$this->requestType = 'get';
|
129 |
+
$result = $this->ping('/users/exists?user[email]='. $email, array(), true);
|
130 |
+
return $result['body'] == 'false';
|
131 |
}
|
132 |
|
133 |
function ping($path, $options=array(), $skipAuth=false) {
|
134 |
$auth = array('auth' => array($this->email, $this->password));
|
135 |
$type = $this->requestType;
|
136 |
+
$url = $this->base_url. $path;
|
137 |
+
$args = array(
|
138 |
+
'headers' => array_merge($this->headers, array(
|
139 |
+
'Authorization' => 'Basic ' . base64_encode( $this->email . ':' . $this->password )
|
140 |
+
)
|
141 |
+
),
|
142 |
+
'timeout' => 120
|
143 |
+
);
|
144 |
+
|
145 |
if ($type != 'post') {
|
146 |
+
$request = wp_remote_get($url, $args);
|
147 |
}
|
148 |
else {
|
149 |
+
$args = array_merge($args, array('method' => 'POST', 'body' => $options));
|
150 |
+
$request = wp_remote_post($url, $args);
|
151 |
+
}
|
152 |
+
|
153 |
+
if ( !is_wp_error( $request ) && $request['response']['code'] == 500 ) {
|
154 |
+
return new WP_Error( 'broke', "Internal Server Error" );
|
155 |
}
|
156 |
+
|
157 |
return $request;
|
158 |
}
|
159 |
}
|
160 |
+
?>
|
inc/sidebar_widget.php
ADDED
@@ -0,0 +1,131 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Mailmunch_Sidebar_Widget extends WP_Widget {
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Register widget with WordPress.
|
6 |
+
*/
|
7 |
+
function __construct() {
|
8 |
+
parent::__construct(
|
9 |
+
'mailmunch_widget', // Base ID
|
10 |
+
__('Sidebar MailMunch Form', 'text_domain'), // Name
|
11 |
+
array( 'description' => __( 'Displays a MailMunch optin form in Sidebar', 'text_domain' ), ) // Args
|
12 |
+
);
|
13 |
+
}
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Front-end display of widget.
|
17 |
+
*
|
18 |
+
* @see WP_Widget::widget()
|
19 |
+
*
|
20 |
+
* @param array $args Widget arguments.
|
21 |
+
* @param array $instance Saved values from database.
|
22 |
+
*/
|
23 |
+
public function widget( $args, $instance ) {
|
24 |
+
if ( isset( $instance[ 'form_id' ] ) ) {
|
25 |
+
$form_id = $instance[ 'form_id' ];
|
26 |
+
}
|
27 |
+
|
28 |
+
if (!empty($form_id)) {
|
29 |
+
echo $args['before_widget'];
|
30 |
+
if ( ! empty( $instance['title'] ) ) {
|
31 |
+
echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ). $args['after_title'];
|
32 |
+
}
|
33 |
+
echo "<div class='mailmunch-wordpress-widget mailmunch-wordpress-widget-".$form_id."' style='display: none !important;'></div>";
|
34 |
+
echo $args['after_widget'];
|
35 |
+
}
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Back-end widget form.
|
40 |
+
*
|
41 |
+
* @see WP_Widget::form()
|
42 |
+
*
|
43 |
+
* @param array $instance Previously saved values from database.
|
44 |
+
*/
|
45 |
+
public function form( $instance ) {
|
46 |
+
if ( isset( $instance[ 'title' ] ) ) {
|
47 |
+
$title = $instance[ 'title' ];
|
48 |
+
}
|
49 |
+
else {
|
50 |
+
$title = __( 'Optin Form', 'text_domain' );
|
51 |
+
}
|
52 |
+
|
53 |
+
if ( isset( $instance[ 'form_id' ] ) ) {
|
54 |
+
$form_id = $instance[ 'form_id' ];
|
55 |
+
}
|
56 |
+
|
57 |
+
$mailmunch_data = unserialize(get_option("mailmunch_data"));
|
58 |
+
$mailmunch_user_email = get_option("mailmunch_user_email");
|
59 |
+
$mailmunch_user_password = get_option("mailmunch_user_password");
|
60 |
+
if (!empty($mailmunch_user_email) && !empty($mailmunch_user_password) && !empty($mailmunch_data["site_id"])) {
|
61 |
+
$mailmunch_site_id = $mailmunch_data["site_id"];
|
62 |
+
$mm = new MailmunchApi($mailmunch_user_email, $mailmunch_user_password, "http://".MAILMUNCH_URL);
|
63 |
+
$result = $mm->widgets($mailmunch_site_id, "Sidebar");
|
64 |
+
if ( !is_wp_error( $result ) ) {
|
65 |
+
$widgets = json_decode($result['body']);
|
66 |
+
}
|
67 |
+
} else {
|
68 |
+
?>
|
69 |
+
<p>No MailMunch account found. <a href="<?php echo admin_url( 'admin.php?page='.MAILMUNCH_SLUG ); ?>">Go Here First</a></p>
|
70 |
+
<?php
|
71 |
+
return;
|
72 |
+
}
|
73 |
+
?>
|
74 |
+
<script type="text/javascript">
|
75 |
+
window.onmessage = function (e) {
|
76 |
+
if (e.data === 'refresh') {
|
77 |
+
top.location.reload();
|
78 |
+
}
|
79 |
+
};
|
80 |
+
</script>
|
81 |
+
<?php
|
82 |
+
if (sizeof($widgets) > 0) {
|
83 |
+
?>
|
84 |
+
<p>
|
85 |
+
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
|
86 |
+
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
|
87 |
+
</p>
|
88 |
+
|
89 |
+
<p>
|
90 |
+
<label for="<?php echo $this->get_field_id( 'form_id' ); ?>"><?php _e( 'Optin Form:' ); ?></label>
|
91 |
+
<select class="widefat" id="<?php echo $this->get_field_id( 'form_id' ); ?>" name="<?php echo $this->get_field_name( 'form_id' ); ?>">
|
92 |
+
<option value="">None</option>
|
93 |
+
<?php
|
94 |
+
foreach ($widgets as $widget) {
|
95 |
+
echo "<option value='".$widget->id."'";
|
96 |
+
if ($form_id == $widget->id) { echo " selected"; };
|
97 |
+
echo ">".$widget->name."</option>";
|
98 |
+
}
|
99 |
+
?>
|
100 |
+
</select>
|
101 |
+
</p>
|
102 |
+
|
103 |
+
<p><a href="//<?php echo MAILMUNCH_URL ?>/sso?email=<?php echo urlencode($mailmunch_user_email) ?>&password=<?php echo urlencode($mailmunch_user_password) ?>&next_url=<?php echo urlencode("/sites/".$mailmunch_data["site_id"]."/widgets/new?wp_layout=1&widget_type=Sidebar") ?>" target="_blank">Create New Sidebar Form</a></p>
|
104 |
+
<?php
|
105 |
+
} else {
|
106 |
+
?>
|
107 |
+
<p>No sidebar forms found. <a href="//<?php echo MAILMUNCH_URL ?>/sso?email=<?php echo urlencode($mailmunch_user_email) ?>&password=<?php echo urlencode($mailmunch_user_password) ?>&next_url=<?php echo urlencode("/sites/".$mailmunch_data["site_id"]."/widgets/new?wp_layout=1&widget_type=Sidebar") ?>" target="_blank">Create Your First One</a></p>
|
108 |
+
<?php
|
109 |
+
}
|
110 |
+
|
111 |
+
}
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Sanitize widget form values as they are saved.
|
115 |
+
*
|
116 |
+
* @see WP_Widget::update()
|
117 |
+
*
|
118 |
+
* @param array $new_instance Values just sent to be saved.
|
119 |
+
* @param array $old_instance Previously saved values from database.
|
120 |
+
*
|
121 |
+
* @return array Updated safe values to be saved.
|
122 |
+
*/
|
123 |
+
public function update( $new_instance, $old_instance ) {
|
124 |
+
$instance = array();
|
125 |
+
$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
|
126 |
+
$instance['form_id'] = ( ! empty( $new_instance['form_id'] ) ) ? strip_tags( $new_instance['form_id'] ) : '';
|
127 |
+
|
128 |
+
return $instance;
|
129 |
+
}
|
130 |
+
|
131 |
+
}
|
js/admin.js
CHANGED
@@ -28,9 +28,25 @@ window.onmessage = function (e) {
|
|
28 |
function showSignInForm() {
|
29 |
document.getElementById("sign-up-form").style.display = 'none';
|
30 |
document.getElementById("sign-in-form").style.display = 'block';
|
|
|
|
|
31 |
}
|
32 |
|
33 |
function showSignUpForm() {
|
34 |
document.getElementById("sign-in-form").style.display = 'none';
|
35 |
document.getElementById("sign-up-form").style.display = 'block';
|
36 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
function showSignInForm() {
|
29 |
document.getElementById("sign-up-form").style.display = 'none';
|
30 |
document.getElementById("sign-in-form").style.display = 'block';
|
31 |
+
document.getElementById('why-account').style.display = 'none';
|
32 |
+
showSignupBox(500, 450);
|
33 |
}
|
34 |
|
35 |
function showSignUpForm() {
|
36 |
document.getElementById("sign-in-form").style.display = 'none';
|
37 |
document.getElementById("sign-up-form").style.display = 'block';
|
38 |
+
document.getElementById('why-account').style.display = 'none';
|
39 |
+
showSignupBox(600, 500);
|
40 |
+
}
|
41 |
+
|
42 |
+
function showSignupBox(width, height) {
|
43 |
+
if (!width) width = 600;
|
44 |
+
if (!height) height = 500;
|
45 |
+
tb_show("Create Account","#TB_inline?width="+width+"&height="+height+"&inlineId=signup-signin-box",null);
|
46 |
+
return false;
|
47 |
+
}
|
48 |
+
|
49 |
+
function showWhyAccount() {
|
50 |
+
document.getElementById('why-account').style.display = 'block';
|
51 |
+
showSignupBox(600, 600);
|
52 |
+
}
|
mailmunch.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
-
Plugin Name: MailMunch
|
4 |
Plugin URI: http://www.mailmunch.co
|
5 |
Description: Collect email addresses from website visitors and grow your subscribers with our attention grabbing optin-forms, entry/exit intent technology, and other effective lead-generation forms.
|
6 |
-
Version: 1.
|
7 |
Author: MailMunch
|
8 |
Author URI: http://www.mailmunch.co
|
9 |
License: GPL2
|
@@ -11,35 +11,51 @@
|
|
11 |
|
12 |
require_once( plugin_dir_path( __FILE__ ) . 'inc/mailmunchapi.php' );
|
13 |
require_once( plugin_dir_path( __FILE__ ) . 'inc/common.php' );
|
|
|
14 |
|
15 |
define( 'MAILMUNCH_SLUG', "mailmunch");
|
16 |
-
define( 'MAILMUNCH_VER', "1.
|
17 |
define( 'MAILMUNCH_URL', "www.mailmunch.co");
|
18 |
|
|
|
|
|
|
|
|
|
|
|
19 |
// Adding Admin Menu
|
20 |
-
add_action( 'admin_menu', '
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
|
22 |
-
function
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
}
|
27 |
|
28 |
-
|
29 |
-
|
30 |
-
|
|
|
|
|
|
|
31 |
}
|
32 |
|
33 |
-
function
|
34 |
wp_enqueue_style(MAILMUNCH_SLUG . '-admin-styles', plugins_url( 'css/admin.css', __FILE__ ), array(), MAILMUNCH_VER );
|
35 |
}
|
36 |
|
37 |
-
function
|
38 |
wp_enqueue_script(MAILMUNCH_SLUG . '-admin-script', plugins_url( 'js/admin.js', __FILE__ ), array( 'jquery' ), MAILMUNCH_VER );
|
39 |
}
|
40 |
|
41 |
// Adding MailMunch Asset Files (JS + CSS)
|
42 |
-
function
|
43 |
$mailmunch_data = unserialize(get_option("mailmunch_data"));
|
44 |
if (!$mailmunch_data["script_src"]) return;
|
45 |
|
@@ -70,27 +86,28 @@
|
|
70 |
if (count($mailmunch_data) == 0) return;
|
71 |
|
72 |
if (function_exists('wp_footer')) {
|
73 |
-
|
74 |
-
add_action( 'wp_footer', 'load_mailmunch_asset_code' );
|
75 |
-
}
|
76 |
}
|
77 |
elseif (function_exists('wp_head')) {
|
78 |
-
|
79 |
-
add_action( 'wp_head', 'load_mailmunch_asset_code' );
|
80 |
-
}
|
81 |
}
|
82 |
}
|
83 |
|
84 |
-
function
|
85 |
if (is_single() || is_page()) {
|
86 |
-
$content =
|
87 |
$content = "<div class='mailmunch-forms-before-post' style='display: none !important;'></div>" . $content . "<div class='mailmunch-forms-after-post' style='display: none !important;'></div>";
|
88 |
}
|
89 |
|
90 |
return $content;
|
91 |
}
|
92 |
|
93 |
-
function
|
|
|
|
|
|
|
|
|
|
|
94 |
$closing_p = '</p>';
|
95 |
$paragraphs = explode($closing_p, $content);
|
96 |
if ($paragraph_id == "middle") {
|
@@ -109,15 +126,16 @@
|
|
109 |
return implode('', $paragraphs);
|
110 |
}
|
111 |
|
112 |
-
add_filter( 'the_content', '
|
113 |
|
114 |
-
function
|
115 |
return "<div class='mailmunch-forms-short-code mailmunch-forms-widget-".$atts['id']."' style='display: none !important;'></div>";
|
116 |
}
|
117 |
|
118 |
-
add_shortcode('mailmunch-form', '
|
119 |
|
120 |
function mailmunch_setup() {
|
|
|
121 |
$mailmunch_data = unserialize(get_option("mailmunch_data"));
|
122 |
$mailmunch_data["site_url"] = home_url();
|
123 |
$mailmunch_data["site_name"] = get_bloginfo();
|
@@ -125,7 +143,7 @@
|
|
125 |
|
126 |
// This is a POST request. Let's save data first.
|
127 |
if ($_POST) {
|
128 |
-
$post_data = $_POST["mailmunch_data"];
|
129 |
$post_action = $_POST["action"];
|
130 |
|
131 |
if ($post_action == "save_settings") {
|
@@ -138,7 +156,8 @@
|
|
138 |
$mm = new MailmunchApi($_POST["email"], $_POST["password"], "http://".MAILMUNCH_URL);
|
139 |
if ($mm->validPassword()) {
|
140 |
update_option("mailmunch_user_email", $_POST["email"]);
|
141 |
-
update_option("mailmunch_user_password", $_POST["password"]);
|
|
|
142 |
}
|
143 |
|
144 |
} else if ($post_action == "sign_up") {
|
@@ -146,20 +165,29 @@
|
|
146 |
if (empty($_POST["email"]) || empty($_POST["password"])) {
|
147 |
$invalid_email_password = true;
|
148 |
} else {
|
149 |
-
|
150 |
-
update_option("mailmunch_user_password", $_POST["password"]);
|
151 |
-
$mailmunch_data = unserialize(get_option("mailmunch_data"));
|
152 |
-
$mailmunch_data["site_url"] = $_POST["site_url"];
|
153 |
-
$mailmunch_data["site_name"] = $_POST["site_name"];
|
154 |
-
update_option("mailmunch_data", serialize($mailmunch_data));
|
155 |
-
|
156 |
-
$account_info = getEmailPassword();
|
157 |
$mailmunch_email = $account_info['email'];
|
158 |
$mailmunch_password = $account_info['password'];
|
159 |
|
160 |
$mm = new MailmunchApi($mailmunch_email, $mailmunch_password, "http://".MAILMUNCH_URL);
|
161 |
-
if ($mm->isNewUser()) {
|
162 |
-
$mm->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
} else {
|
164 |
$user_exists = true;
|
165 |
}
|
@@ -171,143 +199,88 @@
|
|
171 |
$mailmunch_data["site_url"] = home_url();
|
172 |
$mailmunch_data["site_name"] = get_bloginfo();
|
173 |
update_option("mailmunch_data", serialize($mailmunch_data));
|
174 |
-
delete_option("mailmunch_user_email"
|
175 |
-
delete_option("mailmunch_user_password"
|
176 |
|
177 |
} else if ($post_action == "delete_widget") {
|
178 |
|
179 |
if ($_POST["site_id"] && $_POST["widget_id"]) {
|
180 |
-
$account_info = getEmailPassword();
|
181 |
$mailmunch_email = $account_info['email'];
|
182 |
$mailmunch_password = $account_info['password'];
|
183 |
$mm = new MailmunchApi($account_info['email'], $account_info["password"], "http://".MAILMUNCH_URL);
|
184 |
$request = $mm->deleteWidget($_POST["site_id"], $_POST["widget_id"]);
|
185 |
}
|
186 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
187 |
}
|
188 |
}
|
189 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190 |
// If we already have the user's email stored, let's create the API instance
|
191 |
// If we don't have it yet, make sure NOT to phone home any user data
|
192 |
if (get_option("mailmunch_user_email") != "") {
|
193 |
-
$account_info = getEmailPassword();
|
194 |
$mailmunch_email = $account_info['email'];
|
195 |
$mailmunch_password = $account_info['password'];
|
196 |
|
197 |
$mm = new MailmunchApi($mailmunch_email, $mailmunch_password, "http://".MAILMUNCH_URL);
|
198 |
-
$
|
199 |
-
}
|
200 |
-
|
201 |
-
// If we don't already have the user's email, show the sign up / sign in form to the user
|
202 |
-
if (get_option("mailmunch_user_email") == "" || !$valid_password || $invalid_email_password) {
|
203 |
-
$current_user = wp_get_current_user();
|
204 |
-
?>
|
205 |
-
<div id="sign-up-form" class="container<?php if (!$_POST || ($_POST["action"] != "sign_in" && $_POST["action"] != "unlink_account")) { ?> active<?php } ?>">
|
206 |
-
<div class="page-header">
|
207 |
-
<h1>Create Account</h1>
|
208 |
-
</div>
|
209 |
-
|
210 |
-
<?php add_thickbox(); ?>
|
211 |
-
|
212 |
-
<div id="why-account" style="display:none;">
|
213 |
-
<p>
|
214 |
-
There are a few reasons we require you to create an account to use MailMunch:
|
215 |
-
</p>
|
216 |
-
|
217 |
-
<ol>
|
218 |
-
<li>MailMunch is a not just a Wordpress plugin but also a standalone service. You can later use the same account on your other non-Wordpress websites too.</li>
|
219 |
-
<li>Creating an account helps us better serve you, and provide you with better customer support.</li>
|
220 |
-
<li>It gives us the ability to fix bugs and improve performance faster, and without you having to update the plugin yourself.</li>
|
221 |
-
</ol>
|
222 |
-
|
223 |
-
<p><strong>We have a strict no-spam policy. We will never spam you or share your information with any third-party.</strong> If you have any questions, please <a href="http://www.mailmunch.co/contact" target="_blank">contact us</a>.</p>
|
224 |
-
</div>
|
225 |
-
|
226 |
-
<p>We will now create your account on MailMunch (<a href="#TB_inline?width=500&height=250&inlineId=why-account" title="Why do I need an account to use the MailMunch plugin?" class="thickbox">Why?</a>). Make sure the following information is correct:</p>
|
227 |
-
|
228 |
-
<?php if ($user_exists) { ?>
|
229 |
-
<div id="invalid-alert" class="alert alert-danger" role="alert">Account with this email already exists. Please sign in using your password.</div>
|
230 |
-
<?php } else if ($invalid_email_password) { ?>
|
231 |
-
<div id="invalid-alert" class="alert alert-danger" role="alert">Invalid email or password. Please enter valid information below.</div>
|
232 |
-
<?php } ?>
|
233 |
-
|
234 |
-
<div class="form-container">
|
235 |
-
<form action="" method="POST">
|
236 |
-
<input type="hidden" name="action" value="sign_up" />
|
237 |
-
|
238 |
-
<div class="form-group">
|
239 |
-
<label>Wordpress Name</label>
|
240 |
-
<input type="text" placeholder="Site Name" name="site_name" value="<?php echo $mailmunch_data["site_name"] ?>" class="form-control">
|
241 |
-
</div>
|
242 |
-
|
243 |
-
<div class="form-group">
|
244 |
-
<label>Wordpress URL</label>
|
245 |
-
<input type="text" placeholder="Site URL" name="site_url" value="<?php echo $mailmunch_data["site_url"] ?>" class="form-control">
|
246 |
-
</div>
|
247 |
-
|
248 |
-
<div class="form-group">
|
249 |
-
<label>Email Address</label>
|
250 |
-
<input type="email" placeholder="Email Address" name="email" value="<?php echo $current_user->user_email ?>" class="form-control">
|
251 |
-
</div>
|
252 |
-
|
253 |
-
<div class="form-group">
|
254 |
-
<label>Password</label>
|
255 |
-
<input type="password" placeholder="Password" name="password" class="form-control">
|
256 |
-
</div>
|
257 |
-
|
258 |
-
<div class="form-group">
|
259 |
-
<input type="submit" value="Sign Up »" class="btn btn-success btn-lg" />
|
260 |
-
</div>
|
261 |
-
</form>
|
262 |
-
</div>
|
263 |
-
|
264 |
-
<p>Already have an account? <a id="show-sign-in" onclick="showSignInForm();">Sign In</a></p>
|
265 |
-
</div>
|
266 |
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
<p>Sign in using your email and password below.</p>
|
273 |
-
|
274 |
-
<?php if ($_POST && $_POST["action"] == "sign_in") { ?>
|
275 |
-
<div id="invalid-alert" class="alert alert-danger" role="alert">Invalid Email or Password. Please try again.</div>
|
276 |
-
<?php } ?>
|
277 |
-
|
278 |
-
<div class="form-container">
|
279 |
-
<form action="" method="POST">
|
280 |
-
<input type="hidden" name="action" value="sign_in" />
|
281 |
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
|
|
|
|
|
|
290 |
|
291 |
-
|
292 |
-
<input type="submit" value="Sign In »" class="btn btn-success btn-lg" />
|
293 |
-
</div>
|
294 |
-
</form>
|
295 |
-
</div>
|
296 |
|
297 |
-
<p>Forgot your password? <a href="http://<?php echo MAILMUNCH_URL; ?>/users/password/new" target="_blank">Click here</a> to retrieve it.</p>
|
298 |
-
<p>Don't have an account? <a id="show-sign-up" onclick="showSignUpForm();">Sign Up</a></p>
|
299 |
-
</div>
|
300 |
-
<?php
|
301 |
|
302 |
-
|
303 |
-
|
|
|
|
|
|
|
304 |
}
|
305 |
|
306 |
-
|
307 |
-
|
308 |
-
if ($mailmunch_data["site_id"]) {
|
309 |
// If there's a site already chosen, we need to get and save it's script_src in WordPress
|
310 |
-
$site = getSite($sites, $mailmunch_data["site_id"]);
|
311 |
|
312 |
if ($site) {
|
313 |
$mailmunch_data = array_merge(unserialize(get_option('mailmunch_data')), array("script_src" => $site->javascript_url));
|
@@ -322,10 +295,10 @@
|
|
322 |
}
|
323 |
}
|
324 |
|
325 |
-
if (
|
326 |
// If there's NO chosen site yet
|
327 |
|
328 |
-
if (sizeof($sites) == 1 && $sites[0]->name == get_bloginfo()) {
|
329 |
// If this mailmunch account only has 1 site and its name matches this WordPress blogs
|
330 |
|
331 |
$site = $sites[0];
|
@@ -344,21 +317,51 @@
|
|
344 |
|
345 |
<p>Choose the site that you would like to link with your WordPress.</p>
|
346 |
|
347 |
-
<
|
348 |
-
<
|
349 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
350 |
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
<?php } ?>
|
355 |
-
</select>
|
356 |
-
</div>
|
357 |
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
362 |
</div>
|
363 |
<?php
|
364 |
return;
|
@@ -366,9 +369,112 @@
|
|
366 |
}
|
367 |
|
368 |
$request = $mm->getWidgetsHtml($mailmunch_data["site_id"]);
|
369 |
-
$widgets = $request
|
370 |
$widgets = str_replace("{{EMAIL}}", $mailmunch_email, $widgets);
|
371 |
$widgets = str_replace("{{PASSWORD}}", $mailmunch_password, $widgets);
|
372 |
echo $widgets;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
373 |
}
|
374 |
-
?>
|
1 |
<?php
|
2 |
/*
|
3 |
+
Plugin Name: MailMunch - Increase your Email Subscribers by over 500%
|
4 |
Plugin URI: http://www.mailmunch.co
|
5 |
Description: Collect email addresses from website visitors and grow your subscribers with our attention grabbing optin-forms, entry/exit intent technology, and other effective lead-generation forms.
|
6 |
+
Version: 1.4.2
|
7 |
Author: MailMunch
|
8 |
Author URI: http://www.mailmunch.co
|
9 |
License: GPL2
|
11 |
|
12 |
require_once( plugin_dir_path( __FILE__ ) . 'inc/mailmunchapi.php' );
|
13 |
require_once( plugin_dir_path( __FILE__ ) . 'inc/common.php' );
|
14 |
+
require_once( plugin_dir_path( __FILE__ ) . 'inc/sidebar_widget.php' );
|
15 |
|
16 |
define( 'MAILMUNCH_SLUG', "mailmunch");
|
17 |
+
define( 'MAILMUNCH_VER', "1.4.2");
|
18 |
define( 'MAILMUNCH_URL', "www.mailmunch.co");
|
19 |
|
20 |
+
// Create unique WordPress instance ID
|
21 |
+
if (get_option("mailmunch_wordpress_instance_id") == "") {
|
22 |
+
update_option("mailmunch_wordpress_instance_id", uniqid());
|
23 |
+
}
|
24 |
+
|
25 |
// Adding Admin Menu
|
26 |
+
add_action( 'admin_menu', 'mailmunch_register_page' );
|
27 |
+
|
28 |
+
function mailmunch_register_page(){
|
29 |
+
add_options_page('MailMunch', 'MailMunch', 'manage_options', MAILMUNCH_SLUG, 'mailmunch_setup');
|
30 |
+
$menu_page = add_menu_page( 'MailMunch Settings', 'MailMunch', 'manage_options', MAILMUNCH_SLUG, 'mailmunch_setup', plugins_url( 'img/icon.png', __FILE__ ), 102.786 );
|
31 |
+
// If successful, load admin assets only on that page.
|
32 |
+
if ($menu_page) add_action('load-' . $menu_page, 'mailmunch_load_plugin_assets');
|
33 |
+
}
|
34 |
|
35 |
+
function mailmunch_plugin_settings_link($links) {
|
36 |
+
$settings_link = '<a href="options-general.php?page='.MAILMUNCH_SLUG.'">Settings</a>';
|
37 |
+
array_unshift($links, $settings_link);
|
38 |
+
return $links;
|
39 |
}
|
40 |
|
41 |
+
$plugin = plugin_basename(__FILE__);
|
42 |
+
add_filter('plugin_action_links_'.$plugin, 'mailmunch_plugin_settings_link');
|
43 |
+
|
44 |
+
function mailmunch_load_plugin_assets() {
|
45 |
+
add_action( 'admin_enqueue_scripts', 'mailmunch_enqueue_admin_styles' );
|
46 |
+
add_action( 'admin_enqueue_scripts', 'mailmunch_enqueue_admin_scripts' );
|
47 |
}
|
48 |
|
49 |
+
function mailmunch_enqueue_admin_styles() {
|
50 |
wp_enqueue_style(MAILMUNCH_SLUG . '-admin-styles', plugins_url( 'css/admin.css', __FILE__ ), array(), MAILMUNCH_VER );
|
51 |
}
|
52 |
|
53 |
+
function mailmunch_enqueue_admin_scripts() {
|
54 |
wp_enqueue_script(MAILMUNCH_SLUG . '-admin-script', plugins_url( 'js/admin.js', __FILE__ ), array( 'jquery' ), MAILMUNCH_VER );
|
55 |
}
|
56 |
|
57 |
// Adding MailMunch Asset Files (JS + CSS)
|
58 |
+
function mailmunch_load_asset_code() {
|
59 |
$mailmunch_data = unserialize(get_option("mailmunch_data"));
|
60 |
if (!$mailmunch_data["script_src"]) return;
|
61 |
|
86 |
if (count($mailmunch_data) == 0) return;
|
87 |
|
88 |
if (function_exists('wp_footer')) {
|
89 |
+
add_action( 'wp_footer', 'mailmunch_load_asset_code' );
|
|
|
|
|
90 |
}
|
91 |
elseif (function_exists('wp_head')) {
|
92 |
+
add_action( 'wp_head', 'mailmunch_load_asset_code' );
|
|
|
|
|
93 |
}
|
94 |
}
|
95 |
|
96 |
+
function mailmunch_add_post_containers($content) {
|
97 |
if (is_single() || is_page()) {
|
98 |
+
$content = mailmunch_insert_form_after_paragraph("<div class='mailmunch-forms-in-post-middle' style='display: none !important;'></div>", "middle", $content);
|
99 |
$content = "<div class='mailmunch-forms-before-post' style='display: none !important;'></div>" . $content . "<div class='mailmunch-forms-after-post' style='display: none !important;'></div>";
|
100 |
}
|
101 |
|
102 |
return $content;
|
103 |
}
|
104 |
|
105 |
+
function mailmunch_register_sidebar_widget() {
|
106 |
+
register_widget( 'Mailmunch_Sidebar_Widget' );
|
107 |
+
}
|
108 |
+
add_action( 'widgets_init', 'mailmunch_register_sidebar_widget' );
|
109 |
+
|
110 |
+
function mailmunch_insert_form_after_paragraph($insertion, $paragraph_id, $content) {
|
111 |
$closing_p = '</p>';
|
112 |
$paragraphs = explode($closing_p, $content);
|
113 |
if ($paragraph_id == "middle") {
|
126 |
return implode('', $paragraphs);
|
127 |
}
|
128 |
|
129 |
+
add_filter( 'the_content', 'mailmunch_add_post_containers' );
|
130 |
|
131 |
+
function mailmunch_shortcode_form($atts) {
|
132 |
return "<div class='mailmunch-forms-short-code mailmunch-forms-widget-".$atts['id']."' style='display: none !important;'></div>";
|
133 |
}
|
134 |
|
135 |
+
add_shortcode('mailmunch-form', 'mailmunch_shortcode_form');
|
136 |
|
137 |
function mailmunch_setup() {
|
138 |
+
$mm_helpers = new MailmunchHelpers();
|
139 |
$mailmunch_data = unserialize(get_option("mailmunch_data"));
|
140 |
$mailmunch_data["site_url"] = home_url();
|
141 |
$mailmunch_data["site_name"] = get_bloginfo();
|
143 |
|
144 |
// This is a POST request. Let's save data first.
|
145 |
if ($_POST) {
|
146 |
+
$post_data = (isset($_POST["mailmunch_data"]) ? $_POST["mailmunch_data"] : array());
|
147 |
$post_action = $_POST["action"];
|
148 |
|
149 |
if ($post_action == "save_settings") {
|
156 |
$mm = new MailmunchApi($_POST["email"], $_POST["password"], "http://".MAILMUNCH_URL);
|
157 |
if ($mm->validPassword()) {
|
158 |
update_option("mailmunch_user_email", $_POST["email"]);
|
159 |
+
update_option("mailmunch_user_password", base64_encode($_POST["password"]));
|
160 |
+
delete_option("mailmunch_guest_user");
|
161 |
}
|
162 |
|
163 |
} else if ($post_action == "sign_up") {
|
165 |
if (empty($_POST["email"]) || empty($_POST["password"])) {
|
166 |
$invalid_email_password = true;
|
167 |
} else {
|
168 |
+
$account_info = $mm_helpers->getEmailPassword();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
169 |
$mailmunch_email = $account_info['email'];
|
170 |
$mailmunch_password = $account_info['password'];
|
171 |
|
172 |
$mm = new MailmunchApi($mailmunch_email, $mailmunch_password, "http://".MAILMUNCH_URL);
|
173 |
+
if ($mm->isNewUser($_POST['email'])) {
|
174 |
+
$update_result = $mm->updateGuest($_POST['email'], $_POST['password']);
|
175 |
+
$result = json_decode($update_result['body']);
|
176 |
+
update_option("mailmunch_user_email", $result->email);
|
177 |
+
update_option("mailmunch_user_password", base64_encode($_POST['password']));
|
178 |
+
if (!$result->guest_user) { delete_option("mailmunch_guest_user"); }
|
179 |
+
$mailmunch_email = $result->email;
|
180 |
+
$mailmunch_password = $_POST['password'];
|
181 |
+
|
182 |
+
// We have update the guest with real email address, let's create a site now
|
183 |
+
$mm = new MailmunchApi($mailmunch_email, $mailmunch_password, "http://".MAILMUNCH_URL);
|
184 |
+
|
185 |
+
$update_result = $mm->updateSite($mailmunch_data["site_name"], $mailmunch_data["site_url"]);
|
186 |
+
$result = json_decode($update_result['body']);
|
187 |
+
$mailmunch_data = unserialize(get_option("mailmunch_data"));
|
188 |
+
$mailmunch_data["site_url"] = $result->domain;
|
189 |
+
$mailmunch_data["site_name"] = $result->name;
|
190 |
+
update_option("mailmunch_data", serialize($mailmunch_data));
|
191 |
} else {
|
192 |
$user_exists = true;
|
193 |
}
|
199 |
$mailmunch_data["site_url"] = home_url();
|
200 |
$mailmunch_data["site_name"] = get_bloginfo();
|
201 |
update_option("mailmunch_data", serialize($mailmunch_data));
|
202 |
+
delete_option("mailmunch_user_email");
|
203 |
+
delete_option("mailmunch_user_password");
|
204 |
|
205 |
} else if ($post_action == "delete_widget") {
|
206 |
|
207 |
if ($_POST["site_id"] && $_POST["widget_id"]) {
|
208 |
+
$account_info = $mm_helpers->getEmailPassword();
|
209 |
$mailmunch_email = $account_info['email'];
|
210 |
$mailmunch_password = $account_info['password'];
|
211 |
$mm = new MailmunchApi($account_info['email'], $account_info["password"], "http://".MAILMUNCH_URL);
|
212 |
$request = $mm->deleteWidget($_POST["site_id"], $_POST["widget_id"]);
|
213 |
}
|
214 |
|
215 |
+
} else if ($post_action == "create_site") {
|
216 |
+
$site_url = (empty($_POST["site_url"]) ? get_bloginfo() : $_POST["site_url"]);
|
217 |
+
$site_name = (empty($_POST["site_name"]) ? home_url() : $_POST["site_name"]);
|
218 |
+
|
219 |
+
$account_info = $mm_helpers->getEmailPassword();
|
220 |
+
$mm = new MailmunchApi($account_info['email'], $account_info["password"], "http://".MAILMUNCH_URL);
|
221 |
+
$request = $mm->createSite($site_name, $site_url);
|
222 |
+
$site = json_decode($request['body']);
|
223 |
+
|
224 |
+
if (!empty($site->id)) {
|
225 |
+
$mailmunch_data = unserialize(get_option("mailmunch_data"));
|
226 |
+
$mailmunch_data["site_id"] = $site->id;
|
227 |
+
$mailmunch_data["script_src"] = $site->javascript_url;
|
228 |
+
update_option("mailmunch_data", serialize($mailmunch_data));
|
229 |
+
}
|
230 |
}
|
231 |
}
|
232 |
|
233 |
+
// If the user does not exists, create a GUEST user
|
234 |
+
if (get_option("mailmunch_user_email") == "") {
|
235 |
+
$mailmunch_email = "guest_".uniqid()."@mailmunch.co";
|
236 |
+
$mailmunch_password = uniqid();
|
237 |
+
$mm = new MailmunchApi($mailmunch_email, $mailmunch_password, "http://".MAILMUNCH_URL);
|
238 |
+
$mm->createGuestUser();
|
239 |
+
update_option("mailmunch_user_email", $mailmunch_email);
|
240 |
+
update_option("mailmunch_user_password", base64_encode($mailmunch_password));
|
241 |
+
update_option("mailmunch_guest_user", true);
|
242 |
+
}
|
243 |
+
|
244 |
// If we already have the user's email stored, let's create the API instance
|
245 |
// If we don't have it yet, make sure NOT to phone home any user data
|
246 |
if (get_option("mailmunch_user_email") != "") {
|
247 |
+
$account_info = $mm_helpers->getEmailPassword();
|
248 |
$mailmunch_email = $account_info['email'];
|
249 |
$mailmunch_password = $account_info['password'];
|
250 |
|
251 |
$mm = new MailmunchApi($mailmunch_email, $mailmunch_password, "http://".MAILMUNCH_URL);
|
252 |
+
$pass_check = $mm->validPassword();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
253 |
|
254 |
+
if( is_wp_error( $pass_check ) ) {
|
255 |
+
echo $pass_check->get_error_message();
|
256 |
+
return;
|
257 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
258 |
|
259 |
+
if (!$pass_check) {
|
260 |
+
// Invalid user, create a GUEST user
|
261 |
+
$mailmunch_email = "guest_".uniqid()."@mailmunch.co";
|
262 |
+
$mailmunch_password = uniqid();
|
263 |
+
$mm = new MailmunchApi($mailmunch_email, $mailmunch_password, "http://".MAILMUNCH_URL);
|
264 |
+
$mm->createGuestUser();
|
265 |
+
update_option("mailmunch_user_email", $mailmunch_email);
|
266 |
+
update_option("mailmunch_user_password", base64_encode($mailmunch_password));
|
267 |
+
update_option("mailmunch_guest_user", true);
|
268 |
+
}
|
269 |
+
}
|
270 |
|
271 |
+
$mailmunch_guest_user = get_option("mailmunch_guest_user");
|
|
|
|
|
|
|
|
|
272 |
|
|
|
|
|
|
|
|
|
273 |
|
274 |
+
if ($mailmunch_guest_user) {
|
275 |
+
// This is a Guest USER. Do not collect any user data.
|
276 |
+
$sites = $mm_helpers->createAndGetGuestSites($mm);
|
277 |
+
} else {
|
278 |
+
$sites = $mm_helpers->createAndGetSites($mm);
|
279 |
}
|
280 |
|
281 |
+
if (isset($mailmunch_data["site_id"])) {
|
|
|
|
|
282 |
// If there's a site already chosen, we need to get and save it's script_src in WordPress
|
283 |
+
$site = $mm_helpers->getSite($sites, $mailmunch_data["site_id"]);
|
284 |
|
285 |
if ($site) {
|
286 |
$mailmunch_data = array_merge(unserialize(get_option('mailmunch_data')), array("script_src" => $site->javascript_url));
|
295 |
}
|
296 |
}
|
297 |
|
298 |
+
if (!isset($mailmunch_data["site_id"])) {
|
299 |
// If there's NO chosen site yet
|
300 |
|
301 |
+
if (sizeof($sites) == 1 && ($sites[0]->name == get_bloginfo() || $sites[0]->name == "WordPress")) {
|
302 |
// If this mailmunch account only has 1 site and its name matches this WordPress blogs
|
303 |
|
304 |
$site = $sites[0];
|
317 |
|
318 |
<p>Choose the site that you would like to link with your WordPress.</p>
|
319 |
|
320 |
+
<div id="choose-site-form">
|
321 |
+
<form action="" method="POST">
|
322 |
+
<div class="form-group">
|
323 |
+
<input type="hidden" name="action" value="save_settings" />
|
324 |
+
|
325 |
+
<select name="mailmunch_data[site_id]">
|
326 |
+
<?php foreach ($sites as $site) { ?>
|
327 |
+
<option value="<?php echo $site->id ?>"><?php echo $site->name ?></option>
|
328 |
+
<?php } ?>
|
329 |
+
</select>
|
330 |
+
</div>
|
331 |
+
|
332 |
+
<div class="form-group">
|
333 |
+
<input type="submit" value="Save Settings" class="button-primary" />
|
334 |
+
</div>
|
335 |
+
</form>
|
336 |
+
|
337 |
+
<p>
|
338 |
+
Don't see this site above? <a href="" onclick="document.getElementById('create-site-form').style.display = 'block'; document.getElementById('choose-site-form').style.display = 'none'; return false;">Create New Site</a>
|
339 |
+
</p>
|
340 |
+
</div>
|
341 |
|
342 |
+
<div id="create-site-form" style="display: none;">
|
343 |
+
<form action="" method="POST">
|
344 |
+
<input type="hidden" name="action" value="create_site" />
|
|
|
|
|
|
|
345 |
|
346 |
+
<div class="form-group">
|
347 |
+
<label>Site Name</label>
|
348 |
+
<input type="text" name="site_name" value="<?php echo get_bloginfo() ?>" />
|
349 |
+
</div>
|
350 |
+
|
351 |
+
<div class="form-group">
|
352 |
+
<label>Site URL</label>
|
353 |
+
<input type="text" name="site_url" value="<?php echo home_url() ?>" />
|
354 |
+
</div>
|
355 |
+
|
356 |
+
<div class="form-group">
|
357 |
+
<input type="submit" value="Create Site" class="button-primary" />
|
358 |
+
</div>
|
359 |
+
</form>
|
360 |
+
|
361 |
+
<p>
|
362 |
+
Already have a site in your MailMunch account? <a href="" onclick="document.getElementById('create-site-form').style.display = 'none'; document.getElementById('choose-site-form').style.display = 'block'; return false;">Choose Site</a>
|
363 |
+
</p>
|
364 |
+
</div>
|
365 |
</div>
|
366 |
<?php
|
367 |
return;
|
369 |
}
|
370 |
|
371 |
$request = $mm->getWidgetsHtml($mailmunch_data["site_id"]);
|
372 |
+
$widgets = $request['body'];
|
373 |
$widgets = str_replace("{{EMAIL}}", $mailmunch_email, $widgets);
|
374 |
$widgets = str_replace("{{PASSWORD}}", $mailmunch_password, $widgets);
|
375 |
echo $widgets;
|
376 |
+
|
377 |
+
if ($mailmunch_guest_user) {
|
378 |
+
$current_user = wp_get_current_user();
|
379 |
+
?>
|
380 |
+
|
381 |
+
<?php add_thickbox(); ?>
|
382 |
+
|
383 |
+
<div id="signup-signin-box" style="display:none;">
|
384 |
+
<div id="sign-up-form" class="<?php if (!$_POST || ($_POST["action"] != "sign_in" && $_POST["action"] != "unlink_account")) { ?> active<?php } ?>">
|
385 |
+
<div class="form-container">
|
386 |
+
<p style="margin-bottom: 0px;">To activate your MailMunch forms, we will now create your account on MailMunch (<a onclick="showWhyAccount();" id="why-account-btn">Why?</a>).</p>
|
387 |
+
|
388 |
+
<div id="why-account" class="alert alert-warning" style="display: none;">
|
389 |
+
<h4>Why do I need a MailMunch account?</h4>
|
390 |
+
|
391 |
+
<p>
|
392 |
+
MailMunch is a not just a WordPress plugin but a standalone service. An account is required to identify your WordPress and serve your MailMunch forms.
|
393 |
+
</p>
|
394 |
+
</div>
|
395 |
+
|
396 |
+
<?php if (isset($user_exists)) { ?>
|
397 |
+
<div id="invalid-alert" class="alert alert-danger signup-alert" role="alert">Account with this email already exists. Please sign in using your password.</div>
|
398 |
+
<?php } else if (isset($invalid_email_password)) { ?>
|
399 |
+
<div id="invalid-alert" class="alert alert-danger signup-alert" role="alert">Invalid email or password. Please enter a valid email and password below.</div>
|
400 |
+
<?php } ?>
|
401 |
+
|
402 |
+
<form action="" method="POST">
|
403 |
+
<input type="hidden" name="action" value="sign_up" />
|
404 |
+
|
405 |
+
<div class="form-group">
|
406 |
+
<label>Wordpress Name</label>
|
407 |
+
<input type="text" placeholder="Site Name" name="site_name" value="<?php echo $mailmunch_data["site_name"] ?>" class="form-control">
|
408 |
+
</div>
|
409 |
+
|
410 |
+
<div class="form-group">
|
411 |
+
<label>Wordpress URL</label>
|
412 |
+
<input type="text" placeholder="Site URL" name="site_url" value="<?php echo $mailmunch_data["site_url"] ?>" class="form-control">
|
413 |
+
</div>
|
414 |
+
|
415 |
+
<div class="form-group">
|
416 |
+
<label>Email Address</label>
|
417 |
+
<input type="email" placeholder="Email Address" name="email" value="<?php echo $current_user->user_email ?>" class="form-control">
|
418 |
+
</div>
|
419 |
+
|
420 |
+
<div class="form-group">
|
421 |
+
<label>Password</label>
|
422 |
+
<input type="password" placeholder="Password" name="password" class="form-control" />
|
423 |
+
</div>
|
424 |
+
|
425 |
+
<div class="form-group">
|
426 |
+
<input type="submit" value="Sign Up »" class="btn btn-success btn-lg" />
|
427 |
+
</div>
|
428 |
+
</form>
|
429 |
+
</div>
|
430 |
+
|
431 |
+
<p>Already have an account? <a id="show-sign-in" onclick="showSignInForm();">Sign In</a></p>
|
432 |
+
</div>
|
433 |
+
|
434 |
+
<div id="sign-in-form" class="<?php if ($_POST && ($_POST["action"] == "sign_in" || $_POST["action"] == "unlink_account")) { ?> active<?php } ?>">
|
435 |
+
<p>Sign in using your email and password below.</p>
|
436 |
+
|
437 |
+
<?php if ($_POST && $_POST["action"] == "sign_in") { ?>
|
438 |
+
<div id="invalid-alert" class="alert alert-danger signin-alert" role="alert">Invalid Email or Password. Please try again.</div>
|
439 |
+
<?php } ?>
|
440 |
+
|
441 |
+
<div class="form-container">
|
442 |
+
<form action="" method="POST">
|
443 |
+
<input type="hidden" name="action" value="sign_in" />
|
444 |
+
|
445 |
+
<div class="form-group">
|
446 |
+
<label>Email Address</label>
|
447 |
+
<input type="email" placeholder="Email Address" name="email" class="form-control" value="<?php if (isset($_POST["email"])) { echo $_POST["email"]; } ?>" />
|
448 |
+
</div>
|
449 |
+
<div class="form-group">
|
450 |
+
<label>Password</label>
|
451 |
+
<input type="password" placeholder="Password" name="password" class="form-control" />
|
452 |
+
</div>
|
453 |
+
|
454 |
+
<div class="form-group">
|
455 |
+
<input type="submit" value="Sign In »" class="btn btn-success btn-lg" />
|
456 |
+
</div>
|
457 |
+
</form>
|
458 |
+
</div>
|
459 |
+
|
460 |
+
<p>Forgot your password? <a href="http://<?php echo MAILMUNCH_URL; ?>/users/password/new" target="_blank">Click here</a> to retrieve it.</p>
|
461 |
+
<p>Don't have an account? <a id="show-sign-up" onclick="showSignUpForm();">Sign Up</a></p>
|
462 |
+
</div>
|
463 |
+
</div>
|
464 |
+
|
465 |
+
<?php
|
466 |
+
if ($_POST) {
|
467 |
+
?>
|
468 |
+
<script>
|
469 |
+
jQuery(window).load(function() {
|
470 |
+
<?php if ($_POST && ($_POST["action"] == "sign_in" || $_POST["action"] == "unlink_account")) { ?>
|
471 |
+
showSignInForm();
|
472 |
+
<?php } else { ?>
|
473 |
+
showSignUpForm();
|
474 |
+
<?php } ?>
|
475 |
+
});
|
476 |
+
</script>
|
477 |
+
<?php
|
478 |
+
}
|
479 |
+
}
|
480 |
}
|
|
readme.txt
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
===
|
2 |
Contributors: mailmunch
|
3 |
-
Tags: widget, MailChimp, newsletter, newsletters, MailChimp plugin, Aweber,subscribe, popup, exit popup, exit intent, growth, subscribers, subscription, hellobar, email, posts, sharing, links, popover, analytics , newsletter, automatic , mail, lightbox, analytics, newsletter, getresponse, collect email, optin, optin forms, double optin, popover,
|
4 |
Requires at least: 3.0.1
|
5 |
-
Tested up to: 4.
|
6 |
-
Stable tag: 1.
|
7 |
License: GPLv2 or later
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
@@ -131,6 +131,12 @@ Why people use Aweber
|
|
131 |
|
132 |
== Changelog ==
|
133 |
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
= 1.3.4 =
|
135 |
* Fixed plugin activation bug
|
136 |
|
@@ -163,4 +169,4 @@ Why people use Aweber
|
|
163 |
* Added powerful targeting for pages, posts, categories, authors and attachments
|
164 |
|
165 |
= 1.0.1 =
|
166 |
-
* Seamless integration with MailMunch designer
|
1 |
+
=== MailMunch - Increase your Email Subscribers by over 500% ===
|
2 |
Contributors: mailmunch
|
3 |
+
Tags: widget, MailChimp, newsletter, newsletters, MailChimp plugin, Aweber,subscribe, popup, exit popup, exit intent, growth, subscribers, subscription, hellobar, email, posts, sharing, links, popover, analytics , newsletter, automatic , mail, lightbox, analytics, newsletter, getresponse, collect email, optin, optin forms, double optin, popover, list builder, mailchimp
|
4 |
Requires at least: 3.0.1
|
5 |
+
Tested up to: 4.1
|
6 |
+
Stable tag: 1.4.2
|
7 |
License: GPLv2 or later
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
131 |
|
132 |
== Changelog ==
|
133 |
|
134 |
+
= 1.3.6 =
|
135 |
+
* Fatal activation bug fix
|
136 |
+
|
137 |
+
= 1.3.5 =
|
138 |
+
* Improved sign up flow
|
139 |
+
|
140 |
= 1.3.4 =
|
141 |
* Fixed plugin activation bug
|
142 |
|
169 |
* Added powerful targeting for pages, posts, categories, authors and attachments
|
170 |
|
171 |
= 1.0.1 =
|
172 |
+
* Seamless integration with MailMunch designer
|
uninstall.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) )
|
3 |
+
exit();
|
4 |
+
|
5 |
+
delete_option("mailmunch_data");
|
6 |
+
delete_option("mailmunch_user_email");
|
7 |
+
delete_option("mailmunch_user_password");
|
8 |
+
delete_option("mailmunch_guest_user");
|
9 |
+
?>
|