mirror of
https://github.com/araxiaonline/WoWSimpleRegistration.git
synced 2026-06-13 03:12:27 -04:00
Update composer packages
https://github.com/masterking32/WoWSimpleRegistration/pull/47
This commit is contained in:
67
application/composer.lock
generated
67
application/composer.lock
generated
@@ -177,16 +177,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpmailer/phpmailer",
|
||||
"version": "v6.3.0",
|
||||
"version": "v6.4.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||
"reference": "4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb"
|
||||
"reference": "9256f12d8fb0cd0500f93b19e18c356906cbed3d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb",
|
||||
"reference": "4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/9256f12d8fb0cd0500f93b19e18c356906cbed3d",
|
||||
"reference": "9256f12d8fb0cd0500f93b19e18c356906cbed3d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -204,7 +204,7 @@
|
||||
"yoast/phpunit-polyfills": "^0.2.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "Needed to send email in multibyte encoding charset",
|
||||
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
|
||||
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
|
||||
"league/oauth2-google": "Needed for Google XOAUTH2 authentication",
|
||||
"psr/log": "For optional PSR-3 debug logging",
|
||||
@@ -241,7 +241,7 @@
|
||||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
||||
"support": {
|
||||
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.3.0"
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.4.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -249,7 +249,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-02-19T15:28:08+00:00"
|
||||
"time": "2021-04-29T12:25:04+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-timer",
|
||||
@@ -312,23 +312,30 @@
|
||||
},
|
||||
{
|
||||
"name": "rmccue/requests",
|
||||
"version": "v1.7.0",
|
||||
"version": "v1.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/rmccue/Requests.git",
|
||||
"reference": "87932f52ffad70504d93f04f15690cf16a089546"
|
||||
"url": "https://github.com/WordPress/Requests.git",
|
||||
"reference": "afbe4790e4def03581c4a0963a1e8aa01f6030f1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/rmccue/Requests/zipball/87932f52ffad70504d93f04f15690cf16a089546",
|
||||
"reference": "87932f52ffad70504d93f04f15690cf16a089546",
|
||||
"url": "https://api.github.com/repos/WordPress/Requests/zipball/afbe4790e4def03581c4a0963a1e8aa01f6030f1",
|
||||
"reference": "afbe4790e4def03581c4a0963a1e8aa01f6030f1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"requests/test-server": "dev-master"
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7",
|
||||
"php-parallel-lint/php-console-highlighter": "^0.5.0",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.3",
|
||||
"phpcompatibility/php-compatibility": "^9.0",
|
||||
"phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5",
|
||||
"requests/test-server": "dev-master",
|
||||
"squizlabs/php_codesniffer": "^3.5",
|
||||
"wp-coding-standards/wpcs": "^2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@@ -347,7 +354,7 @@
|
||||
}
|
||||
],
|
||||
"description": "A HTTP library written in PHP, for human beings.",
|
||||
"homepage": "http://github.com/rmccue/Requests",
|
||||
"homepage": "http://github.com/WordPress/Requests",
|
||||
"keywords": [
|
||||
"curl",
|
||||
"fsockopen",
|
||||
@@ -358,23 +365,23 @@
|
||||
"sockets"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/rmccue/Requests/issues",
|
||||
"source": "https://github.com/rmccue/Requests/tree/master"
|
||||
"issues": "https://github.com/WordPress/Requests/issues",
|
||||
"source": "https://github.com/WordPress/Requests/tree/v1.8.0"
|
||||
},
|
||||
"time": "2016-10-13T00:11:37+00:00"
|
||||
"time": "2021-04-27T11:05:25+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
"version": "v5.2.3",
|
||||
"version": "v5.2.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/finder.git",
|
||||
"reference": "4adc8d172d602008c204c2e16956f99257248e03"
|
||||
"reference": "0d639a0943822626290d169965804f79400e6a04"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/4adc8d172d602008c204c2e16956f99257248e03",
|
||||
"reference": "4adc8d172d602008c204c2e16956f99257248e03",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/0d639a0943822626290d169965804f79400e6a04",
|
||||
"reference": "0d639a0943822626290d169965804f79400e6a04",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -406,7 +413,7 @@
|
||||
"description": "Finds files and directories via an intuitive fluent interface",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/finder/tree/v5.2.3"
|
||||
"source": "https://github.com/symfony/finder/tree/v5.2.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -422,7 +429,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-28T22:06:19+00:00"
|
||||
"time": "2021-02-15T18:55:04+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-iconv",
|
||||
@@ -827,16 +834,16 @@
|
||||
},
|
||||
{
|
||||
"name": "voku/anti-xss",
|
||||
"version": "4.1.31",
|
||||
"version": "4.1.32",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/voku/anti-xss.git",
|
||||
"reference": "22dea9be8dbffa466995ea87a12da5f3bce874bb"
|
||||
"reference": "159b49a50cf3f6cf72ee43b0dcf7c2580a0c12d1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/voku/anti-xss/zipball/22dea9be8dbffa466995ea87a12da5f3bce874bb",
|
||||
"reference": "22dea9be8dbffa466995ea87a12da5f3bce874bb",
|
||||
"url": "https://api.github.com/repos/voku/anti-xss/zipball/159b49a50cf3f6cf72ee43b0dcf7c2580a0c12d1",
|
||||
"reference": "159b49a50cf3f6cf72ee43b0dcf7c2580a0c12d1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -869,7 +876,7 @@
|
||||
{
|
||||
"name": "Lars Moelleken",
|
||||
"email": "lars@moelleken.org",
|
||||
"homepage": "http://www.moelleken.org/"
|
||||
"homepage": "https://www.moelleken.org/"
|
||||
}
|
||||
],
|
||||
"description": "anti xss-library",
|
||||
@@ -882,7 +889,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/voku/anti-xss/issues",
|
||||
"source": "https://github.com/voku/anti-xss/tree/4.1.31"
|
||||
"source": "https://github.com/voku/anti-xss/tree/4.1.32"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -906,7 +913,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-12-02T02:10:30+00:00"
|
||||
"time": "2021-03-29T14:29:34+00:00"
|
||||
},
|
||||
{
|
||||
"name": "voku/portable-ascii",
|
||||
|
||||
6
application/vendor/composer/ClassLoader.php
vendored
6
application/vendor/composer/ClassLoader.php
vendored
@@ -311,8 +311,10 @@ class ClassLoader
|
||||
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
||||
|
||||
if (null === $this->vendorDir) {
|
||||
//no-op
|
||||
} elseif ($prepend) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($prepend) {
|
||||
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
|
||||
} else {
|
||||
unset(self::$registeredLoaders[$this->vendorDir]);
|
||||
|
||||
@@ -20,6 +20,8 @@ use Composer\Semver\VersionParser;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class InstalledVersions
|
||||
{
|
||||
private static $installed = array (
|
||||
@@ -30,7 +32,7 @@ private static $installed = array (
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'b3cb6cbb78a7934be29e201a7bcbe6ee7b035ab5',
|
||||
'reference' => 'a1858514807fe8606e600f247ed09529e611e98c',
|
||||
'name' => '__root__',
|
||||
),
|
||||
'versions' =>
|
||||
@@ -42,7 +44,7 @@ private static $installed = array (
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'b3cb6cbb78a7934be29e201a7bcbe6ee7b035ab5',
|
||||
'reference' => 'a1858514807fe8606e600f247ed09529e611e98c',
|
||||
),
|
||||
'catfan/medoo' =>
|
||||
array (
|
||||
@@ -74,12 +76,12 @@ private static $installed = array (
|
||||
),
|
||||
'phpmailer/phpmailer' =>
|
||||
array (
|
||||
'pretty_version' => 'v6.3.0',
|
||||
'version' => '6.3.0.0',
|
||||
'pretty_version' => 'v6.4.1',
|
||||
'version' => '6.4.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb',
|
||||
'reference' => '9256f12d8fb0cd0500f93b19e18c356906cbed3d',
|
||||
),
|
||||
'phpunit/php-timer' =>
|
||||
array (
|
||||
@@ -92,21 +94,21 @@ private static $installed = array (
|
||||
),
|
||||
'rmccue/requests' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.7.0',
|
||||
'version' => '1.7.0.0',
|
||||
'pretty_version' => 'v1.8.0',
|
||||
'version' => '1.8.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '87932f52ffad70504d93f04f15690cf16a089546',
|
||||
'reference' => 'afbe4790e4def03581c4a0963a1e8aa01f6030f1',
|
||||
),
|
||||
'symfony/finder' =>
|
||||
array (
|
||||
'pretty_version' => 'v5.2.3',
|
||||
'version' => '5.2.3.0',
|
||||
'pretty_version' => 'v5.2.4',
|
||||
'version' => '5.2.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '4adc8d172d602008c204c2e16956f99257248e03',
|
||||
'reference' => '0d639a0943822626290d169965804f79400e6a04',
|
||||
),
|
||||
'symfony/polyfill-iconv' =>
|
||||
array (
|
||||
@@ -155,12 +157,12 @@ private static $installed = array (
|
||||
),
|
||||
'voku/anti-xss' =>
|
||||
array (
|
||||
'pretty_version' => '4.1.31',
|
||||
'version' => '4.1.31.0',
|
||||
'pretty_version' => '4.1.32',
|
||||
'version' => '4.1.32.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '22dea9be8dbffa466995ea87a12da5f3bce874bb',
|
||||
'reference' => '159b49a50cf3f6cf72ee43b0dcf7c2580a0c12d1',
|
||||
),
|
||||
'voku/portable-ascii' =>
|
||||
array (
|
||||
@@ -198,7 +200,6 @@ foreach (self::getInstalled() as $installed) {
|
||||
$packages[] = array_keys($installed['versions']);
|
||||
}
|
||||
|
||||
|
||||
if (1 === \count($packages)) {
|
||||
return $packages[0];
|
||||
}
|
||||
@@ -394,6 +395,7 @@ self::$installedByVendor = array();
|
||||
|
||||
|
||||
|
||||
|
||||
private static function getInstalled()
|
||||
{
|
||||
if (null === self::$canGetVendors) {
|
||||
@@ -403,7 +405,6 @@ self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegist
|
||||
$installed = array();
|
||||
|
||||
if (self::$canGetVendors) {
|
||||
|
||||
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
||||
if (isset(self::$installedByVendor[$vendorDir])) {
|
||||
$installed[] = self::$installedByVendor[$vendorDir];
|
||||
|
||||
@@ -6,10 +6,10 @@ $vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php',
|
||||
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||
'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php',
|
||||
'8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php',
|
||||
'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php',
|
||||
'8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php',
|
||||
'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php',
|
||||
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||
'25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php',
|
||||
'b46ad4fe52f4d1899a2951c7e6ea56b0' => $vendorDir . '/voku/portable-utf8/bootstrap.php',
|
||||
);
|
||||
|
||||
@@ -7,11 +7,11 @@ namespace Composer\Autoload;
|
||||
class ComposerStaticInitde424ad7860a40a14ec11f109060d25d
|
||||
{
|
||||
public static $files = array (
|
||||
'25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php',
|
||||
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||
'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php',
|
||||
'8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php',
|
||||
'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php',
|
||||
'8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php',
|
||||
'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php',
|
||||
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||
'25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php',
|
||||
'b46ad4fe52f4d1899a2951c7e6ea56b0' => __DIR__ . '/..' . '/voku/portable-utf8/bootstrap.php',
|
||||
);
|
||||
|
||||
|
||||
75
application/vendor/composer/installed.json
vendored
75
application/vendor/composer/installed.json
vendored
@@ -171,17 +171,17 @@
|
||||
},
|
||||
{
|
||||
"name": "phpmailer/phpmailer",
|
||||
"version": "v6.3.0",
|
||||
"version_normalized": "6.3.0.0",
|
||||
"version": "v6.4.1",
|
||||
"version_normalized": "6.4.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||
"reference": "4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb"
|
||||
"reference": "9256f12d8fb0cd0500f93b19e18c356906cbed3d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb",
|
||||
"reference": "4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/9256f12d8fb0cd0500f93b19e18c356906cbed3d",
|
||||
"reference": "9256f12d8fb0cd0500f93b19e18c356906cbed3d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -199,14 +199,14 @@
|
||||
"yoast/phpunit-polyfills": "^0.2.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "Needed to send email in multibyte encoding charset",
|
||||
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
|
||||
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
|
||||
"league/oauth2-google": "Needed for Google XOAUTH2 authentication",
|
||||
"psr/log": "For optional PSR-3 debug logging",
|
||||
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
|
||||
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
|
||||
},
|
||||
"time": "2021-02-19T15:28:08+00:00",
|
||||
"time": "2021-04-29T12:25:04+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@@ -238,7 +238,7 @@
|
||||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
||||
"support": {
|
||||
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.3.0"
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.4.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -312,26 +312,33 @@
|
||||
},
|
||||
{
|
||||
"name": "rmccue/requests",
|
||||
"version": "v1.7.0",
|
||||
"version_normalized": "1.7.0.0",
|
||||
"version": "v1.8.0",
|
||||
"version_normalized": "1.8.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/rmccue/Requests.git",
|
||||
"reference": "87932f52ffad70504d93f04f15690cf16a089546"
|
||||
"url": "https://github.com/WordPress/Requests.git",
|
||||
"reference": "afbe4790e4def03581c4a0963a1e8aa01f6030f1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/rmccue/Requests/zipball/87932f52ffad70504d93f04f15690cf16a089546",
|
||||
"reference": "87932f52ffad70504d93f04f15690cf16a089546",
|
||||
"url": "https://api.github.com/repos/WordPress/Requests/zipball/afbe4790e4def03581c4a0963a1e8aa01f6030f1",
|
||||
"reference": "afbe4790e4def03581c4a0963a1e8aa01f6030f1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"requests/test-server": "dev-master"
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7",
|
||||
"php-parallel-lint/php-console-highlighter": "^0.5.0",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.3",
|
||||
"phpcompatibility/php-compatibility": "^9.0",
|
||||
"phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5",
|
||||
"requests/test-server": "dev-master",
|
||||
"squizlabs/php_codesniffer": "^3.5",
|
||||
"wp-coding-standards/wpcs": "^2.0"
|
||||
},
|
||||
"time": "2016-10-13T00:11:37+00:00",
|
||||
"time": "2021-04-27T11:05:25+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@@ -350,7 +357,7 @@
|
||||
}
|
||||
],
|
||||
"description": "A HTTP library written in PHP, for human beings.",
|
||||
"homepage": "http://github.com/rmccue/Requests",
|
||||
"homepage": "http://github.com/WordPress/Requests",
|
||||
"keywords": [
|
||||
"curl",
|
||||
"fsockopen",
|
||||
@@ -360,27 +367,31 @@
|
||||
"iri",
|
||||
"sockets"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/WordPress/Requests/issues",
|
||||
"source": "https://github.com/WordPress/Requests/tree/v1.8.0"
|
||||
},
|
||||
"install-path": "../rmccue/requests"
|
||||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
"version": "v5.2.3",
|
||||
"version_normalized": "5.2.3.0",
|
||||
"version": "v5.2.4",
|
||||
"version_normalized": "5.2.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/finder.git",
|
||||
"reference": "4adc8d172d602008c204c2e16956f99257248e03"
|
||||
"reference": "0d639a0943822626290d169965804f79400e6a04"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/4adc8d172d602008c204c2e16956f99257248e03",
|
||||
"reference": "4adc8d172d602008c204c2e16956f99257248e03",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/0d639a0943822626290d169965804f79400e6a04",
|
||||
"reference": "0d639a0943822626290d169965804f79400e6a04",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.2.5"
|
||||
},
|
||||
"time": "2021-01-28T22:06:19+00:00",
|
||||
"time": "2021-02-15T18:55:04+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@@ -408,7 +419,7 @@
|
||||
"description": "Finds files and directories via an intuitive fluent interface",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/finder/tree/v5.2.3"
|
||||
"source": "https://github.com/symfony/finder/tree/v5.2.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -844,17 +855,17 @@
|
||||
},
|
||||
{
|
||||
"name": "voku/anti-xss",
|
||||
"version": "4.1.31",
|
||||
"version_normalized": "4.1.31.0",
|
||||
"version": "4.1.32",
|
||||
"version_normalized": "4.1.32.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/voku/anti-xss.git",
|
||||
"reference": "22dea9be8dbffa466995ea87a12da5f3bce874bb"
|
||||
"reference": "159b49a50cf3f6cf72ee43b0dcf7c2580a0c12d1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/voku/anti-xss/zipball/22dea9be8dbffa466995ea87a12da5f3bce874bb",
|
||||
"reference": "22dea9be8dbffa466995ea87a12da5f3bce874bb",
|
||||
"url": "https://api.github.com/repos/voku/anti-xss/zipball/159b49a50cf3f6cf72ee43b0dcf7c2580a0c12d1",
|
||||
"reference": "159b49a50cf3f6cf72ee43b0dcf7c2580a0c12d1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -864,7 +875,7 @@
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~6.0 || ~7.0 || ~9.0"
|
||||
},
|
||||
"time": "2020-12-02T02:10:30+00:00",
|
||||
"time": "2021-03-29T14:29:34+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
@@ -889,7 +900,7 @@
|
||||
{
|
||||
"name": "Lars Moelleken",
|
||||
"email": "lars@moelleken.org",
|
||||
"homepage": "http://www.moelleken.org/"
|
||||
"homepage": "https://www.moelleken.org/"
|
||||
}
|
||||
],
|
||||
"description": "anti xss-library",
|
||||
@@ -902,7 +913,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/voku/anti-xss/issues",
|
||||
"source": "https://github.com/voku/anti-xss/tree/4.1.31"
|
||||
"source": "https://github.com/voku/anti-xss/tree/4.1.32"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
||||
28
application/vendor/composer/installed.php
vendored
28
application/vendor/composer/installed.php
vendored
@@ -6,7 +6,7 @@
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'b3cb6cbb78a7934be29e201a7bcbe6ee7b035ab5',
|
||||
'reference' => 'a1858514807fe8606e600f247ed09529e611e98c',
|
||||
'name' => '__root__',
|
||||
),
|
||||
'versions' =>
|
||||
@@ -18,7 +18,7 @@
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'b3cb6cbb78a7934be29e201a7bcbe6ee7b035ab5',
|
||||
'reference' => 'a1858514807fe8606e600f247ed09529e611e98c',
|
||||
),
|
||||
'catfan/medoo' =>
|
||||
array (
|
||||
@@ -50,12 +50,12 @@
|
||||
),
|
||||
'phpmailer/phpmailer' =>
|
||||
array (
|
||||
'pretty_version' => 'v6.3.0',
|
||||
'version' => '6.3.0.0',
|
||||
'pretty_version' => 'v6.4.1',
|
||||
'version' => '6.4.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb',
|
||||
'reference' => '9256f12d8fb0cd0500f93b19e18c356906cbed3d',
|
||||
),
|
||||
'phpunit/php-timer' =>
|
||||
array (
|
||||
@@ -68,21 +68,21 @@
|
||||
),
|
||||
'rmccue/requests' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.7.0',
|
||||
'version' => '1.7.0.0',
|
||||
'pretty_version' => 'v1.8.0',
|
||||
'version' => '1.8.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '87932f52ffad70504d93f04f15690cf16a089546',
|
||||
'reference' => 'afbe4790e4def03581c4a0963a1e8aa01f6030f1',
|
||||
),
|
||||
'symfony/finder' =>
|
||||
array (
|
||||
'pretty_version' => 'v5.2.3',
|
||||
'version' => '5.2.3.0',
|
||||
'pretty_version' => 'v5.2.4',
|
||||
'version' => '5.2.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '4adc8d172d602008c204c2e16956f99257248e03',
|
||||
'reference' => '0d639a0943822626290d169965804f79400e6a04',
|
||||
),
|
||||
'symfony/polyfill-iconv' =>
|
||||
array (
|
||||
@@ -131,12 +131,12 @@
|
||||
),
|
||||
'voku/anti-xss' =>
|
||||
array (
|
||||
'pretty_version' => '4.1.31',
|
||||
'version' => '4.1.31.0',
|
||||
'pretty_version' => '4.1.32',
|
||||
'version' => '4.1.32.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '22dea9be8dbffa466995ea87a12da5f3bce874bb',
|
||||
'reference' => '159b49a50cf3f6cf72ee43b0dcf7c2580a0c12d1',
|
||||
),
|
||||
'voku/portable-ascii' =>
|
||||
array (
|
||||
|
||||
16
application/vendor/phpmailer/phpmailer/README.md
vendored
16
application/vendor/phpmailer/phpmailer/README.md
vendored
@@ -2,7 +2,7 @@
|
||||
|
||||
# PHPMailer – A full-featured email creation and transfer class for PHP
|
||||
|
||||
[](https://github.com/PHPMailer/PHPMailer/actions) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://phpmailer.github.io/PHPMailer/)
|
||||
[](https://github.com/PHPMailer/PHPMailer/actions) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://phpmailer.github.io/PHPMailer/)
|
||||
|
||||
## Features
|
||||
- Probably the world's most popular code for sending email from PHP!
|
||||
@@ -142,7 +142,7 @@ PHPMailer defaults to English, but in the [language](https://github.com/PHPMaile
|
||||
$mail->setLanguage('fr', '/optional/path/to/language/directory/');
|
||||
```
|
||||
|
||||
We welcome corrections and new languages – if you're looking for corrections to do, run the [PHPMailerLangTest.php](https://github.com/PHPMailer/PHPMailer/tree/master/test/PHPMailerLangTest.php) script in the tests folder and it will show any missing translations.
|
||||
We welcome corrections and new languages – if you're looking for corrections, run the [PHPMailerLangTest.php](https://github.com/PHPMailer/PHPMailer/tree/master/test/PHPMailerLangTest.php) script in the tests folder and it will show any missing translations.
|
||||
|
||||
## Documentation
|
||||
Start reading at the [GitHub wiki](https://github.com/PHPMailer/PHPMailer/wiki). If you're having trouble, head for [the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting) as it's frequently updated.
|
||||
@@ -185,12 +185,20 @@ git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git
|
||||
Please *don't* use the SourceForge or Google Code projects any more; they are obsolete and no longer maintained.
|
||||
|
||||
## Sponsorship
|
||||
Development time and resources for PHPMailer are provided by [Smartmessages.net](https://info.smartmessages.net/), the world's only privacy-first email marketing system.
|
||||
Development time and resources for PHPMailer are provided by [Smartmessages.net](https://info.smartmessages.net/), the world's only privacy-first email marketing system.
|
||||
|
||||
<a href="https://info.smartmessages.net/"><img src="https://www.smartmessages.net/img/smartmessages-logo.svg" width="550" alt="Smartmessages.net privacy-first email marketing logo"></a>
|
||||
|
||||
Donations are very welcome, whether in beer 🍺, T-shirts 👕, or cold, hard cash 💰. Sponsorship through GitHub is a simple and convenient way to say "thank you" to PHPMailer's maintainers and contributors – just click the "Sponsor" button [on the project page](https://github.com/PHPMailer/PHPMailer). If your company uses PHPMailer, consider taking part in Tidelift's enterprise support programme.
|
||||
|
||||
Contributions are very welcome, whether in beer 🍺, T-shirts 👕, or cold, hard cash 💰. Sponsorship through GitHub is a simple and convenient way to say "thank you" to PHPMailer's maintainers and contributors – just click the "Sponsor" button [on the project page](https://github.com/PHPMailer/PHPMailer).
|
||||
## PHPMailer For Enterprise
|
||||
|
||||
Available as part of the Tidelift Subscription.
|
||||
|
||||
The maintainers of PHPMailer and thousands of other packages are working with Tidelift to deliver commercial
|
||||
support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and
|
||||
improve code health, while paying the maintainers of the exact packages you
|
||||
use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-phpmailer-phpmailer?utm_source=packagist-phpmailer-phpmailer&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
|
||||
|
||||
## Changelog
|
||||
See [changelog](changelog.md).
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# Security notices relating to PHPMailer
|
||||
|
||||
Please disclose any vulnerabilities found responsibly - report any security problems found to the maintainers privately.
|
||||
Please disclose any security issues or vulnerabilities found through [Tidelift's coordinated disclosure system](https://tidelift.com/security) or to the maintainers privately.
|
||||
|
||||
PHPMailer versions between 6.1.8 and 6.4.0 contain a regression of the earlier CVE-2018-19296 object injection vulnerability as a result of [a fix for Windows UNC paths in 6.1.8](https://github.com/PHPMailer/PHPMailer/commit/e2e07a355ee8ff36aba21d0242c5950c56e4c6f9). Recorded as [CVE-2020-36326](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2020-36326). Reported by Fariskhi Vidyan via Tidelift. 6.4.1 fixes this issue, and also enforces stricter checks for URL schemes in local path contexts.
|
||||
|
||||
PHPMailer versions 6.1.5 and earlier contain an output escaping bug that occurs in `Content-Type` and `Content-Disposition` when filenames passed into `addAttachment` and other methods that accept attachment names contain double quote characters, in contravention of RFC822 3.4.1. No specific vulnerability has been found relating to this, but it could allow file attachments to bypass attachment filters that are based on matching filename extensions. Recorded as [CVE-2020-13625](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2020-13625). Reported by Elar Lang of Clarified Security.
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
6.3.0
|
||||
6.4.1
|
||||
@@ -40,7 +40,7 @@
|
||||
"yoast/phpunit-polyfills": "^0.2.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "Needed to send email in multibyte encoding charset",
|
||||
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
|
||||
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
|
||||
"league/oauth2-google": "Needed for Google XOAUTH2 authentication",
|
||||
"psr/log": "For optional PSR-3 debug logging",
|
||||
@@ -57,5 +57,9 @@
|
||||
"PHPMailer\\Test\\": "test/"
|
||||
}
|
||||
},
|
||||
"license": "LGPL-2.1-only"
|
||||
"license": "LGPL-2.1-only",
|
||||
"scripts": {
|
||||
"check": "./vendor/bin/phpcs",
|
||||
"test": "./vendor/bin/phpunit"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,10 +48,10 @@ use Stevenmaguire\OAuth2\Client\Provider\Microsoft;
|
||||
if (!isset($_GET['code']) && !isset($_GET['provider'])) {
|
||||
?>
|
||||
<html>
|
||||
<body>Select Provider:<br/>
|
||||
<a href='?provider=Google'>Google</a><br/>
|
||||
<a href='?provider=Yahoo'>Yahoo</a><br/>
|
||||
<a href='?provider=Microsoft'>Microsoft/Outlook/Hotmail/Live/Office365</a><br/>
|
||||
<body>Select Provider:<br>
|
||||
<a href='?provider=Google'>Google</a><br>
|
||||
<a href='?provider=Yahoo'>Yahoo</a><br>
|
||||
<a href='?provider=Microsoft'>Microsoft/Outlook/Hotmail/Live/Office365</a><br>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
|
||||
28
application/vendor/phpmailer/phpmailer/language/phpmailer.lang-sr_latn.php
vendored
Normal file
28
application/vendor/phpmailer/phpmailer/language/phpmailer.lang-sr_latn.php
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Serbian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
* @author Александар Јевремовић <ajevremovic@gmail.com>
|
||||
* @author Miloš Milanović <mmilanovic016@gmail.com>
|
||||
*/
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'SMTP greška: autentifikacija nije uspela.';
|
||||
$PHPMAILER_LANG['connect_host'] = 'SMTP greška: povezivanje sa SMTP serverom nije uspelo.';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP greška: podaci nisu prihvaćeni.';
|
||||
$PHPMAILER_LANG['empty_message'] = 'Sadržaj poruke je prazan.';
|
||||
$PHPMAILER_LANG['encoding'] = 'Nepoznato kodiranje: ';
|
||||
$PHPMAILER_LANG['execute'] = 'Nije moguće izvršiti naredbu: ';
|
||||
$PHPMAILER_LANG['file_access'] = 'Nije moguće pristupiti datoteci: ';
|
||||
$PHPMAILER_LANG['file_open'] = 'Nije moguće otvoriti datoteku: ';
|
||||
$PHPMAILER_LANG['from_failed'] = 'SMTP greška: slanje sa sledećih adresa nije uspelo: ';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'SMTP greška: slanje na sledeće adrese nije uspelo: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Nije moguće pokrenuti mail funkciju.';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Poruka nije poslata. Neispravna adresa: ';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = ' majler nije podržan.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Definišite bar jednu adresu primaoca.';
|
||||
$PHPMAILER_LANG['signing'] = 'Greška prilikom prijave: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'Povezivanje sa SMTP serverom nije uspelo.';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'Greška SMTP servera: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'Nije moguće zadati niti resetovati promenljivu: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'Nedostaje proširenje: ';
|
||||
@@ -16,11 +16,11 @@ $PHPMAILER_LANG['file_access'] = 'Немає доступу до фай
|
||||
$PHPMAILER_LANG['file_open'] = 'Помилка файлової системи: не вдається відкрити файл: ';
|
||||
$PHPMAILER_LANG['from_failed'] = 'Невірна адреса відправника: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Неможливо запустити функцію mail().';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Будь-ласка, введіть хоча б одну email-адресу отримувача.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Будь ласка, введіть хоча б одну email-адресу отримувача.';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = ' - поштовий сервер не підтримується.';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'Помилка SMTP: не вдалося відправлення для таких отримувачів: ';
|
||||
$PHPMAILER_LANG['empty_message'] = 'Пусте повідомлення';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Не відправлено через невірний формат email-адреси: ';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Не відправлено через неправильний формат email-адреси: ';
|
||||
$PHPMAILER_LANG['signing'] = 'Помилка підпису: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'Помилка з\'єднання з SMTP-сервером';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'Помилка SMTP-сервера: ';
|
||||
|
||||
@@ -748,7 +748,7 @@ class PHPMailer
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const VERSION = '6.3.0';
|
||||
const VERSION = '6.4.1';
|
||||
|
||||
/**
|
||||
* Error severity: message only, continue processing.
|
||||
@@ -1199,7 +1199,11 @@ class PHPMailer
|
||||
)
|
||||
) {
|
||||
//Decode the name part if it's present and encoded
|
||||
if (property_exists($address, 'personal') && preg_match('/^=\?.*\?=$/', $address->personal)) {
|
||||
if (
|
||||
property_exists($address, 'personal') &&
|
||||
extension_loaded('mbstring') &&
|
||||
preg_match('/^=\?.*\?=$/', $address->personal)
|
||||
) {
|
||||
$address->personal = mb_decode_mimeheader($address->personal);
|
||||
}
|
||||
|
||||
@@ -1680,16 +1684,11 @@ class PHPMailer
|
||||
//Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html
|
||||
//Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html
|
||||
//Example problem: https://www.drupal.org/node/1057954
|
||||
//CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.
|
||||
if ('' === $this->Sender) {
|
||||
$this->Sender = $this->From;
|
||||
}
|
||||
if (empty($this->Sender) && !empty(ini_get('sendmail_from'))) {
|
||||
//PHP config has a sender address we can use
|
||||
$this->Sender = ini_get('sendmail_from');
|
||||
}
|
||||
//CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.
|
||||
//But sendmail requires this param, so fail without it
|
||||
if (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) {
|
||||
if ($this->Mailer === 'qmail') {
|
||||
$sendmailFmt = '%s -f%s';
|
||||
@@ -1697,8 +1696,12 @@ class PHPMailer
|
||||
$sendmailFmt = '%s -oi -f%s -t';
|
||||
}
|
||||
} else {
|
||||
$this->edebug('Sender address unusable or missing: ' . $this->Sender);
|
||||
return false;
|
||||
//allow sendmail to choose a default envelope sender. It may
|
||||
//seem preferable to force it to use the From header as with
|
||||
//SMTP, but that introduces new problems (see
|
||||
//<https://github.com/PHPMailer/PHPMailer/issues/2298>), and
|
||||
//it has historically worked this way.
|
||||
$sendmailFmt = '%s -oi -t';
|
||||
}
|
||||
|
||||
$sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender);
|
||||
@@ -1718,9 +1721,10 @@ class PHPMailer
|
||||
fwrite($mail, $header);
|
||||
fwrite($mail, $body);
|
||||
$result = pclose($mail);
|
||||
$addrinfo = static::parseAddresses($toAddr);
|
||||
$this->doCallback(
|
||||
($result === 0),
|
||||
[$toAddr],
|
||||
[[$addrinfo['address'], $addrinfo['name']]],
|
||||
$this->cc,
|
||||
$this->bcc,
|
||||
$this->Subject,
|
||||
@@ -1807,7 +1811,8 @@ class PHPMailer
|
||||
*/
|
||||
protected static function isPermittedPath($path)
|
||||
{
|
||||
return !preg_match('#^[a-z]+://#i', $path);
|
||||
//Matches scheme definition from https://tools.ietf.org/html/rfc3986#section-3.1
|
||||
return !preg_match('#^[a-z][a-z\d+.-]*://#i', $path);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1819,12 +1824,15 @@ class PHPMailer
|
||||
*/
|
||||
protected static function fileIsAccessible($path)
|
||||
{
|
||||
if (!static::isPermittedPath($path)) {
|
||||
return false;
|
||||
}
|
||||
$readable = file_exists($path);
|
||||
//If not a UNC path (expected to start with \\), check read permission, see #2069
|
||||
if (strpos($path, '\\\\') !== 0) {
|
||||
$readable = $readable && is_readable($path);
|
||||
}
|
||||
return static::isPermittedPath($path) && $readable;
|
||||
return $readable;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1858,9 +1866,6 @@ class PHPMailer
|
||||
//Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html
|
||||
//Example problem: https://www.drupal.org/node/1057954
|
||||
//CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.
|
||||
if ('' === $this->Sender) {
|
||||
$this->Sender = $this->From;
|
||||
}
|
||||
if (empty($this->Sender) && !empty(ini_get('sendmail_from'))) {
|
||||
//PHP config has a sender address we can use
|
||||
$this->Sender = ini_get('sendmail_from');
|
||||
@@ -1876,7 +1881,17 @@ class PHPMailer
|
||||
if ($this->SingleTo && count($toArr) > 1) {
|
||||
foreach ($toArr as $toAddr) {
|
||||
$result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params);
|
||||
$this->doCallback($result, [$toAddr], $this->cc, $this->bcc, $this->Subject, $body, $this->From, []);
|
||||
$addrinfo = static::parseAddresses($toAddr);
|
||||
$this->doCallback(
|
||||
$result,
|
||||
[[$addrinfo['address'], $addrinfo['name']]],
|
||||
$this->cc,
|
||||
$this->bcc,
|
||||
$this->Subject,
|
||||
$body,
|
||||
$this->From,
|
||||
[]
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$result = $this->mailPassthru($to, $this->Subject, $body, $header, $params);
|
||||
@@ -1965,7 +1980,7 @@ class PHPMailer
|
||||
$isSent = true;
|
||||
}
|
||||
|
||||
$callbacks[] = ['issent' => $isSent, 'to' => $to[0]];
|
||||
$callbacks[] = ['issent' => $isSent, 'to' => $to[0], 'name' => $to[1]];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1986,7 +2001,7 @@ class PHPMailer
|
||||
foreach ($callbacks as $cb) {
|
||||
$this->doCallback(
|
||||
$cb['issent'],
|
||||
[$cb['to']],
|
||||
[[$cb['to'], $cb['name']]],
|
||||
[],
|
||||
[],
|
||||
$this->Subject,
|
||||
|
||||
@@ -46,7 +46,7 @@ class POP3
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const VERSION = '6.3.0';
|
||||
const VERSION = '6.4.1';
|
||||
|
||||
/**
|
||||
* Default POP3 port number.
|
||||
|
||||
@@ -35,7 +35,7 @@ class SMTP
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const VERSION = '6.3.0';
|
||||
const VERSION = '6.4.1';
|
||||
|
||||
/**
|
||||
* SMTP line break constant.
|
||||
@@ -553,6 +553,8 @@ class SMTP
|
||||
}
|
||||
//Send encoded username and password
|
||||
if (
|
||||
//Format from https://tools.ietf.org/html/rfc4616#section-2
|
||||
//We skip the first field (it's forgery), so the string starts with a null byte
|
||||
!$this->sendCommand(
|
||||
'User & Password',
|
||||
base64_encode("\0" . $username . "\0" . $password),
|
||||
|
||||
21
application/vendor/rmccue/requests/.codecov.yml
vendored
Normal file
21
application/vendor/rmccue/requests/.codecov.yml
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
codecov:
|
||||
notify:
|
||||
after_n_builds: 2
|
||||
|
||||
coverage:
|
||||
round: nearest
|
||||
# Status will be green when coverage is between 85 and 100%.
|
||||
range: "85...100"
|
||||
status:
|
||||
project:
|
||||
default:
|
||||
threshold: 1%
|
||||
paths:
|
||||
- "library"
|
||||
patch:
|
||||
default:
|
||||
threshold: 0%
|
||||
paths:
|
||||
- "library"
|
||||
|
||||
comment: false
|
||||
@@ -1,4 +0,0 @@
|
||||
src_dir: library
|
||||
coverage_clover: tests/clover.xml
|
||||
json_path: tests/coveralls.json
|
||||
service_name: travis-ci
|
||||
@@ -1,6 +0,0 @@
|
||||
# Ignore coverage report
|
||||
tests/coverage/*
|
||||
|
||||
# Ignore composer related files
|
||||
/composer.lock
|
||||
/vendor
|
||||
58
application/vendor/rmccue/requests/.travis.yml
vendored
58
application/vendor/rmccue/requests/.travis.yml
vendored
@@ -1,58 +0,0 @@
|
||||
language: php
|
||||
matrix:
|
||||
fast_finish: true
|
||||
include:
|
||||
- php: 5.2
|
||||
- php: 5.3
|
||||
- php: 5.4
|
||||
- php: 5.5
|
||||
- php: 5.6
|
||||
env: TEST_COVERAGE=1
|
||||
- php: 7.0
|
||||
- php: hhvm
|
||||
|
||||
# Use new container infrastructure
|
||||
sudo: false
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.cache/pip
|
||||
- $HOME/.composer/cache
|
||||
- vendor
|
||||
|
||||
install:
|
||||
# Setup the test server
|
||||
- phpenv local 5.5
|
||||
- composer install --dev --no-interaction
|
||||
- TESTPHPBIN=$(phpenv which php)
|
||||
- phpenv local --unset
|
||||
|
||||
# Setup the proxy
|
||||
- pip install --user mitmproxy~=0.15
|
||||
|
||||
before_script:
|
||||
- PHPBIN=$TESTPHPBIN PORT=8080 vendor/bin/start.sh
|
||||
- export REQUESTS_TEST_HOST_HTTP="localhost:8080"
|
||||
|
||||
# Work out of the tests directory
|
||||
- cd tests
|
||||
- PROXYBIN="$HOME/.local/bin/mitmdump" PORT=9002 utils/proxy/start.sh
|
||||
- PROXYBIN="$HOME/.local/bin/mitmdump" PORT=9003 AUTH="test:pass" utils/proxy/start.sh
|
||||
- export REQUESTS_HTTP_PROXY="localhost:9002"
|
||||
- export REQUESTS_HTTP_PROXY_AUTH="localhost:9003"
|
||||
- export REQUESTS_HTTP_PROXY_AUTH_USER="test"
|
||||
- export REQUESTS_HTTP_PROXY_AUTH_PASS="pass"
|
||||
|
||||
# Ensure the HTTPS test instance on Heroku is spun up
|
||||
- curl -s -I http://requests-php-tests.herokuapp.com/ > /dev/null
|
||||
|
||||
script:
|
||||
- phpunit --coverage-clover clover.xml
|
||||
|
||||
after_script:
|
||||
- utils/proxy/stop.sh
|
||||
- cd ..
|
||||
- phpenv local 5.5
|
||||
- PATH=$PATH vendor/bin/stop.sh
|
||||
- test $TEST_COVERAGE && bash <(curl -s https://codecov.io/bash)
|
||||
- phpenv local --unset
|
||||
523
application/vendor/rmccue/requests/CHANGELOG.md
vendored
523
application/vendor/rmccue/requests/CHANGELOG.md
vendored
@@ -1,6 +1,246 @@
|
||||
Changelog
|
||||
=========
|
||||
|
||||
1.8.0
|
||||
-----
|
||||
|
||||
### IMPORTANT NOTES
|
||||
|
||||
#### Last release supporting PHP 5.2 - 5.5
|
||||
|
||||
Release 1.8.0 will be the last release with compatibility for PHP 5.2 - 5.5. With the next release (v2.0.0), the minimum PHP version will be bumped to 5.6.
|
||||
|
||||
#### Last release supporting PEAR distribution
|
||||
|
||||
Release 1.8.0 will be the last release to be distributed via PEAR. From release 2.0.0 onwards, consumers of this library will have to switch to Composer to receive updates.
|
||||
|
||||
### Overview of changes
|
||||
|
||||
- **[SECURITY FIX] Disable deserialization in `FilteredIterator`**
|
||||
|
||||
A `Deserialization of Untrusted Data` weakness was found in the `FilteredIterator` class.
|
||||
|
||||
This security vulnerability was first reported to the WordPress project. The security fix applied to WordPress has been ported back into the library.
|
||||
|
||||
GitHub security advisory: [CVE-2021-29476 - Deserialization of Untrusted Data](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2021-29476)
|
||||
|
||||
Related WordPress CVE: [https://cve.mitre.org/cgi-bin/cvename.cgi?name=2020-28032](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2020-28032)
|
||||
|
||||
(props [@dd32][gh-dd32], [@desrosj][gh-desrosj], [@jrfnl][gh-jrfnl], [@peterwilsoncc][gh-peterwilsoncc], [@SergeyBiryukov][gh-SergeyBiryukov], [@whyisjake][gh-whyisjake], [@xknown][gh-xknown], [#421][gh-421], [#422][gh-422])
|
||||
|
||||
|
||||
- **Repository moved to `WordPress\Requests`**
|
||||
|
||||
The `Requests` library has been moved to the WordPress GitHub organization and can now be found under `https://github.com/WordPress/Requests`.
|
||||
|
||||
All links in code and documentation were updated accordingly.
|
||||
|
||||
Note: the Composer package name remains unchanged ([`rmccue/requests`](https://packagist.org/packages/rmccue/requests)), as well as the documentation site ([requests.ryanmccue.info](https://requests.ryanmccue.info/)).
|
||||
|
||||
(props [@dd32][gh-dd32], [@JustinyAhin][gh-JustinyAhin], [@jrfnl][gh-jrfnl], [@rmccue][gh-rmccue], [#440][gh-440], [#441][gh-441], [#448][gh-448])
|
||||
|
||||
|
||||
- **Manage `"Expect"` header with `cURL` transport**
|
||||
|
||||
By default, `cURL` adds a `Expect: 100-Continue` header to certain requests. This can add as much as a second delay to requests done using `cURL`. This is [discussed on the cURL mailing list](https://curl.se/mail/lib-2017-07/0013.html).
|
||||
|
||||
To prevent this, `Requests` now adds an empty `"Expect"` header to requests that are smaller than 1 MB and use HTTP/1.1.
|
||||
|
||||
(props [@carlalexander][gh-carlalexander], [@schlessera][gh-schlessera], [@TimothyBJacobs][gh-TimothyBJacobs], [#453][gh-453], [#454][gh-454], [#469][gh-469])
|
||||
|
||||
|
||||
- **Update bundled certificates as of 2021-02-12**
|
||||
|
||||
The bundled certificates were updated. A small subset of expired certificates are still included for legacy reasons (and support).
|
||||
|
||||
(props [@ozh][gh-ozh], [@patmead][gh-patmead], [@schlessera][gh-schlessera], [@todeveni][gh-todeveni], [#385][gh-385], [#398][gh-398], [#451][gh-451])
|
||||
|
||||
|
||||
- **Add required `Content-*` headers for empty `POST` requests**
|
||||
|
||||
Sends the `Content-Length` and `Content-Type` headers even for empty `POST` requests, as the length is expected as per [RFC2616 Section 14.13](https://tools.ietf.org/html/rfc2616#section-14.13):
|
||||
```
|
||||
Content-Length header "SHOULD" be included. In practice, it is not
|
||||
used for GET nor HEAD requests, but is expected for POST requests.
|
||||
```
|
||||
|
||||
(props [@dd32][gh-dd32], [@gstrauss][gh-gstrauss], [@jrfnl][gh-jrfnl], [@soulseekah][gh-soulseekah], [#248][gh-248], [#249][gh-249], [#318][gh-318], [#368][gh-368])
|
||||
|
||||
|
||||
- **Ignore locale when creating the HTTP version string from a float**
|
||||
|
||||
The previous behavior allowed for the locale to mess up the float to string conversion resulting in a `GET / HTTP/1,1` instead of `GET / HTTP/1.1` request.
|
||||
|
||||
(props [@tonebender][gh-tonebender], [@Zegnat][gh-Zegnat], [#335][gh-335], [#339][gh-339])
|
||||
|
||||
|
||||
- **Make `verify => false` work with `fsockopen`**
|
||||
|
||||
This allows the `fsockopen` transport now to ignore SSL failures when requested.
|
||||
|
||||
(props [@soulseekah][gh-soulseekah], [#310][gh-310], [#311][gh-311])
|
||||
|
||||
|
||||
- **Only include port number in the `Host` header if it differs from the default**
|
||||
|
||||
The code was not violating the RFC per se, but also not following standard practice of leaving the port off when it is the default port for the scheme, which could lead to connectivity issues.
|
||||
|
||||
(props [@amandato][gh-amandato], [@dd32][gh-dd32], [#238][gh-238])
|
||||
|
||||
|
||||
- **Fix PHP cross-version compatibility**
|
||||
|
||||
Important fixes have been made to improve cross-version compatibility of the code across all supported PHP versions.
|
||||
|
||||
- Use documented order for `implode()` arguments.
|
||||
- Harden type handling when no domain was passed.
|
||||
- Explicitly cast `$url` property to `string` in `Requests::parse_response()`.
|
||||
- Initialize `$body` property to an empty string in `Requests::parse_response()`.
|
||||
- Ensure the stream handle is valid before trying to close it.
|
||||
- Ensure the `$callback` in the `FilteredIterator` is callable before calling it.
|
||||
|
||||
(props [@aaronjorbin][gh-aaronjorbin], [@jrfnl][gh-jrfnl], [#346][gh-346], [#370][gh-370], [#425][gh-425], [#426][gh-426], [#456][gh-456], [#457][gh-457])
|
||||
|
||||
|
||||
- **Improve testing**
|
||||
|
||||
Lots of improvements were made to render the tests more reliable and increase the coverage.
|
||||
|
||||
And to top it all off, all tests are now run against all supported PHP versions, including PHP 8.0.
|
||||
|
||||
(props [@datagutten][gh-datagutten], [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [#345][gh-345], [#351][gh-351], [#355][gh-355], [#366][gh-366], [#412][gh-412], [#414][gh-414], [#445][gh-445], [#458][gh-458], [#464][gh-464])
|
||||
|
||||
|
||||
- **Improve code quality and style**
|
||||
|
||||
A whole swoop of changes has been made to harden the code and make it more consistent.
|
||||
|
||||
The code style has been made consistent across both code and tests and is now enforced via a custom PHPCS rule set.
|
||||
|
||||
The WordPress Coding Standards were chosen as the basis for the code style checks as most contributors to this library originate from the WordPress community and will be familiar with this code style.
|
||||
|
||||
Main differences from the WordPress Coding Standards based on discussions and an analysis of the code styles already in use:
|
||||
|
||||
- No whitespace on the inside of parentheses.
|
||||
- No Yoda conditions.
|
||||
|
||||
A more detailed overview of the decisions that went into the final code style rules can be found at [#434][gh-434].
|
||||
|
||||
(props [@jrfnl][gh-jrfnl], [@KasperFranz][gh-KasperFranz], [@ozh][gh-ozh], [@schlessera][gh-schlessera], [@TysonAndre][gh-TysonAndre], [#263][gh-263], [#296][gh-296], [#328][gh-328], [#358][gh-358], [#359][gh-359], [#360][gh-360], [#361][gh-361], [#362][gh-362], [#363][gh-363], [#364][gh-364], [#386][gh-386], [#396][gh-396], [#399][gh-399], [#400][gh-400], [#401][gh-401], [#402][gh-402], [#403][gh-403], [#404][gh-404], [#405][gh-405], [#406][gh-406], [#408][gh-408], [#409][gh-409], [#410][gh-410], [#411][gh-411], [#413][gh-413], [#415][gh-415], [#416][gh-416], [#417][gh-417], [#423][gh-423], [#424][gh-424], [#434][gh-434])
|
||||
|
||||
|
||||
- **Replace Travis CI with GitHub Actions (partial)**
|
||||
|
||||
The entire CI setup is gradually being moved from Travis CI to GitHub Actions.
|
||||
|
||||
At this point, GitHub Actions takes over the CI from PHP 5.5 onwards, leaving Travis CI as a fallback for lower PHP versions.
|
||||
|
||||
This move will be completed after the planned minimum version bump to PHP 5.6+ with the next release, at which point we will get rid of all the remaining Travis CI integrations.
|
||||
|
||||
(props [@dd32][gh-dd32], [@desrosj][gh-desrosj], [@jrfnl][gh-jrfnl], [@ntwb][gh-ntwb], [@ozh][gh-ozh], [@schlessera][gh-schlessera], [@TimothyBJacobs][gh-TimothyBJacobs], [@TysonAndre][gh-TysonAndre], [#280][gh-280], [#298][gh-298], [#302][gh-302], [#303][gh-303], [#352][gh-352], [#353][gh-353], [#354][gh-354], [#356][gh-356], [#388][gh-388], [#397][gh-397], [#428][gh-428], [#436][gh-436], [#439][gh-439], [#461][gh-461], [#467][gh-467])
|
||||
|
||||
|
||||
- **Update and improve documentation**
|
||||
- Use clearer and more inclusive language.
|
||||
- Update the GitHub Pages site.
|
||||
- Update content and various tweaks to the markdown.
|
||||
- Fix code blocks in `README.md` file.
|
||||
- Add pagination to documentation pages.
|
||||
|
||||
(props [@desrosj][gh-desrosj], [@jrfnl][gh-jrfnl], [@JustinyAhin][gh-JustinyAhin], [@tnorthcutt][gh-tnorthcutt], [#334][gh-334], [#367][gh-367], [#387][gh-387], [#443][gh-443], [#462][gh-462], [#465][gh-465], [#468][gh-468], [#471][gh-471] )
|
||||
|
||||
[gh-194]: https://github.com/WordPress/Requests/issues/194
|
||||
[gh-238]: https://github.com/WordPress/Requests/issues/238
|
||||
[gh-248]: https://github.com/WordPress/Requests/issues/248
|
||||
[gh-249]: https://github.com/WordPress/Requests/issues/249
|
||||
[gh-263]: https://github.com/WordPress/Requests/issues/263
|
||||
[gh-280]: https://github.com/WordPress/Requests/issues/280
|
||||
[gh-296]: https://github.com/WordPress/Requests/issues/296
|
||||
[gh-298]: https://github.com/WordPress/Requests/issues/298
|
||||
[gh-302]: https://github.com/WordPress/Requests/issues/302
|
||||
[gh-303]: https://github.com/WordPress/Requests/issues/303
|
||||
[gh-310]: https://github.com/WordPress/Requests/issues/310
|
||||
[gh-311]: https://github.com/WordPress/Requests/issues/311
|
||||
[gh-318]: https://github.com/WordPress/Requests/issues/318
|
||||
[gh-328]: https://github.com/WordPress/Requests/issues/328
|
||||
[gh-334]: https://github.com/WordPress/Requests/issues/334
|
||||
[gh-335]: https://github.com/WordPress/Requests/issues/335
|
||||
[gh-339]: https://github.com/WordPress/Requests/issues/339
|
||||
[gh-345]: https://github.com/WordPress/Requests/issues/345
|
||||
[gh-346]: https://github.com/WordPress/Requests/issues/346
|
||||
[gh-351]: https://github.com/WordPress/Requests/issues/351
|
||||
[gh-352]: https://github.com/WordPress/Requests/issues/352
|
||||
[gh-353]: https://github.com/WordPress/Requests/issues/353
|
||||
[gh-354]: https://github.com/WordPress/Requests/issues/354
|
||||
[gh-355]: https://github.com/WordPress/Requests/issues/355
|
||||
[gh-356]: https://github.com/WordPress/Requests/issues/356
|
||||
[gh-358]: https://github.com/WordPress/Requests/issues/358
|
||||
[gh-359]: https://github.com/WordPress/Requests/issues/359
|
||||
[gh-360]: https://github.com/WordPress/Requests/issues/360
|
||||
[gh-361]: https://github.com/WordPress/Requests/issues/361
|
||||
[gh-362]: https://github.com/WordPress/Requests/issues/362
|
||||
[gh-363]: https://github.com/WordPress/Requests/issues/363
|
||||
[gh-364]: https://github.com/WordPress/Requests/issues/364
|
||||
[gh-366]: https://github.com/WordPress/Requests/issues/366
|
||||
[gh-367]: https://github.com/WordPress/Requests/issues/367
|
||||
[gh-367]: https://github.com/WordPress/Requests/issues/367
|
||||
[gh-368]: https://github.com/WordPress/Requests/issues/368
|
||||
[gh-370]: https://github.com/WordPress/Requests/issues/370
|
||||
[gh-385]: https://github.com/WordPress/Requests/issues/385
|
||||
[gh-386]: https://github.com/WordPress/Requests/issues/386
|
||||
[gh-387]: https://github.com/WordPress/Requests/issues/387
|
||||
[gh-388]: https://github.com/WordPress/Requests/issues/388
|
||||
[gh-396]: https://github.com/WordPress/Requests/issues/396
|
||||
[gh-397]: https://github.com/WordPress/Requests/issues/397
|
||||
[gh-398]: https://github.com/WordPress/Requests/issues/398
|
||||
[gh-399]: https://github.com/WordPress/Requests/issues/399
|
||||
[gh-400]: https://github.com/WordPress/Requests/issues/400
|
||||
[gh-401]: https://github.com/WordPress/Requests/issues/401
|
||||
[gh-402]: https://github.com/WordPress/Requests/issues/402
|
||||
[gh-403]: https://github.com/WordPress/Requests/issues/403
|
||||
[gh-404]: https://github.com/WordPress/Requests/issues/404
|
||||
[gh-405]: https://github.com/WordPress/Requests/issues/405
|
||||
[gh-406]: https://github.com/WordPress/Requests/issues/406
|
||||
[gh-408]: https://github.com/WordPress/Requests/issues/408
|
||||
[gh-409]: https://github.com/WordPress/Requests/issues/409
|
||||
[gh-410]: https://github.com/WordPress/Requests/issues/410
|
||||
[gh-411]: https://github.com/WordPress/Requests/issues/411
|
||||
[gh-412]: https://github.com/WordPress/Requests/issues/412
|
||||
[gh-413]: https://github.com/WordPress/Requests/issues/413
|
||||
[gh-414]: https://github.com/WordPress/Requests/issues/414
|
||||
[gh-415]: https://github.com/WordPress/Requests/issues/415
|
||||
[gh-416]: https://github.com/WordPress/Requests/issues/416
|
||||
[gh-417]: https://github.com/WordPress/Requests/issues/417
|
||||
[gh-421]: https://github.com/WordPress/Requests/issues/421
|
||||
[gh-422]: https://github.com/WordPress/Requests/issues/422
|
||||
[gh-423]: https://github.com/WordPress/Requests/issues/423
|
||||
[gh-424]: https://github.com/WordPress/Requests/issues/424
|
||||
[gh-425]: https://github.com/WordPress/Requests/issues/425
|
||||
[gh-426]: https://github.com/WordPress/Requests/issues/426
|
||||
[gh-428]: https://github.com/WordPress/Requests/issues/428
|
||||
[gh-434]: https://github.com/WordPress/Requests/issues/434
|
||||
[gh-436]: https://github.com/WordPress/Requests/issues/436
|
||||
[gh-439]: https://github.com/WordPress/Requests/issues/439
|
||||
[gh-440]: https://github.com/WordPress/Requests/issues/440
|
||||
[gh-441]: https://github.com/WordPress/Requests/issues/441
|
||||
[gh-443]: https://github.com/WordPress/Requests/issues/443
|
||||
[gh-445]: https://github.com/WordPress/Requests/issues/445
|
||||
[gh-448]: https://github.com/WordPress/Requests/issues/448
|
||||
[gh-451]: https://github.com/WordPress/Requests/issues/451
|
||||
[gh-453]: https://github.com/WordPress/Requests/issues/453
|
||||
[gh-454]: https://github.com/WordPress/Requests/issues/454
|
||||
[gh-456]: https://github.com/WordPress/Requests/issues/456
|
||||
[gh-457]: https://github.com/WordPress/Requests/issues/457
|
||||
[gh-458]: https://github.com/WordPress/Requests/issues/458
|
||||
[gh-461]: https://github.com/WordPress/Requests/issues/461
|
||||
[gh-462]: https://github.com/WordPress/Requests/issues/462
|
||||
[gh-464]: https://github.com/WordPress/Requests/issues/464
|
||||
[gh-465]: https://github.com/WordPress/Requests/issues/465
|
||||
[gh-467]: https://github.com/WordPress/Requests/issues/467
|
||||
[gh-468]: https://github.com/WordPress/Requests/issues/468
|
||||
[gh-469]: https://github.com/WordPress/Requests/issues/469
|
||||
[gh-471]: https://github.com/WordPress/Requests/issues/471
|
||||
|
||||
1.7.0
|
||||
-----
|
||||
|
||||
@@ -9,20 +249,20 @@ Changelog
|
||||
Requests is now tested against both HHVM and PHP 7, and they are supported as
|
||||
first-party platforms.
|
||||
|
||||
(props @rmccue, [#106][gh-106], [#176][gh-176])
|
||||
(props [@rmccue][gh-rmccue], [#106][gh-106], [#176][gh-176])
|
||||
|
||||
- Transfer & connect timeouts, in seconds & milliseconds
|
||||
|
||||
cURL is unable to handle timeouts under a second in DNS lookups, so we round
|
||||
those up to ensure 1-999ms isn't counted as an instant failure.
|
||||
|
||||
(props @ozh, @rmccue, [#97][gh-97], [#216][gh-216])
|
||||
(props [@ozh][gh-ozh], [@rmccue][gh-rmccue], [#97][gh-97], [#216][gh-216])
|
||||
|
||||
- Rework cookie handling to be more thorough.
|
||||
|
||||
Cookies are now restricted to the same-origin by default, expiration is checked.
|
||||
|
||||
(props @catharsisjelly, @rmccue, [#120][gh-120], [#124][gh-124], [#130][gh-130], [#132][gh-132], [#156][gh-156])
|
||||
(props [@catharsisjelly][gh-catharsisjelly], [@rmccue][gh-rmccue], [#120][gh-120], [#124][gh-124], [#130][gh-130], [#132][gh-132], [#156][gh-156])
|
||||
|
||||
- Improve testing
|
||||
|
||||
@@ -30,243 +270,243 @@ Changelog
|
||||
improvements to the quality of the testing suite. There are now also
|
||||
comprehensive proxy tests to ensure coverage there.
|
||||
|
||||
(props @rmccue, [#75][gh-75], [#107][gh-107], [#170][gh-170], [#177][gh-177], [#181][gh-181], [#183][gh-183], [#185][gh-185], [#196][gh-196], [#202][gh-202], [#203][gh-203])
|
||||
(props [@rmccue][gh-rmccue], [#75][gh-75], [#107][gh-107], [#170][gh-170], [#177][gh-177], [#181][gh-181], [#183][gh-183], [#185][gh-185], [#196][gh-196], [#202][gh-202], [#203][gh-203])
|
||||
|
||||
- Support custom HTTP methods
|
||||
|
||||
Previously, custom HTTP methods were only supported on sockets; they are now
|
||||
supported across all transports.
|
||||
|
||||
(props @ocean90, [#227][gh-227])
|
||||
(props [@ocean90][gh-ocean90], [#227][gh-227])
|
||||
|
||||
- Add byte limit option
|
||||
|
||||
(props @rmccue, [#172][gh-172])
|
||||
(props [@rmccue][gh-rmccue], [#172][gh-172])
|
||||
|
||||
- Support a Requests_Proxy_HTTP() instance for the proxy setting.
|
||||
|
||||
(props @ocean90, [#223][gh-223])
|
||||
(props [@ocean90][gh-ocean90], [#223][gh-223])
|
||||
|
||||
- Add progress hook
|
||||
|
||||
(props @rmccue, [#180][gh-180])
|
||||
(props [@rmccue][gh-rmccue], [#180][gh-180])
|
||||
|
||||
- Add a before_redirect hook to alter redirects
|
||||
|
||||
(props @rmccue, [#205][gh-205])
|
||||
(props [@rmccue][gh-rmccue], [#205][gh-205])
|
||||
|
||||
- Pass cURL info to after_request
|
||||
|
||||
(props @rmccue, [#206][gh-206])
|
||||
(props [@rmccue][gh-rmccue], [#206][gh-206])
|
||||
|
||||
- Remove explicit autoload in Composer installation instructions
|
||||
|
||||
(props @SlikNL, [#86][gh-86])
|
||||
(props [@SlikNL][gh-SlikNL], [#86][gh-86])
|
||||
|
||||
- Restrict CURLOPT_PROTOCOLS on `defined()` instead of `version_compare()`
|
||||
|
||||
(props @ozh, [#92][gh-92])
|
||||
(props [@ozh][gh-ozh], [#92][gh-92])
|
||||
|
||||
- Fix doc - typo in "Authentication"
|
||||
|
||||
(props @remik, [#99][gh-99])
|
||||
(props [@remik][gh-remik], [#99][gh-99])
|
||||
|
||||
- Contextually check for a valid transport
|
||||
|
||||
(props @ozh, [#101][gh-101])
|
||||
(props [@ozh][gh-ozh], [#101][gh-101])
|
||||
|
||||
- Follow relative redirects correctly
|
||||
|
||||
(props @ozh, [#103][gh-103])
|
||||
(props [@ozh][gh-ozh], [#103][gh-103])
|
||||
|
||||
- Use cURL's version_number
|
||||
|
||||
(props @mishan, [#104][gh-104])
|
||||
(props [@mishan][gh-mishan], [#104][gh-104])
|
||||
|
||||
- Removed duplicated option docs
|
||||
|
||||
(props @staabm, [#112][gh-112])
|
||||
(props [@staabm][gh-staabm], [#112][gh-112])
|
||||
|
||||
- code styling fixed
|
||||
|
||||
(props @imsaintx, [#113][gh-113])
|
||||
(props [@imsaintx][gh-imsaintx], [#113][gh-113])
|
||||
|
||||
- Fix IRI "normalization"
|
||||
|
||||
(props @ozh, [#128][gh-128])
|
||||
(props [@ozh][gh-ozh], [#128][gh-128])
|
||||
|
||||
- Mention two PHP extension dependencies in the README.
|
||||
|
||||
(props @orlitzky, [#136][gh-136])
|
||||
(props [@orlitzky][gh-orlitzky], [#136][gh-136])
|
||||
|
||||
- Ignore coverage report files
|
||||
|
||||
(props @ozh, [#148][gh-148])
|
||||
(props [@ozh][gh-ozh], [#148][gh-148])
|
||||
|
||||
- drop obsolete "return" after throw
|
||||
|
||||
(props @staabm, [#150][gh-150])
|
||||
(props [@staabm][gh-staabm], [#150][gh-150])
|
||||
|
||||
- Updated exception message to specify both http + https
|
||||
|
||||
(props @beutnagel, [#162][gh-162])
|
||||
(props [@beutnagel][gh-beutnagel], [#162][gh-162])
|
||||
|
||||
- Sets `stream_headers` method to public to allow calling it from other
|
||||
places.
|
||||
|
||||
(props @adri, [#158][gh-158])
|
||||
(props [@adri][gh-adri], [#158][gh-158])
|
||||
|
||||
- Remove duplicated stream_get_meta_data call
|
||||
|
||||
(props @rmccue, [#179][gh-179])
|
||||
(props [@rmccue][gh-rmccue], [#179][gh-179])
|
||||
|
||||
- Transmits $errno from stream_socket_client in exception
|
||||
|
||||
(props @laurentmartelli, [#174][gh-174])
|
||||
(props [@laurentmartelli][gh-laurentmartelli], [#174][gh-174])
|
||||
|
||||
- Correct methods to use snake_case
|
||||
|
||||
(props @rmccue, [#184][gh-184])
|
||||
(props [@rmccue][gh-rmccue], [#184][gh-184])
|
||||
|
||||
- Improve code quality
|
||||
|
||||
(props @rmccue, [#186][gh-186])
|
||||
(props [@rmccue][gh-rmccue], [#186][gh-186])
|
||||
|
||||
- Update Build Status image
|
||||
|
||||
(props @rmccue, [#187][gh-187])
|
||||
(props [@rmccue][gh-rmccue], [#187][gh-187])
|
||||
|
||||
- Fix/Rationalize transports (v2)
|
||||
|
||||
(props @rmccue, [#188][gh-188])
|
||||
(props [@rmccue][gh-rmccue], [#188][gh-188])
|
||||
|
||||
- Surface cURL errors
|
||||
|
||||
(props @ifwe, [#194][gh-194])
|
||||
(props [@ifwe][gh-ifwe], [#194][gh-194])
|
||||
|
||||
- Fix for memleak and curl_close() never being called
|
||||
|
||||
(props @kwuerl, [#200][gh-200])
|
||||
(props [@kwuerl][gh-kwuerl], [#200][gh-200])
|
||||
|
||||
- addex how to install with composer
|
||||
|
||||
(props @royopa, [#164][gh-164])
|
||||
(props [@royopa][gh-royopa], [#164][gh-164])
|
||||
|
||||
- Uppercase the method to ensure compatibility
|
||||
|
||||
(props @rmccue, [#207][gh-207])
|
||||
(props [@rmccue][gh-rmccue], [#207][gh-207])
|
||||
|
||||
- Store default certificate path
|
||||
|
||||
(props @rmccue, [#210][gh-210])
|
||||
(props [@rmccue][gh-rmccue], [#210][gh-210])
|
||||
|
||||
- Force closing keep-alive connections on old cURL
|
||||
|
||||
(props @rmccue, [#211][gh-211])
|
||||
(props [@rmccue][gh-rmccue], [#211][gh-211])
|
||||
|
||||
- Docs: Updated HTTP links with HTTPS links where applicable
|
||||
|
||||
(props @ntwb, [#215][gh-215])
|
||||
(props [@ntwb][gh-ntwb], [#215][gh-215])
|
||||
|
||||
- Remove the executable bit
|
||||
|
||||
(props @ocean90, [#224][gh-224])
|
||||
(props [@ocean90][gh-ocean90], [#224][gh-224])
|
||||
|
||||
- Change more links to HTTPS
|
||||
|
||||
(props @rmccue, [#217][gh-217])
|
||||
(props [@rmccue][gh-rmccue], [#217][gh-217])
|
||||
|
||||
- Bail from cURL when either `curl_init()` OR `curl_exec()` are unavailable
|
||||
|
||||
(props @dd32, [#230][gh-230])
|
||||
(props [@dd32][gh-dd32], [#230][gh-230])
|
||||
|
||||
- Disable OpenSSL's internal peer_name checking when `verifyname` is disabled.
|
||||
|
||||
(props @dd32, [#239][gh-239])
|
||||
(props [@dd32][gh-dd32], [#239][gh-239])
|
||||
|
||||
- Only include the port number in the `Host` header when it differs from
|
||||
default
|
||||
|
||||
(props @dd32, [#238][gh-238])
|
||||
(props [@dd32][gh-dd32], [#238][gh-238])
|
||||
|
||||
- Respect port if specified for HTTPS connections
|
||||
|
||||
(props @dd32, [#237][gh-237])
|
||||
(props [@dd32][gh-dd32], [#237][gh-237])
|
||||
|
||||
- Allow paths starting with a double-slash
|
||||
|
||||
(props @rmccue, [#240][gh-240])
|
||||
(props [@rmccue][gh-rmccue], [#240][gh-240])
|
||||
|
||||
- Fixes bug in rfc2616 #3.6.1 implementation.
|
||||
|
||||
(props @stephenharris, [#236][gh-236], [#3][gh-3])
|
||||
(props [@stephenharris][gh-stephenharris], [#236][gh-236], [#3][gh-3])
|
||||
|
||||
- CURLOPT_HTTPHEADER在php7接受空数组导致php-fpm奔溃
|
||||
|
||||
(props @qibinghua, [#219][gh-219])
|
||||
(props [@qibinghua][gh-qibinghua], [#219][gh-219])
|
||||
|
||||
[gh-3]: https://github.com/rmccue/Requests/issues/3
|
||||
[gh-75]: https://github.com/rmccue/Requests/issues/75
|
||||
[gh-86]: https://github.com/rmccue/Requests/issues/86
|
||||
[gh-92]: https://github.com/rmccue/Requests/issues/92
|
||||
[gh-97]: https://github.com/rmccue/Requests/issues/97
|
||||
[gh-99]: https://github.com/rmccue/Requests/issues/99
|
||||
[gh-101]: https://github.com/rmccue/Requests/issues/101
|
||||
[gh-103]: https://github.com/rmccue/Requests/issues/103
|
||||
[gh-104]: https://github.com/rmccue/Requests/issues/104
|
||||
[gh-106]: https://github.com/rmccue/Requests/issues/106
|
||||
[gh-107]: https://github.com/rmccue/Requests/issues/107
|
||||
[gh-112]: https://github.com/rmccue/Requests/issues/112
|
||||
[gh-113]: https://github.com/rmccue/Requests/issues/113
|
||||
[gh-120]: https://github.com/rmccue/Requests/issues/120
|
||||
[gh-124]: https://github.com/rmccue/Requests/issues/124
|
||||
[gh-128]: https://github.com/rmccue/Requests/issues/128
|
||||
[gh-130]: https://github.com/rmccue/Requests/issues/130
|
||||
[gh-132]: https://github.com/rmccue/Requests/issues/132
|
||||
[gh-136]: https://github.com/rmccue/Requests/issues/136
|
||||
[gh-148]: https://github.com/rmccue/Requests/issues/148
|
||||
[gh-150]: https://github.com/rmccue/Requests/issues/150
|
||||
[gh-156]: https://github.com/rmccue/Requests/issues/156
|
||||
[gh-158]: https://github.com/rmccue/Requests/issues/158
|
||||
[gh-162]: https://github.com/rmccue/Requests/issues/162
|
||||
[gh-164]: https://github.com/rmccue/Requests/issues/164
|
||||
[gh-170]: https://github.com/rmccue/Requests/issues/170
|
||||
[gh-172]: https://github.com/rmccue/Requests/issues/172
|
||||
[gh-174]: https://github.com/rmccue/Requests/issues/174
|
||||
[gh-176]: https://github.com/rmccue/Requests/issues/176
|
||||
[gh-177]: https://github.com/rmccue/Requests/issues/177
|
||||
[gh-179]: https://github.com/rmccue/Requests/issues/179
|
||||
[gh-180]: https://github.com/rmccue/Requests/issues/180
|
||||
[gh-181]: https://github.com/rmccue/Requests/issues/181
|
||||
[gh-183]: https://github.com/rmccue/Requests/issues/183
|
||||
[gh-184]: https://github.com/rmccue/Requests/issues/184
|
||||
[gh-185]: https://github.com/rmccue/Requests/issues/185
|
||||
[gh-186]: https://github.com/rmccue/Requests/issues/186
|
||||
[gh-187]: https://github.com/rmccue/Requests/issues/187
|
||||
[gh-188]: https://github.com/rmccue/Requests/issues/188
|
||||
[gh-194]: https://github.com/rmccue/Requests/issues/194
|
||||
[gh-196]: https://github.com/rmccue/Requests/issues/196
|
||||
[gh-200]: https://github.com/rmccue/Requests/issues/200
|
||||
[gh-202]: https://github.com/rmccue/Requests/issues/202
|
||||
[gh-203]: https://github.com/rmccue/Requests/issues/203
|
||||
[gh-205]: https://github.com/rmccue/Requests/issues/205
|
||||
[gh-206]: https://github.com/rmccue/Requests/issues/206
|
||||
[gh-207]: https://github.com/rmccue/Requests/issues/207
|
||||
[gh-210]: https://github.com/rmccue/Requests/issues/210
|
||||
[gh-211]: https://github.com/rmccue/Requests/issues/211
|
||||
[gh-215]: https://github.com/rmccue/Requests/issues/215
|
||||
[gh-216]: https://github.com/rmccue/Requests/issues/216
|
||||
[gh-217]: https://github.com/rmccue/Requests/issues/217
|
||||
[gh-219]: https://github.com/rmccue/Requests/issues/219
|
||||
[gh-223]: https://github.com/rmccue/Requests/issues/223
|
||||
[gh-224]: https://github.com/rmccue/Requests/issues/224
|
||||
[gh-227]: https://github.com/rmccue/Requests/issues/227
|
||||
[gh-230]: https://github.com/rmccue/Requests/issues/230
|
||||
[gh-236]: https://github.com/rmccue/Requests/issues/236
|
||||
[gh-237]: https://github.com/rmccue/Requests/issues/237
|
||||
[gh-238]: https://github.com/rmccue/Requests/issues/238
|
||||
[gh-239]: https://github.com/rmccue/Requests/issues/239
|
||||
[gh-240]: https://github.com/rmccue/Requests/issues/240
|
||||
[gh-3]: https://github.com/WordPress/Requests/issues/3
|
||||
[gh-75]: https://github.com/WordPress/Requests/issues/75
|
||||
[gh-86]: https://github.com/WordPress/Requests/issues/86
|
||||
[gh-92]: https://github.com/WordPress/Requests/issues/92
|
||||
[gh-97]: https://github.com/WordPress/Requests/issues/97
|
||||
[gh-99]: https://github.com/WordPress/Requests/issues/99
|
||||
[gh-101]: https://github.com/WordPress/Requests/issues/101
|
||||
[gh-103]: https://github.com/WordPress/Requests/issues/103
|
||||
[gh-104]: https://github.com/WordPress/Requests/issues/104
|
||||
[gh-106]: https://github.com/WordPress/Requests/issues/106
|
||||
[gh-107]: https://github.com/WordPress/Requests/issues/107
|
||||
[gh-112]: https://github.com/WordPress/Requests/issues/112
|
||||
[gh-113]: https://github.com/WordPress/Requests/issues/113
|
||||
[gh-120]: https://github.com/WordPress/Requests/issues/120
|
||||
[gh-124]: https://github.com/WordPress/Requests/issues/124
|
||||
[gh-128]: https://github.com/WordPress/Requests/issues/128
|
||||
[gh-130]: https://github.com/WordPress/Requests/issues/130
|
||||
[gh-132]: https://github.com/WordPress/Requests/issues/132
|
||||
[gh-136]: https://github.com/WordPress/Requests/issues/136
|
||||
[gh-148]: https://github.com/WordPress/Requests/issues/148
|
||||
[gh-150]: https://github.com/WordPress/Requests/issues/150
|
||||
[gh-156]: https://github.com/WordPress/Requests/issues/156
|
||||
[gh-158]: https://github.com/WordPress/Requests/issues/158
|
||||
[gh-162]: https://github.com/WordPress/Requests/issues/162
|
||||
[gh-164]: https://github.com/WordPress/Requests/issues/164
|
||||
[gh-170]: https://github.com/WordPress/Requests/issues/170
|
||||
[gh-172]: https://github.com/WordPress/Requests/issues/172
|
||||
[gh-174]: https://github.com/WordPress/Requests/issues/174
|
||||
[gh-176]: https://github.com/WordPress/Requests/issues/176
|
||||
[gh-177]: https://github.com/WordPress/Requests/issues/177
|
||||
[gh-179]: https://github.com/WordPress/Requests/issues/179
|
||||
[gh-180]: https://github.com/WordPress/Requests/issues/180
|
||||
[gh-181]: https://github.com/WordPress/Requests/issues/181
|
||||
[gh-183]: https://github.com/WordPress/Requests/issues/183
|
||||
[gh-184]: https://github.com/WordPress/Requests/issues/184
|
||||
[gh-185]: https://github.com/WordPress/Requests/issues/185
|
||||
[gh-186]: https://github.com/WordPress/Requests/issues/186
|
||||
[gh-187]: https://github.com/WordPress/Requests/issues/187
|
||||
[gh-188]: https://github.com/WordPress/Requests/issues/188
|
||||
[gh-194]: https://github.com/WordPress/Requests/issues/194
|
||||
[gh-196]: https://github.com/WordPress/Requests/issues/196
|
||||
[gh-200]: https://github.com/WordPress/Requests/issues/200
|
||||
[gh-202]: https://github.com/WordPress/Requests/issues/202
|
||||
[gh-203]: https://github.com/WordPress/Requests/issues/203
|
||||
[gh-205]: https://github.com/WordPress/Requests/issues/205
|
||||
[gh-206]: https://github.com/WordPress/Requests/issues/206
|
||||
[gh-207]: https://github.com/WordPress/Requests/issues/207
|
||||
[gh-210]: https://github.com/WordPress/Requests/issues/210
|
||||
[gh-211]: https://github.com/WordPress/Requests/issues/211
|
||||
[gh-215]: https://github.com/WordPress/Requests/issues/215
|
||||
[gh-216]: https://github.com/WordPress/Requests/issues/216
|
||||
[gh-217]: https://github.com/WordPress/Requests/issues/217
|
||||
[gh-219]: https://github.com/WordPress/Requests/issues/219
|
||||
[gh-223]: https://github.com/WordPress/Requests/issues/223
|
||||
[gh-224]: https://github.com/WordPress/Requests/issues/224
|
||||
[gh-227]: https://github.com/WordPress/Requests/issues/227
|
||||
[gh-230]: https://github.com/WordPress/Requests/issues/230
|
||||
[gh-236]: https://github.com/WordPress/Requests/issues/236
|
||||
[gh-237]: https://github.com/WordPress/Requests/issues/237
|
||||
[gh-238]: https://github.com/WordPress/Requests/issues/238
|
||||
[gh-239]: https://github.com/WordPress/Requests/issues/239
|
||||
[gh-240]: https://github.com/WordPress/Requests/issues/240
|
||||
|
||||
1.6.0
|
||||
-----
|
||||
@@ -297,19 +537,62 @@ default
|
||||
[docs/proxy]: http://requests.ryanmccue.info/docs/proxy.html
|
||||
[docs/usage-advanced]: http://requests.ryanmccue.info/docs/usage-advanced.html
|
||||
|
||||
[#1]: https://github.com/rmccue/Requests/issues/1
|
||||
[#2]: https://github.com/rmccue/Requests/issues/2
|
||||
[#3]: https://github.com/rmccue/Requests/issues/3
|
||||
[#6]: https://github.com/rmccue/Requests/issues/6
|
||||
[#9]: https://github.com/rmccue/Requests/issues/9
|
||||
[#23]: https://github.com/rmccue/Requests/issues/23
|
||||
[#62]: https://github.com/rmccue/Requests/issues/62
|
||||
[#63]: https://github.com/rmccue/Requests/issues/63
|
||||
[#64]: https://github.com/rmccue/Requests/issues/64
|
||||
[#70]: https://github.com/rmccue/Requests/issues/70
|
||||
[#1]: https://github.com/WordPress/Requests/issues/1
|
||||
[#2]: https://github.com/WordPress/Requests/issues/2
|
||||
[#3]: https://github.com/WordPress/Requests/issues/3
|
||||
[#6]: https://github.com/WordPress/Requests/issues/6
|
||||
[#9]: https://github.com/WordPress/Requests/issues/9
|
||||
[#23]: https://github.com/WordPress/Requests/issues/23
|
||||
[#62]: https://github.com/WordPress/Requests/issues/62
|
||||
[#63]: https://github.com/WordPress/Requests/issues/63
|
||||
[#64]: https://github.com/WordPress/Requests/issues/64
|
||||
[#70]: https://github.com/WordPress/Requests/issues/70
|
||||
|
||||
[View all changes][https://github.com/rmccue/Requests/compare/v1.5.0...v1.6.0]
|
||||
[View all changes][https://github.com/WordPress/Requests/compare/v1.5.0...v1.6.0]
|
||||
|
||||
1.5.0
|
||||
-----
|
||||
Initial release!
|
||||
Initial release!
|
||||
|
||||
[gh-aaronjorbin]: https://github.com/aaronjorbin
|
||||
[gh-adri]: https://github.com/adri
|
||||
[gh-amandato]: https://github.com/amandato
|
||||
[gh-beutnagel]: https://github.com/beutnagel
|
||||
[gh-carlalexander]: https://github.com/carlalexander
|
||||
[gh-catharsisjelly]: https://github.com/catharsisjelly
|
||||
[gh-datagutten]: https://github.com/datagutten
|
||||
[gh-dd32]: https://github.com/dd32
|
||||
[gh-desrosj]: https://github.com/desrosj
|
||||
[gh-gstrauss]: https://github.com/gstrauss
|
||||
[gh-ifwe]: https://github.com/ifwe
|
||||
[gh-imsaintx]: https://github.com/imsaintx
|
||||
[gh-JustinyAhin]: https://github.com/JustinyAhin
|
||||
[gh-jrfnl]: https://github.com/jrfnl
|
||||
[gh-KasperFranz]: https://github.com/KasperFranz
|
||||
[gh-kwuerl]: https://github.com/kwuerl
|
||||
[gh-laurentmartelli]: https://github.com/laurentmartelli
|
||||
[gh-mishan]: https://github.com/mishan
|
||||
[gh-ntwb]: https://github.com/ntwb
|
||||
[gh-ocean90]: https://github.com/ocean90
|
||||
[gh-orlitzky]: https://github.com/orlitzky
|
||||
[gh-ozh]: https://github.com/ozh
|
||||
[gh-patmead]: https://github.com/patmead
|
||||
[gh-peterwilsoncc]: https://github.com/peterwilsoncc
|
||||
[gh-qibinghua]: https://github.com/qibinghua
|
||||
[gh-remik]: https://github.com/remik
|
||||
[gh-rmccue]: https://github.com/rmccue
|
||||
[gh-royopa]: https://github.com/royopa
|
||||
[gh-schlessera]: https://github.com/schlessera
|
||||
[gh-SergeyBiryukov]: https://github.com/SergeyBiryukov
|
||||
[gh-SlikNL]: https://github.com/SlikNL
|
||||
[gh-soulseekah]: https://github.com/soulseekah
|
||||
[gh-staabm]: https://github.com/staabm
|
||||
[gh-stephenharris]: https://github.com/stephenharris
|
||||
[gh-TimothyBJacobs]: https://github.com/TimothyBJacobs
|
||||
[gh-tnorthcutt]: https://github.com/tnorthcutt
|
||||
[gh-todeveni]: https://github.com/todeveni
|
||||
[gh-tonebender]: https://github.com/tonebender
|
||||
[gh-TysonAndre]: https://github.com/TysonAndre
|
||||
[gh-whyisjake]: https://github.com/whyisjake
|
||||
[gh-xknown]: https://github.com/xknown
|
||||
[gh-Zegnat]: https://github.com/Zegnat
|
||||
|
||||
74
application/vendor/rmccue/requests/README.md
vendored
74
application/vendor/rmccue/requests/README.md
vendored
@@ -1,13 +1,16 @@
|
||||
Requests for PHP
|
||||
================
|
||||
|
||||
[](https://travis-ci.org/rmccue/Requests)
|
||||
[](http://codecov.io/github/rmccue/Requests?branch=master)
|
||||
[](https://github.com/WordPress/Requests/actions/workflows/cs.yml)
|
||||
[](https://github.com/WordPress/Requests/actions/workflows/lint.yml)
|
||||
[](https://github.com/WordPress/Requests/actions/workflows/test.yml)
|
||||
[](https://travis-ci.org/WordPress/Requests)
|
||||
[](http://codecov.io/github/WordPress/Requests?branch=master)
|
||||
|
||||
Requests is a HTTP library written in PHP, for human beings. It is roughly
|
||||
based on the API from the excellent [Requests Python
|
||||
library](http://python-requests.org/). Requests is [ISC
|
||||
Licensed](https://github.com/rmccue/Requests/blob/master/LICENSE) (similar to
|
||||
Licensed](https://github.com/WordPress/Requests/blob/master/LICENSE) (similar to
|
||||
the new BSD license) and has no dependencies, except for PHP 5.2+.
|
||||
|
||||
Despite PHP's use as a language for the web, its tools for sending HTTP requests
|
||||
@@ -36,7 +39,7 @@ var_dump($request->body);
|
||||
|
||||
Requests allows you to send **HEAD**, **GET**, **POST**, **PUT**, **DELETE**,
|
||||
and **PATCH** HTTP requests. You can add headers, form data, multipart files,
|
||||
and parameters with simple arrays, and access the response data in the same way.
|
||||
and parameters with basic arrays, and access the response data in the same way.
|
||||
Requests uses cURL and fsockopen, depending on what your system has available,
|
||||
but abstracts all the nasty stuff out of your way, providing a consistent API.
|
||||
|
||||
@@ -63,43 +66,49 @@ composer require rmccue/requests
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
{
|
||||
"require": {
|
||||
"rmccue/requests": ">=1.0"
|
||||
}
|
||||
```json
|
||||
{
|
||||
"require": {
|
||||
"rmccue/requests": ">=1.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Install source from GitHub
|
||||
To install the source code:
|
||||
|
||||
$ git clone git://github.com/rmccue/Requests.git
|
||||
```bash
|
||||
$ git clone git://github.com/WordPress/Requests.git
|
||||
```
|
||||
|
||||
And include it in your scripts:
|
||||
|
||||
require_once '/path/to/Requests/library/Requests.php';
|
||||
```php
|
||||
require_once '/path/to/Requests/library/Requests.php';
|
||||
```
|
||||
|
||||
You'll probably also want to register an autoloader:
|
||||
|
||||
Requests::register_autoloader();
|
||||
|
||||
```php
|
||||
Requests::register_autoloader();
|
||||
```
|
||||
|
||||
### Install source from zip/tarball
|
||||
Alternatively, you can fetch a [tarball][] or [zipball][]:
|
||||
|
||||
$ curl -L https://github.com/rmccue/Requests/tarball/master | tar xzv
|
||||
(or)
|
||||
$ wget https://github.com/rmccue/Requests/tarball/master -O - | tar xzv
|
||||
```bash
|
||||
$ curl -L https://github.com/WordPress/Requests/tarball/master | tar xzv
|
||||
(or)
|
||||
$ wget https://github.com/WordPress/Requests/tarball/master -O - | tar xzv
|
||||
```
|
||||
|
||||
[tarball]: https://github.com/rmccue/Requests/tarball/master
|
||||
[zipball]: https://github.com/rmccue/Requests/zipball/master
|
||||
[tarball]: https://github.com/WordPress/Requests/tarball/master
|
||||
[zipball]: https://github.com/WordPress/Requests/zipball/master
|
||||
|
||||
|
||||
### Using a Class Loader
|
||||
If you're using a class loader (e.g., [Symfony Class Loader][]) for
|
||||
[PSR-0][]-style class loading:
|
||||
|
||||
$loader->registerPrefix('Requests', 'path/to/vendor/Requests/library');
|
||||
```php
|
||||
$loader->registerPrefix('Requests', 'path/to/vendor/Requests/library');
|
||||
```
|
||||
|
||||
[Symfony Class Loader]: https://github.com/symfony/ClassLoader
|
||||
[PSR-0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
|
||||
@@ -116,9 +125,9 @@ documented.
|
||||
|
||||
Requests is [100% documented with PHPDoc](http://requests.ryanmccue.info/api/).
|
||||
If you find any problems with it, [create a new
|
||||
issue](https://github.com/rmccue/Requests/issues/new)!
|
||||
issue](https://github.com/WordPress/Requests/issues/new)!
|
||||
|
||||
[prose-based documentation]: https://github.com/rmccue/Requests/blob/master/docs/README.md
|
||||
[prose-based documentation]: https://github.com/WordPress/Requests/blob/master/docs/README.md
|
||||
[request_method]: http://requests.ryanmccue.info/api/class-Requests.html#_request
|
||||
|
||||
Testing
|
||||
@@ -127,18 +136,19 @@ Testing
|
||||
Requests strives to have 100% code-coverage of the library with an extensive
|
||||
set of tests. We're not quite there yet, but [we're getting close][codecov].
|
||||
|
||||
[codecov]: http://codecov.io/github/rmccue/Requests
|
||||
[codecov]: http://codecov.io/github/WordPress/Requests
|
||||
|
||||
To run the test suite, first check that you have the [PHP
|
||||
JSON extension ](http://php.net/manual/en/book.json.php) enabled. Then
|
||||
simply:
|
||||
|
||||
$ cd tests
|
||||
$ phpunit
|
||||
```bash
|
||||
$ phpunit
|
||||
```
|
||||
|
||||
If you'd like to run a single set of tests, specify just the name:
|
||||
|
||||
$ phpunit Transport/cURL
|
||||
```bash
|
||||
$ phpunit Transport/cURL
|
||||
```
|
||||
|
||||
Contribute
|
||||
----------
|
||||
@@ -149,4 +159,4 @@ Contribute
|
||||
3. Write a test which shows that the bug was fixed or that the feature works as expected
|
||||
4. Send a pull request and bug me until I merge it
|
||||
|
||||
[the repository]: https://github.com/rmccue/Requests
|
||||
[the repository]: https://github.com/WordPress/Requests
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* PEAR package builder
|
||||
*
|
||||
* Inspired by Twig's create_pear_package.php.
|
||||
* @link https://raw.github.com/fabpot/Twig/master/bin/create_pear_package.php
|
||||
* @author Twig Team
|
||||
* @license BSD license
|
||||
*/
|
||||
|
||||
if (!isset($argv[1]) || $argv[1] === '-h' || $argv[1] === '--help') {
|
||||
echo 'usage: php ' . $argv[0] . ' <version> <stability>' . PHP_EOL;
|
||||
echo PHP_EOL;
|
||||
echo ' version:' . PHP_EOL;
|
||||
echo ' Version of the package, in the form of major.minor.bug' . PHP_EOL;
|
||||
echo PHP_EOL;
|
||||
echo ' stability:' . PHP_EOL;
|
||||
echo ' One of alpha, beta, stable' . PHP_EOL;
|
||||
die();
|
||||
}
|
||||
|
||||
if (!isset($argv[2])) {
|
||||
die('You must provide the stability (alpha, beta, or stable)');
|
||||
}
|
||||
|
||||
$context = array(
|
||||
'date' => gmdate('Y-m-d'),
|
||||
'time' => gmdate('H:m:00'),
|
||||
'version' => $argv[1],
|
||||
'api_version' => $argv[1],
|
||||
'stability' => $argv[2],
|
||||
'api_stability' => $argv[2],
|
||||
);
|
||||
|
||||
$context['files'] = '';
|
||||
$path = realpath(dirname(__FILE__).'/../library/Requests');
|
||||
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::LEAVES_ONLY) as $file) {
|
||||
if (preg_match('/\.php$/', $file)) {
|
||||
$name = str_replace($path . DIRECTORY_SEPARATOR, '', $file);
|
||||
$name = str_replace(DIRECTORY_SEPARATOR, '/', $name);
|
||||
$context['files'][] = "\t\t\t\t\t" . '<file install-as="Requests/' . $name . '" name="' . $name . '" role="php" />';
|
||||
}
|
||||
}
|
||||
|
||||
$context['files'] = implode("\n", $context['files']);
|
||||
|
||||
$template = file_get_contents(dirname(__FILE__).'/../package.xml.tpl');
|
||||
$content = preg_replace_callback('/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/', 'replace_parameters', $template);
|
||||
file_put_contents(dirname(__FILE__).'/../package.xml', $content);
|
||||
|
||||
function replace_parameters($matches) {
|
||||
global $context;
|
||||
|
||||
return isset($context[$matches[1]]) ? $context[$matches[1]] : null;
|
||||
}
|
||||
28
application/vendor/rmccue/requests/composer.json
vendored
28
application/vendor/rmccue/requests/composer.json
vendored
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "rmccue/requests",
|
||||
"description": "A HTTP library written in PHP, for human beings.",
|
||||
"homepage": "http://github.com/rmccue/Requests",
|
||||
"homepage": "http://github.com/WordPress/Requests",
|
||||
"license": "ISC",
|
||||
"keywords": ["http", "idna", "iri", "ipv6", "curl", "sockets", "fsockopen"],
|
||||
"authors": [
|
||||
@@ -14,10 +14,34 @@
|
||||
"php": ">=5.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"requests/test-server": "dev-master"
|
||||
"requests/test-server": "dev-master",
|
||||
"phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5",
|
||||
"squizlabs/php_codesniffer": "^3.5",
|
||||
"phpcompatibility/php-compatibility": "^9.0",
|
||||
"wp-coding-standards/wpcs": "^2.0",
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.3",
|
||||
"php-parallel-lint/php-console-highlighter": "^0.5.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {"Requests": "library/"}
|
||||
},
|
||||
"scripts" : {
|
||||
"lint": [
|
||||
"@php ./vendor/php-parallel-lint/php-parallel-lint/parallel-lint . -e php --exclude vendor --exclude .git"
|
||||
],
|
||||
"checkcs": [
|
||||
"@php ./vendor/squizlabs/php_codesniffer/bin/phpcs"
|
||||
],
|
||||
"fixcs": [
|
||||
"@php ./vendor/squizlabs/php_codesniffer/bin/phpcbf"
|
||||
],
|
||||
"test": [
|
||||
"@php ./vendor/phpunit/phpunit/phpunit --no-coverage"
|
||||
],
|
||||
"coverage": [
|
||||
"@php ./vendor/phpunit/phpunit/phpunit"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
Documentation
|
||||
=============
|
||||
|
||||
If you're here, you're looking for documentation for Requests! The documents
|
||||
here are prose; you might also want to check out the [API documentation][].
|
||||
|
||||
[API documentation]: http://requests.ryanmccue.info/api/
|
||||
|
||||
* Introduction
|
||||
* [Goals][goals]
|
||||
* [Why should I use Requests instead of X?][why-requests]
|
||||
* Usage
|
||||
* [Making a request][usage]
|
||||
* [Advanced usage][usage-advanced]
|
||||
* [Authenticating your request][authentication]
|
||||
* Advanced Usage
|
||||
* [Custom authentication][authentication-custom]
|
||||
* [Requests through proxy][proxy]
|
||||
* [Hooking system][hooks]
|
||||
|
||||
[goals]: goals.md
|
||||
[why-requests]: why-requests.md
|
||||
[usage]: usage.md
|
||||
[usage-advanced]: usage-advanced.md
|
||||
[authentication]: authentication.md
|
||||
[authentication-custom]: authentication-custom.md
|
||||
[hooks]: hooks.md
|
||||
[proxy]: proxy.md
|
||||
@@ -1,44 +0,0 @@
|
||||
Custom Authentication
|
||||
=====================
|
||||
Custom authentication handlers are designed to be extremely simple to write.
|
||||
In order to write a handler, you'll need to implement the `Requests_Auth`
|
||||
interface.
|
||||
|
||||
An instance of this handler is then passed in by the user via the `auth`
|
||||
option, just like for normal authentication.
|
||||
|
||||
Let's say we have a HTTP endpoint that checks for the `Hotdog` header and
|
||||
authenticates you if said header is set to `Yummy`. (I don't know of any
|
||||
services that do this; perhaps this is a market waiting to be tapped?)
|
||||
|
||||
```php
|
||||
class MySoftware_Auth_Hotdog implements Requests_Auth {
|
||||
protected $password;
|
||||
|
||||
public function __construct($password) {
|
||||
$this->password = $password;
|
||||
}
|
||||
|
||||
public function register(Requests_Hooks &$hooks) {
|
||||
$hooks->register('requests.before_request', array(&$this, 'before_request'));
|
||||
}
|
||||
|
||||
public function before_request(&$url, &$headers, &$data, &$type, &$options) {
|
||||
$headers['Hotdog'] = $this->password;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
We then use this in our request calls:
|
||||
|
||||
```
|
||||
$options = array(
|
||||
'auth' => new MySoftware_Auth_Hotdog('yummy')
|
||||
);
|
||||
$response = Requests::get('http://hotdogbin.org/admin', array(), $options);
|
||||
```
|
||||
|
||||
(For more information on how to register and use hooks, see the [hooking
|
||||
system documentation][hooks])
|
||||
|
||||
[hooks]: hooks.md
|
||||
@@ -1,31 +0,0 @@
|
||||
Authentication
|
||||
==============
|
||||
Many requests that you make will require authentication of some type. Requests
|
||||
includes support out of the box for HTTP Basic authentication, with more
|
||||
built-ins coming soon.
|
||||
|
||||
Making a Basic authenticated call is ridiculously easy:
|
||||
|
||||
```php
|
||||
$options = array(
|
||||
'auth' => new Requests_Auth_Basic(array('user', 'password'))
|
||||
);
|
||||
Requests::get('http://httpbin.org/basic-auth/user/password', array(), $options);
|
||||
```
|
||||
|
||||
As Basic authentication is usually what you want when you specify a username
|
||||
and password, you can also just pass in an array as a shorthand:
|
||||
|
||||
```php
|
||||
$options = array(
|
||||
'auth' => array('user', 'password')
|
||||
);
|
||||
Requests::get('http://httpbin.org/basic-auth/user/password', array(), $options);
|
||||
```
|
||||
|
||||
Note that POST/PUT can also take a data parameter, so you also need that
|
||||
before `$options`:
|
||||
|
||||
```php
|
||||
Requests::post('http://httpbin.org/basic-auth/user/password', array(), null, $options);
|
||||
```
|
||||
29
application/vendor/rmccue/requests/docs/goals.md
vendored
29
application/vendor/rmccue/requests/docs/goals.md
vendored
@@ -1,29 +0,0 @@
|
||||
Goals
|
||||
=====
|
||||
|
||||
1. **Simple interface**
|
||||
|
||||
Requests is designed to provide a simple, unified interface to making
|
||||
requests, regardless of what is available on the system. This means not worrying.
|
||||
|
||||
2. **Fully tested code**
|
||||
|
||||
Requests strives to have 90%+ code coverage from the unit tests, aiming for
|
||||
the ideal 100%. Introducing new features always means introducing new tests
|
||||
|
||||
(Note: some parts of the code are not covered by design. These sections are
|
||||
marked with `@codeCoverageIgnore` tags)
|
||||
|
||||
3. **Maximum compatibility**
|
||||
|
||||
No matter what you have installed on your system, you should be able to run
|
||||
Requests. We use cURL if it's available, and fallback to sockets otherwise.
|
||||
We require only a baseline of PHP 5.2, leaving the choice of PHP minimum
|
||||
requirement fully in your hands, and giving you the ability to support many
|
||||
more hosts.
|
||||
|
||||
4. **No dependencies**
|
||||
|
||||
Requests is designed to be entirely self-contained and doesn't require
|
||||
anything else at all. You can run Requests on an entirely stock PHP build
|
||||
without any additional extensions outside the standard library.
|
||||
96
application/vendor/rmccue/requests/docs/hooks.md
vendored
96
application/vendor/rmccue/requests/docs/hooks.md
vendored
@@ -1,96 +0,0 @@
|
||||
Hooks
|
||||
=====
|
||||
Requests has a hook system that you can use to manipulate parts of the request
|
||||
process along with internal transport hooks.
|
||||
|
||||
Check out the [API documentation for `Requests_Hooks`][requests_hooks] for more
|
||||
information on how to use the hook system.
|
||||
|
||||
Available Hooks
|
||||
---------------
|
||||
|
||||
* `requests.before_request`
|
||||
|
||||
Alter the request before it's sent to the transport.
|
||||
|
||||
Parameters: `string &$url`, `array &$headers`, `array|string &$data`,
|
||||
`string &$type`, `array &$options`
|
||||
|
||||
* `requests.before_parse`
|
||||
|
||||
Alter the raw HTTP response before parsing
|
||||
|
||||
Parameters: `string &$response`
|
||||
|
||||
* `requests.after_request`
|
||||
|
||||
Alter the response object before it's returned to the user
|
||||
|
||||
Parameters: `Requests_Response &$return`
|
||||
|
||||
* `curl.before_request`
|
||||
|
||||
Set cURL options before the transport sets any (note that Requests may
|
||||
override these)
|
||||
|
||||
Parameters: `cURL resource &$fp`
|
||||
|
||||
* `curl.before_send`
|
||||
|
||||
Set cURL options just before the request is actually sent via `curl_exec`
|
||||
|
||||
Parameters: `cURL resource &$fp`
|
||||
|
||||
* `curl.after_request`
|
||||
|
||||
Alter the raw HTTP response before returning for parsing
|
||||
|
||||
Parameters: `string &$response, array &$info`
|
||||
|
||||
`$info` contains the associated array as defined in [curl-getinfo-returnvalues](http://php.net/manual/en/function.curl-getinfo.php#refsect1-function.curl-getinfo-returnvalues)
|
||||
|
||||
* `fsockopen.before_request`
|
||||
|
||||
Run events before the transport does anything
|
||||
|
||||
* `fsockopen.after_headers`
|
||||
|
||||
Add extra headers before the body begins (i.e. before `\r\n\r\n`)
|
||||
|
||||
Parameters: `string &$out`
|
||||
|
||||
* `fsockopen.before_send`
|
||||
|
||||
Add body data before sending the request
|
||||
|
||||
Parameters: `string &$out`
|
||||
|
||||
* `fsockopen.after_send`
|
||||
|
||||
Run events after writing the data to the socket
|
||||
|
||||
* `fsockopen.after_request`
|
||||
|
||||
Alter the raw HTTP response before returning for parsing
|
||||
|
||||
Parameters: `string &$response, array &$info`
|
||||
|
||||
`$info` contains the associated array as defined in [stream-get-meta-data-returnvalues](http://php.net/manual/en/function.stream-get-meta-data.php#refsect1-function.stream-get-meta-data-returnvalues)
|
||||
|
||||
|
||||
Registering Hooks
|
||||
-----------------
|
||||
Note: if you're doing this in an authentication handler, see the [Custom
|
||||
Authentication guide][authentication-custom] instead.
|
||||
|
||||
[authentication-custom]: authentication-custom.md
|
||||
|
||||
In order to register your own hooks, you need to instantiate `Requests_hooks`
|
||||
and pass this in via the 'hooks' option.
|
||||
|
||||
```php
|
||||
$hooks = new Requests_Hooks();
|
||||
$hooks->register('requests.after_request', 'mycallback');
|
||||
|
||||
$request = Requests::get('http://httpbin.org/get', array(), array('hooks' => $hooks));
|
||||
```
|
||||
23
application/vendor/rmccue/requests/docs/proxy.md
vendored
23
application/vendor/rmccue/requests/docs/proxy.md
vendored
@@ -1,23 +0,0 @@
|
||||
Proxy Support
|
||||
=============
|
||||
|
||||
You can easily make requests through HTTP proxies.
|
||||
|
||||
To make requests through an open proxy, specify the following options:
|
||||
|
||||
```php
|
||||
$options = array(
|
||||
'proxy' => '127.0.0.1:3128'
|
||||
);
|
||||
Requests::get('http://httpbin.org/ip', array(), $options);
|
||||
```
|
||||
|
||||
If your proxy needs you to authenticate, the option will become an array like
|
||||
the following:
|
||||
|
||||
```php
|
||||
$options = array(
|
||||
'proxy' => array( '127.0.0.1:3128', 'my_username', 'my_password' )
|
||||
);
|
||||
Requests::get('http://httpbin.org/ip', array(), $options);
|
||||
```
|
||||
@@ -1,74 +0,0 @@
|
||||
Advanced Usage
|
||||
==============
|
||||
|
||||
Session Handling
|
||||
----------------
|
||||
Making multiple requests to the same site with similar options can be a pain,
|
||||
since you end up repeating yourself. The Session object can be used to set
|
||||
default parameters for these.
|
||||
|
||||
Let's simulate communicating with GitHub.
|
||||
|
||||
```php
|
||||
$session = new Requests_Session('https://api.github.com/');
|
||||
$session->headers['X-ContactAuthor'] = 'rmccue';
|
||||
$session->useragent = 'My-Awesome-App';
|
||||
|
||||
$response = $session->get('/zen');
|
||||
```
|
||||
|
||||
You can use the `url`, `headers`, `data` and `options` properties of the Session
|
||||
object to set the defaults for this session, and the constructor also takes
|
||||
parameters in the same order as `Requests::request()`. Accessing any other
|
||||
properties will set the corresponding key in the options array; that is:
|
||||
|
||||
```php
|
||||
// Setting the property...
|
||||
$session->useragent = 'My-Awesome-App';
|
||||
|
||||
// ...is the same as setting the option
|
||||
$session->options['useragent'] = 'My-Awesome-App';
|
||||
```
|
||||
|
||||
|
||||
Secure Requests with SSL
|
||||
------------------------
|
||||
By default, HTTPS requests will use the most secure options available:
|
||||
|
||||
```php
|
||||
$response = Requests::get('https://httpbin.org/');
|
||||
```
|
||||
|
||||
Requests bundles certificates from the [Mozilla certificate authority list][],
|
||||
which is the same list of root certificates used in most browsers. If you're
|
||||
accessing sites with certificates from other CAs, or self-signed certificates,
|
||||
you can point Requests to a custom CA list in PEM form (the same format
|
||||
accepted by cURL and OpenSSL):
|
||||
|
||||
```php
|
||||
$options = array(
|
||||
'verify' => '/path/to/cacert.pem'
|
||||
);
|
||||
$response = Requests::get('https://httpbin.org/', array(), $options);
|
||||
```
|
||||
|
||||
Alternatively, if you want to disable verification completely, this is possible
|
||||
with `'verify' => false`, but note that this is extremely insecure and should be
|
||||
avoided.
|
||||
|
||||
### Security Note
|
||||
Requests supports SSL across both cURL and fsockopen in a transparent manner.
|
||||
Unlike other PHP HTTP libraries, support for verifying the certificate name is
|
||||
built-in; that is, a request for `https://github.com/` will actually verify the
|
||||
certificate's name even with the fsockopen transport. This makes Requests the
|
||||
first and currently only PHP HTTP library that supports full SSL verification.
|
||||
|
||||
(Note that WordPress now also supports this verification, thanks to efforts by
|
||||
the Requests development team.)
|
||||
|
||||
(See also the [related PHP][php-bug-47030] and [OpenSSL-related][php-bug-55820]
|
||||
bugs in PHP for more information on Subject Alternate Name field.)
|
||||
|
||||
[Mozilla certificate authority list]: http://www.mozilla.org/projects/security/certs/
|
||||
[php-bug-47030]: https://bugs.php.net/bug.php?id=47030
|
||||
[php-bug-55820]:https://bugs.php.net/bug.php?id=55820
|
||||
154
application/vendor/rmccue/requests/docs/usage.md
vendored
154
application/vendor/rmccue/requests/docs/usage.md
vendored
@@ -1,154 +0,0 @@
|
||||
Usage
|
||||
=====
|
||||
|
||||
Ready to go? Make sure you have Requests installed before attempting any of the
|
||||
steps in this guide.
|
||||
|
||||
|
||||
Loading Requests
|
||||
----------------
|
||||
Before we can load Requests up, we'll need to make sure it's loaded. This is a
|
||||
simple two-step:
|
||||
|
||||
```php
|
||||
// First, include Requests
|
||||
include('/path/to/library/Requests.php');
|
||||
|
||||
// Next, make sure Requests can load internal classes
|
||||
Requests::register_autoloader();
|
||||
```
|
||||
|
||||
If you'd like to bring along your own autoloader, you can forget about this
|
||||
completely.
|
||||
|
||||
|
||||
Make a GET Request
|
||||
------------------
|
||||
One of the most basic things you can do with HTTP is make a GET request.
|
||||
|
||||
Let's grab GitHub's public timeline:
|
||||
|
||||
```php
|
||||
$response = Requests::get('https://github.com/timeline.json');
|
||||
```
|
||||
|
||||
`$response` is now a **Requests_Response** object. Response objects are what
|
||||
you'll be working with whenever you want to get data back from your request.
|
||||
|
||||
|
||||
Using the Response Object
|
||||
-------------------------
|
||||
Now that we have the response from GitHub, let's get the body of the response.
|
||||
|
||||
```php
|
||||
var_dump($response->body);
|
||||
// string(42865) "[{"repository":{"url":"...
|
||||
```
|
||||
|
||||
|
||||
Custom Headers
|
||||
--------------
|
||||
If you want to add custom headers to the request, simply pass them in as an
|
||||
associative array as the second parameter:
|
||||
|
||||
```php
|
||||
$response = Requests::get('https://github.com/timeline.json', array('X-Requests' => 'Is Awesome!'));
|
||||
```
|
||||
|
||||
|
||||
Make a POST Request
|
||||
-------------------
|
||||
Making a POST request is very similar to making a GET:
|
||||
|
||||
```php
|
||||
$response = Requests::post('http://httpbin.org/post');
|
||||
```
|
||||
|
||||
You'll probably also want to pass in some data. You can pass in either a
|
||||
string, an array or an object (Requests uses [`http_build_query`][build_query]
|
||||
internally) as the third parameter (after the URL and headers):
|
||||
|
||||
[build_query]: http://php.net/http_build_query
|
||||
|
||||
```php
|
||||
$data = array('key1' => 'value1', 'key2' => 'value2');
|
||||
$response = Requests::post('http://httpbin.org/post', array(), $data);
|
||||
var_dump($response->body);
|
||||
```
|
||||
|
||||
This gives the output:
|
||||
|
||||
string(503) "{
|
||||
"origin": "124.191.162.147",
|
||||
"files": {},
|
||||
"form": {
|
||||
"key2": "value2",
|
||||
"key1": "value1"
|
||||
},
|
||||
"headers": {
|
||||
"Content-Length": "23",
|
||||
"Accept-Encoding": "deflate;q=1.0, compress;q=0.5, gzip;q=0.5",
|
||||
"X-Forwarded-Port": "80",
|
||||
"Connection": "keep-alive",
|
||||
"User-Agent": "php-requests/1.6-dev",
|
||||
"Host": "httpbin.org",
|
||||
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
|
||||
},
|
||||
"url": "http://httpbin.org/post",
|
||||
"args": {},
|
||||
"data": ""
|
||||
}"
|
||||
|
||||
To send raw data, simply pass in a string instead. You'll probably also want to
|
||||
set the Content-Type header to ensure the remote server knows what you're
|
||||
sending it:
|
||||
|
||||
```php
|
||||
$url = 'https://api.github.com/some/endpoint';
|
||||
$headers = array('Content-Type' => 'application/json');
|
||||
$data = array('some' => 'data');
|
||||
$response = Requests::post($url, $headers, json_encode($data));
|
||||
```
|
||||
|
||||
Note that if you don't manually specify a Content-Type header, Requests has
|
||||
undefined behaviour for the header. It may be set to various values depending
|
||||
on the internal execution path, so it's recommended to set this explicitly if
|
||||
you need to.
|
||||
|
||||
|
||||
Status Codes
|
||||
------------
|
||||
The Response object also gives you access to the status code:
|
||||
|
||||
```php
|
||||
var_dump($response->status_code);
|
||||
// int(200)
|
||||
```
|
||||
|
||||
You can also easily check if this status code is a success code, or if it's an
|
||||
error:
|
||||
|
||||
```php
|
||||
var_dump($response->success);
|
||||
// bool(true)
|
||||
```
|
||||
|
||||
|
||||
Response Headers
|
||||
----------------
|
||||
We can also grab headers pretty easily:
|
||||
|
||||
```php
|
||||
var_dump($response->headers['Date']);
|
||||
// string(29) "Thu, 09 Feb 2012 15:22:06 GMT"
|
||||
```
|
||||
|
||||
Note that this is case-insensitive, so the following are all equivalent:
|
||||
|
||||
* `$response->headers['Date']`
|
||||
* `$response->headers['date']`
|
||||
* `$response->headers['DATE']`
|
||||
* `$response->headers['dAtE']`
|
||||
|
||||
If a header isn't set, this will give `null`. You can also check with
|
||||
`isset($response->headers['date'])`
|
||||
@@ -1,192 +0,0 @@
|
||||
Why Requests Instead of X?
|
||||
==========================
|
||||
This is a quick look at why you should use Requests instead of another
|
||||
solution. Keep in mind though that these are my point of view, and they may not
|
||||
be issues for you.
|
||||
|
||||
As always with software, you should choose what you think is best.
|
||||
|
||||
|
||||
Why should I use Requests?
|
||||
--------------------------
|
||||
1. **Designed for maximum compatibility**
|
||||
|
||||
The realities of working with widely deployable software mean that awesome
|
||||
PHP features aren't always available. PHP 5.3, cURL, OpenSSL and more are not
|
||||
necessarily going to be available on every system. While you're welcome to
|
||||
require PHP 5.3, 5.4 or even 5.5, it's not our job to force you to use those.
|
||||
|
||||
(The WordPress project estimates [about 60%][wpstats] of hosts are running
|
||||
PHP 5.2, so this is a serious issue for developers working on large
|
||||
deployable projects.)
|
||||
|
||||
Don't worry though, Requests will automatically use better features where
|
||||
possible, giving you an extra speed boost with cURL.
|
||||
|
||||
2. **Simple API**
|
||||
|
||||
Requests' API is designed to be able to be learnt in 10 minutes. Everything
|
||||
from basic requests all the way up to advanced usage involving custom SSL
|
||||
certificates and stored cookies is handled by a simple API.
|
||||
|
||||
Other HTTP libraries optimize for the library developer's time; **Requests
|
||||
optimizes for your time**.
|
||||
|
||||
3. **Thoroughly tested**
|
||||
|
||||
Requests is [continuously integrated with Travis][travis] and test coverage
|
||||
is [constantly monitored with Coveralls][coveralls] to give you confidence in
|
||||
the library. We aim for test coverage **over 90%** at all times, and new
|
||||
features require new tests to go along with them. This ensures that you can
|
||||
be confident in the quality of the code, as well as being able to update to
|
||||
the latest version of Requests without worrying about compatibility.
|
||||
|
||||
4. **Secure by default**
|
||||
|
||||
Unlike other HTTP libraries, Requests is secure by default. Requests is the
|
||||
**first and currently only** standalone HTTP library to
|
||||
**[fully verify][requests_ssl] all HTTPS requests** even without cURL. We
|
||||
also bundle the latest root certificate authorities to ensure that your
|
||||
secure requests are actually secure.
|
||||
|
||||
(Of note is that WordPress as of version 3.7 also supports full checking of
|
||||
the certificates, thanks to [evangelism efforts on our behalf][wpssl].
|
||||
Together, we are the only HTTP libraries in PHP to fully verify certificates
|
||||
to the same level as browsers.)
|
||||
|
||||
5. **Extensible from the core**
|
||||
|
||||
If you need low-level access to Requests' internals, simply plug your
|
||||
callbacks in via the built-in [hooking system][] and mess around as much as
|
||||
you want. Requests' simple hooking system is so powerful that both
|
||||
authentication handlers and cookie support is actually handled internally
|
||||
with hooks.
|
||||
|
||||
[coveralls]: https://coveralls.io/r/rmccue/Requests
|
||||
[hooking system]: hooks.md
|
||||
[requests_ssl]: https://github.com/rmccue/Requests/blob/master/library/Requests/SSL.php
|
||||
[travis]: https://travis-ci.org/rmccue/Requests
|
||||
[wpssl]: http://core.trac.wordpress.org/ticket/25007
|
||||
|
||||
|
||||
Why shouldn't I use...
|
||||
----------------------
|
||||
Requests isn't the first or only HTTP library in PHP and it's important to
|
||||
acknowledge the other solutions out there. Here's why you should use Requests
|
||||
instead of something else, in our opinion.
|
||||
|
||||
|
||||
### cURL
|
||||
|
||||
1. **Not every host has cURL installed**
|
||||
|
||||
cURL is far from being ubiquitous, so you can't rely on it always being
|
||||
available when distributing software. Anecdotal data collected from various
|
||||
projects indicates that cURL is available on roughly 90% of hosts, but that
|
||||
leaves 10% of hosts without it.
|
||||
|
||||
2. **cURL's interface sucks**
|
||||
|
||||
cURL's interface was designed for PHP 4, and hence uses resources with
|
||||
horrible functions such as `curl_setopt()`. Combined with that, it uses 229
|
||||
global constants, polluting the global namespace horribly.
|
||||
|
||||
Requests, on the other hand, exposes only a handful of classes to the
|
||||
global namespace, most of which are for internal use. You can learn to use
|
||||
the `Requests::request()` method and the `Requests_Response` object in the
|
||||
space of 10 minutes and you already know how to use Requests.
|
||||
|
||||
|
||||
### Guzzle
|
||||
|
||||
1. **Requires cURL and PHP 5.3+**
|
||||
|
||||
Guzzle is designed to be a client to fit a large number of installations, but
|
||||
as a result of optimizing for Guzzle developer time, it uses cURL as an
|
||||
underlying transport. As noted above, this is a majority of systems, but
|
||||
far from all.
|
||||
|
||||
The same is true for PHP 5.3+. While we'd all love to rely on PHP's newer
|
||||
features, the fact is that a huge percentage of hosts are still running on
|
||||
PHP 5.2. (The WordPress project estimates [about 60%][wpstats] of hosts are
|
||||
running PHP 5.2.)
|
||||
|
||||
2. **Not just a HTTP client**
|
||||
|
||||
Guzzle is not intended to just be a HTTP client, but rather to be a
|
||||
full-featured REST client. Requests is just a HTTP client, intentionally. Our
|
||||
development strategy is to act as a low-level library that REST clients can
|
||||
easily be built on, not to provide the whole kitchen sink for you.
|
||||
|
||||
If you want to rapidly develop a web service client using a framework, Guzzle
|
||||
will suit you perfectly. On the other hand, if you want a HTTP client without
|
||||
all the rest, Requests is the way to go.
|
||||
|
||||
[wpstats]: http://wordpress.org/about/stats/
|
||||
|
||||
|
||||
### Buzz
|
||||
|
||||
1. **Requires PHP 5.3+**
|
||||
|
||||
As with Guzzle, while PHP 5.3+ is awesome, you can't always rely on it being
|
||||
on a host. With widely distributable software, this is a huge problem.
|
||||
|
||||
2. **Not transport-transparent**
|
||||
|
||||
For making certain types of requests, such as multi-requests, you can't rely
|
||||
on a high-level abstraction and instead have to use the low-level transports.
|
||||
This really gains nothing (other than a fancy interface) over just using the
|
||||
methods directly and means that you can't rely on features to be available.
|
||||
|
||||
|
||||
### fsockopen
|
||||
|
||||
1. **Very low-level**
|
||||
|
||||
fsockopen is used for working with sockets directly, so it only knows about
|
||||
the transport layer (TCP in our case), not anything higher (i.e. HTTP on the
|
||||
application layer). To be able to use fsockopen as a HTTP client, you need
|
||||
to write all the HTTP code yourself, and once you're done, you'll end up
|
||||
with something that is almost exactly like Requests.
|
||||
|
||||
|
||||
### PEAR HTTP_Request2
|
||||
|
||||
1. **Requires PEAR**
|
||||
|
||||
PEAR is (in theory) a great distribution system (with a less than wonderful
|
||||
implementation), however it is not ubiquitous, as many hosts disable it to
|
||||
save on space that most people aren't going to use anyway.
|
||||
|
||||
PEAR is also a pain for users. Users want to be able to download a zip of
|
||||
your project without needing to install anything else from PEAR.
|
||||
|
||||
(If you really want though, Requests is available via PEAR. Check the README
|
||||
to see how to grab it.)
|
||||
|
||||
2. **Depends on other PEAR utilities**
|
||||
|
||||
HTTP\_Request2 requires Net_URL2 in order to function, locking you in to
|
||||
using PEAR for your project.
|
||||
|
||||
Requests is entirely self-contained, and includes all the libraries it needs
|
||||
(for example, Requests\_IRI is based on ComplexPie\_IRI by Geoffrey Sneddon).
|
||||
|
||||
|
||||
### PECL HttpRequest
|
||||
|
||||
1. **Requires a PECL extension**
|
||||
|
||||
Similar to PEAR, users aren't big fans of installing extra libraries. Unlike
|
||||
PEAR though, PECL extensions require compiling, which end users will be
|
||||
unfamiliar with. In addition, on systems where users do not have full
|
||||
control over PHP, they will be unable to install custom extensions.
|
||||
|
||||
|
||||
### Zend Framework's Zend\_Http\_Client
|
||||
|
||||
1. **Requires other parts of the Zend Framework**
|
||||
|
||||
Similar to HTTP_Request2, Zend's client is not fully self-contained and
|
||||
requires other components from the framework.
|
||||
@@ -1,16 +0,0 @@
|
||||
<?php
|
||||
|
||||
// First, include Requests
|
||||
include('../library/Requests.php');
|
||||
|
||||
// Next, make sure Requests can load internal classes
|
||||
Requests::register_autoloader();
|
||||
|
||||
// Now let's make a request!
|
||||
$options = array(
|
||||
'auth' => array('someuser', 'password')
|
||||
);
|
||||
$request = Requests::get('http://httpbin.org/basic-auth/someuser/password', array(), $options);
|
||||
|
||||
// Check what we received
|
||||
var_dump($request);
|
||||
@@ -1,16 +0,0 @@
|
||||
<?php
|
||||
|
||||
// First, include Requests
|
||||
include('../library/Requests.php');
|
||||
|
||||
// Next, make sure Requests can load internal classes
|
||||
Requests::register_autoloader();
|
||||
|
||||
// Say you need to fake a login cookie
|
||||
$c = new Requests_Cookie('login_uid', 'something');
|
||||
|
||||
// Now let's make a request!
|
||||
$request = Requests::get('http://httpbin.org/cookies', array('Cookie' => $c->formatForHeader()));
|
||||
|
||||
// Check what we received
|
||||
var_dump($request);
|
||||
@@ -1,20 +0,0 @@
|
||||
<?php
|
||||
|
||||
// First, include Requests
|
||||
include('../library/Requests.php');
|
||||
|
||||
// Next, make sure Requests can load internal classes
|
||||
Requests::register_autoloader();
|
||||
|
||||
// Say you need to fake a login cookie
|
||||
$c = new Requests_Cookie_Jar(['login_uid' => 'something']);
|
||||
|
||||
// Now let's make a request!
|
||||
$request = Requests::get(
|
||||
'http://httpbin.org/cookies', // Url
|
||||
[], // No need to set the headers the Jar does this for us
|
||||
['cookies' => $c] // Pass in the Jar as an option
|
||||
);
|
||||
|
||||
// Check what we received
|
||||
var_dump($request);
|
||||
@@ -1,13 +0,0 @@
|
||||
<?php
|
||||
|
||||
// First, include Requests
|
||||
include('../library/Requests.php');
|
||||
|
||||
// Next, make sure Requests can load internal classes
|
||||
Requests::register_autoloader();
|
||||
|
||||
// Now let's make a request!
|
||||
$request = Requests::get('http://httpbin.org/get', array('Accept' => 'application/json'));
|
||||
|
||||
// Check what we received
|
||||
var_dump($request);
|
||||
@@ -1,45 +0,0 @@
|
||||
<?php
|
||||
|
||||
// First, include Requests
|
||||
include('../library/Requests.php');
|
||||
|
||||
// Next, make sure Requests can load internal classes
|
||||
Requests::register_autoloader();
|
||||
|
||||
// Setup what we want to request
|
||||
$requests = array(
|
||||
array(
|
||||
'url' => 'http://httpbin.org/get',
|
||||
'headers' => array('Accept' => 'application/javascript'),
|
||||
),
|
||||
'post' => array(
|
||||
'url' => 'http://httpbin.org/post',
|
||||
'data' => array('mydata' => 'something'),
|
||||
),
|
||||
'delayed' => array(
|
||||
'url' => 'http://httpbin.org/delay/10',
|
||||
'options' => array(
|
||||
'timeout' => 20,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// Setup a callback
|
||||
function my_callback(&$request, $id) {
|
||||
var_dump($id, $request);
|
||||
}
|
||||
|
||||
// Tell Requests to use the callback
|
||||
$options = array(
|
||||
'complete' => 'my_callback',
|
||||
);
|
||||
|
||||
// Send the request!
|
||||
$responses = Requests::request_multiple($requests, $options);
|
||||
|
||||
// Note: the response from the above call will be an associative array matching
|
||||
// $requests with the response data, however we've already handled it in
|
||||
// my_callback() anyway!
|
||||
//
|
||||
// If you don't believe me, uncomment this:
|
||||
# var_dump($responses);
|
||||
@@ -1,13 +0,0 @@
|
||||
<?php
|
||||
|
||||
// First, include Requests
|
||||
include('../library/Requests.php');
|
||||
|
||||
// Next, make sure Requests can load internal classes
|
||||
Requests::register_autoloader();
|
||||
|
||||
// Now let's make a request!
|
||||
$request = Requests::post('http://httpbin.org/post', array(), array('mydata' => 'something'));
|
||||
|
||||
// Check what we received
|
||||
var_dump($request);
|
||||
@@ -1,18 +0,0 @@
|
||||
<?php
|
||||
|
||||
// First, include Requests
|
||||
include('../library/Requests.php');
|
||||
|
||||
// Next, make sure Requests can load internal classes
|
||||
Requests::register_autoloader();
|
||||
|
||||
// Now let's make a request via a proxy.
|
||||
$options = array(
|
||||
'proxy' => '127.0.0.1:8080', // syntax: host:port, eg 12.13.14.14:8080 or someproxy.com:3128
|
||||
// If you need to authenticate, use the following syntax:
|
||||
// 'proxy' => array( '127.0.0.1:8080', 'username', 'password' ),
|
||||
);
|
||||
$request = Requests::get('http://httpbin.org/ip', array(), $options );
|
||||
|
||||
// See result
|
||||
var_dump($request->body);
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
|
||||
// First, include Requests
|
||||
include('../library/Requests.php');
|
||||
|
||||
// Next, make sure Requests can load internal classes
|
||||
Requests::register_autoloader();
|
||||
|
||||
// Set up our session
|
||||
$session = new Requests_Session('http://httpbin.org/');
|
||||
$session->headers['Accept'] = 'application/json';
|
||||
$session->useragent = 'Awesomesauce';
|
||||
|
||||
// Now let's make a request!
|
||||
$request = $session->get('/get');
|
||||
|
||||
// Check what we received
|
||||
var_dump($request);
|
||||
|
||||
// Let's check our user agent!
|
||||
$request = $session->get('/user-agent');
|
||||
|
||||
// And check again
|
||||
var_dump($request);
|
||||
@@ -1,17 +0,0 @@
|
||||
<?php
|
||||
|
||||
// First, include Requests
|
||||
include('../library/Requests.php');
|
||||
|
||||
// Next, make sure Requests can load internal classes
|
||||
Requests::register_autoloader();
|
||||
|
||||
// Define a timeout of 2.5 seconds
|
||||
$options = array(
|
||||
'timeout' => 2.5,
|
||||
);
|
||||
|
||||
// Now let's make a request to a page that will delay its response by 3 seconds
|
||||
$request = Requests::get('http://httpbin.org/delay/3', array(), $options);
|
||||
|
||||
// An exception will be thrown, stating a timeout of the request !
|
||||
@@ -143,7 +143,7 @@ class Requests {
|
||||
|
||||
$file = str_replace('_', '/', $class);
|
||||
if (file_exists(dirname(__FILE__) . '/' . $file . '.php')) {
|
||||
require_once(dirname(__FILE__) . '/' . $file . '.php');
|
||||
require_once dirname(__FILE__) . '/' . $file . '.php';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,7 +187,8 @@ class Requests {
|
||||
|
||||
// Don't search for a transport if it's already been done for these $capabilities
|
||||
if (isset(self::$transport[$cap_string]) && self::$transport[$cap_string] !== null) {
|
||||
return new self::$transport[$cap_string]();
|
||||
$class = self::$transport[$cap_string];
|
||||
return new $class();
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
@@ -214,7 +215,8 @@ class Requests {
|
||||
throw new Requests_Exception('No working transports found', 'notransport', self::$transports);
|
||||
}
|
||||
|
||||
return new self::$transport[$cap_string]();
|
||||
$class = self::$transport[$cap_string];
|
||||
return new $class();
|
||||
}
|
||||
|
||||
/**#@+
|
||||
@@ -340,7 +342,7 @@ class Requests {
|
||||
* across transports.)
|
||||
* (string|boolean, default: library/Requests/Transport/cacert.pem)
|
||||
* - `verifyname`: Should we verify the common name in the SSL certificate?
|
||||
* (boolean: default, true)
|
||||
* (boolean, default: true)
|
||||
* - `data_format`: How should we send the `$data` parameter?
|
||||
* (string, one of 'query' or 'body', default: 'query' for
|
||||
* HEAD/GET/DELETE, 'body' for POST/PUT/OPTIONS/PATCH)
|
||||
@@ -372,9 +374,9 @@ class Requests {
|
||||
}
|
||||
}
|
||||
else {
|
||||
$need_ssl = (0 === stripos($url, 'https://'));
|
||||
$need_ssl = (stripos($url, 'https://') === 0);
|
||||
$capabilities = array('ssl' => $need_ssl);
|
||||
$transport = self::get_transport($capabilities);
|
||||
$transport = self::get_transport($capabilities);
|
||||
}
|
||||
$response = $transport->request($url, $headers, $data, $options);
|
||||
|
||||
@@ -445,7 +447,7 @@ class Requests {
|
||||
$request['type'] = self::GET;
|
||||
}
|
||||
if (!isset($request['options'])) {
|
||||
$request['options'] = $options;
|
||||
$request['options'] = $options;
|
||||
$request['options']['type'] = $request['type'];
|
||||
}
|
||||
else {
|
||||
@@ -501,25 +503,25 @@ class Requests {
|
||||
*/
|
||||
protected static function get_default_options($multirequest = false) {
|
||||
$defaults = array(
|
||||
'timeout' => 10,
|
||||
'connect_timeout' => 10,
|
||||
'useragent' => 'php-requests/' . self::VERSION,
|
||||
'timeout' => 10,
|
||||
'connect_timeout' => 10,
|
||||
'useragent' => 'php-requests/' . self::VERSION,
|
||||
'protocol_version' => 1.1,
|
||||
'redirected' => 0,
|
||||
'redirects' => 10,
|
||||
'redirected' => 0,
|
||||
'redirects' => 10,
|
||||
'follow_redirects' => true,
|
||||
'blocking' => true,
|
||||
'type' => self::GET,
|
||||
'filename' => false,
|
||||
'auth' => false,
|
||||
'proxy' => false,
|
||||
'cookies' => false,
|
||||
'max_bytes' => false,
|
||||
'idn' => true,
|
||||
'hooks' => null,
|
||||
'transport' => null,
|
||||
'verify' => Requests::get_certificate_path(),
|
||||
'verifyname' => true,
|
||||
'blocking' => true,
|
||||
'type' => self::GET,
|
||||
'filename' => false,
|
||||
'auth' => false,
|
||||
'proxy' => false,
|
||||
'cookies' => false,
|
||||
'max_bytes' => false,
|
||||
'idn' => true,
|
||||
'hooks' => null,
|
||||
'transport' => null,
|
||||
'verify' => self::get_certificate_path(),
|
||||
'verifyname' => true,
|
||||
);
|
||||
if ($multirequest !== false) {
|
||||
$defaults['complete'] = null;
|
||||
@@ -533,8 +535,8 @@ class Requests {
|
||||
* @return string Default certificate path.
|
||||
*/
|
||||
public static function get_certificate_path() {
|
||||
if ( ! empty( Requests::$certificate_path ) ) {
|
||||
return Requests::$certificate_path;
|
||||
if (!empty(self::$certificate_path)) {
|
||||
return self::$certificate_path;
|
||||
}
|
||||
|
||||
return dirname(__FILE__) . '/Requests/Transport/cacert.pem';
|
||||
@@ -545,8 +547,8 @@ class Requests {
|
||||
*
|
||||
* @param string $path Certificate path, pointing to a PEM file.
|
||||
*/
|
||||
public static function set_certificate_path( $path ) {
|
||||
Requests::$certificate_path = $path;
|
||||
public static function set_certificate_path($path) {
|
||||
self::$certificate_path = $path;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -593,16 +595,16 @@ class Requests {
|
||||
}
|
||||
|
||||
if ($options['idn'] !== false) {
|
||||
$iri = new Requests_IRI($url);
|
||||
$iri = new Requests_IRI($url);
|
||||
$iri->host = Requests_IDNAEncoder::encode($iri->ihost);
|
||||
$url = $iri->uri;
|
||||
$url = $iri->uri;
|
||||
}
|
||||
|
||||
// Massage the type to ensure we support it.
|
||||
$type = strtoupper($type);
|
||||
|
||||
if (!isset($options['data_format'])) {
|
||||
if (in_array($type, array(self::HEAD, self::GET, self::DELETE))) {
|
||||
if (in_array($type, array(self::HEAD, self::GET, self::DELETE), true)) {
|
||||
$options['data_format'] = 'query';
|
||||
}
|
||||
else {
|
||||
@@ -631,20 +633,23 @@ class Requests {
|
||||
return $return;
|
||||
}
|
||||
|
||||
$return->raw = $headers;
|
||||
$return->url = $url;
|
||||
$return->raw = $headers;
|
||||
$return->url = (string) $url;
|
||||
$return->body = '';
|
||||
|
||||
if (!$options['filename']) {
|
||||
if (($pos = strpos($headers, "\r\n\r\n")) === false) {
|
||||
$pos = strpos($headers, "\r\n\r\n");
|
||||
if ($pos === false) {
|
||||
// Crap!
|
||||
throw new Requests_Exception('Missing header/body separator', 'requests.no_crlf_separator');
|
||||
}
|
||||
|
||||
$headers = substr($return->raw, 0, $pos);
|
||||
$return->body = substr($return->raw, $pos + strlen("\n\r\n\r"));
|
||||
}
|
||||
else {
|
||||
$return->body = '';
|
||||
// Headers will always be separated from the body by two new lines - `\n\r\n\r`.
|
||||
$body = substr($return->raw, $pos + 4);
|
||||
if (!empty($body)) {
|
||||
$return->body = $body;
|
||||
}
|
||||
}
|
||||
// Pretend CRLF = LF for compatibility (RFC 2616, section 19.3)
|
||||
$headers = str_replace("\r\n", "\n", $headers);
|
||||
@@ -656,14 +661,14 @@ class Requests {
|
||||
throw new Requests_Exception('Response could not be parsed', 'noversion', $headers);
|
||||
}
|
||||
$return->protocol_version = (float) $matches[1];
|
||||
$return->status_code = (int) $matches[2];
|
||||
$return->status_code = (int) $matches[2];
|
||||
if ($return->status_code >= 200 && $return->status_code < 300) {
|
||||
$return->success = true;
|
||||
}
|
||||
|
||||
foreach ($headers as $header) {
|
||||
list($key, $value) = explode(':', $header, 2);
|
||||
$value = trim($value);
|
||||
$value = trim($value);
|
||||
preg_replace('#(\s+)#i', ' ', $value);
|
||||
$return->headers[$key] = $value;
|
||||
}
|
||||
@@ -700,10 +705,10 @@ class Requests {
|
||||
&$req_headers,
|
||||
&$req_data,
|
||||
&$options,
|
||||
$return
|
||||
$return,
|
||||
);
|
||||
$options['hooks']->dispatch('requests.before_redirect', $hook_args);
|
||||
$redirected = self::request($location, $req_headers, $req_data, $options['type'], $options);
|
||||
$redirected = self::request($location, $req_headers, $req_data, $options['type'], $options);
|
||||
$redirected->history[] = $return;
|
||||
return $redirected;
|
||||
}
|
||||
@@ -730,10 +735,10 @@ class Requests {
|
||||
*/
|
||||
public static function parse_multiple(&$response, $request) {
|
||||
try {
|
||||
$url = $request['url'];
|
||||
$headers = $request['headers'];
|
||||
$data = $request['data'];
|
||||
$options = $request['options'];
|
||||
$url = $request['url'];
|
||||
$headers = $request['headers'];
|
||||
$data = $request['data'];
|
||||
$options = $request['options'];
|
||||
$response = self::parse_response($response, $url, $headers, $data, $options);
|
||||
}
|
||||
catch (Requests_Exception $e) {
|
||||
@@ -753,8 +758,6 @@ class Requests {
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
$decoded = '';
|
||||
$encoded = $data;
|
||||
|
||||
@@ -772,8 +775,8 @@ class Requests {
|
||||
}
|
||||
|
||||
$chunk_length = strlen($matches[0]);
|
||||
$decoded .= substr($encoded, $chunk_length, $length);
|
||||
$encoded = substr($encoded, $chunk_length + $length + 2);
|
||||
$decoded .= substr($encoded, $chunk_length, $length);
|
||||
$encoded = substr($encoded, $chunk_length + $length + 2);
|
||||
|
||||
if (trim($encoded) === '0' || empty($encoded)) {
|
||||
return $decoded;
|
||||
@@ -826,17 +829,31 @@ class Requests {
|
||||
return $data;
|
||||
}
|
||||
|
||||
if (function_exists('gzdecode') && ($decoded = @gzdecode($data)) !== false) {
|
||||
if (function_exists('gzdecode')) {
|
||||
// phpcs:ignore PHPCompatibility.FunctionUse.NewFunctions.gzdecodeFound -- Wrapped in function_exists() for PHP 5.2.
|
||||
$decoded = @gzdecode($data);
|
||||
if ($decoded !== false) {
|
||||
return $decoded;
|
||||
}
|
||||
}
|
||||
|
||||
if (function_exists('gzinflate')) {
|
||||
$decoded = @gzinflate($data);
|
||||
if ($decoded !== false) {
|
||||
return $decoded;
|
||||
}
|
||||
}
|
||||
|
||||
$decoded = self::compatible_gzinflate($data);
|
||||
if ($decoded !== false) {
|
||||
return $decoded;
|
||||
}
|
||||
elseif (function_exists('gzinflate') && ($decoded = @gzinflate($data)) !== false) {
|
||||
return $decoded;
|
||||
}
|
||||
elseif (($decoded = self::compatible_gzinflate($data)) !== false) {
|
||||
return $decoded;
|
||||
}
|
||||
elseif (function_exists('gzuncompress') && ($decoded = @gzuncompress($data)) !== false) {
|
||||
return $decoded;
|
||||
|
||||
if (function_exists('gzuncompress')) {
|
||||
$decoded = @gzuncompress($data);
|
||||
if ($decoded !== false) {
|
||||
return $decoded;
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
@@ -859,32 +876,32 @@ class Requests {
|
||||
* @link https://secure.php.net/manual/en/function.gzinflate.php#70875
|
||||
* @link https://secure.php.net/manual/en/function.gzinflate.php#77336
|
||||
*
|
||||
* @param string $gzData String to decompress.
|
||||
* @param string $gz_data String to decompress.
|
||||
* @return string|bool False on failure.
|
||||
*/
|
||||
public static function compatible_gzinflate($gzData) {
|
||||
public static function compatible_gzinflate($gz_data) {
|
||||
// Compressed data might contain a full zlib header, if so strip it for
|
||||
// gzinflate()
|
||||
if (substr($gzData, 0, 3) == "\x1f\x8b\x08") {
|
||||
$i = 10;
|
||||
$flg = ord(substr($gzData, 3, 1));
|
||||
if (substr($gz_data, 0, 3) === "\x1f\x8b\x08") {
|
||||
$i = 10;
|
||||
$flg = ord(substr($gz_data, 3, 1));
|
||||
if ($flg > 0) {
|
||||
if ($flg & 4) {
|
||||
list($xlen) = unpack('v', substr($gzData, $i, 2));
|
||||
$i = $i + 2 + $xlen;
|
||||
list($xlen) = unpack('v', substr($gz_data, $i, 2));
|
||||
$i += 2 + $xlen;
|
||||
}
|
||||
if ($flg & 8) {
|
||||
$i = strpos($gzData, "\0", $i) + 1;
|
||||
$i = strpos($gz_data, "\0", $i) + 1;
|
||||
}
|
||||
if ($flg & 16) {
|
||||
$i = strpos($gzData, "\0", $i) + 1;
|
||||
$i = strpos($gz_data, "\0", $i) + 1;
|
||||
}
|
||||
if ($flg & 2) {
|
||||
$i = $i + 2;
|
||||
$i += 2;
|
||||
}
|
||||
}
|
||||
$decompressed = self::compatible_gzinflate(substr($gzData, $i));
|
||||
if (false !== $decompressed) {
|
||||
$decompressed = self::compatible_gzinflate(substr($gz_data, $i));
|
||||
if ($decompressed !== false) {
|
||||
return $decompressed;
|
||||
}
|
||||
}
|
||||
@@ -900,57 +917,61 @@ class Requests {
|
||||
$huffman_encoded = false;
|
||||
|
||||
// low nibble of first byte should be 0x08
|
||||
list(, $first_nibble) = unpack('h', $gzData);
|
||||
list(, $first_nibble) = unpack('h', $gz_data);
|
||||
|
||||
// First 2 bytes should be divisible by 0x1F
|
||||
list(, $first_two_bytes) = unpack('n', $gzData);
|
||||
list(, $first_two_bytes) = unpack('n', $gz_data);
|
||||
|
||||
if (0x08 == $first_nibble && 0 == ($first_two_bytes % 0x1F)) {
|
||||
if ($first_nibble === 0x08 && ($first_two_bytes % 0x1F) === 0) {
|
||||
$huffman_encoded = true;
|
||||
}
|
||||
|
||||
if ($huffman_encoded) {
|
||||
if (false !== ($decompressed = @gzinflate(substr($gzData, 2)))) {
|
||||
$decompressed = @gzinflate(substr($gz_data, 2));
|
||||
if ($decompressed !== false) {
|
||||
return $decompressed;
|
||||
}
|
||||
}
|
||||
|
||||
if ("\x50\x4b\x03\x04" == substr($gzData, 0, 4)) {
|
||||
if (substr($gz_data, 0, 4) === "\x50\x4b\x03\x04") {
|
||||
// ZIP file format header
|
||||
// Offset 6: 2 bytes, General-purpose field
|
||||
// Offset 26: 2 bytes, filename length
|
||||
// Offset 28: 2 bytes, optional field length
|
||||
// Offset 30: Filename field, followed by optional field, followed
|
||||
// immediately by data
|
||||
list(, $general_purpose_flag) = unpack('v', substr($gzData, 6, 2));
|
||||
list(, $general_purpose_flag) = unpack('v', substr($gz_data, 6, 2));
|
||||
|
||||
// If the file has been compressed on the fly, 0x08 bit is set of
|
||||
// the general purpose field. We can use this to differentiate
|
||||
// between a compressed document, and a ZIP file
|
||||
$zip_compressed_on_the_fly = (0x08 == (0x08 & $general_purpose_flag));
|
||||
$zip_compressed_on_the_fly = ((0x08 & $general_purpose_flag) === 0x08);
|
||||
|
||||
if (!$zip_compressed_on_the_fly) {
|
||||
// Don't attempt to decode a compressed zip file
|
||||
return $gzData;
|
||||
return $gz_data;
|
||||
}
|
||||
|
||||
// Determine the first byte of data, based on the above ZIP header
|
||||
// offsets:
|
||||
$first_file_start = array_sum(unpack('v2', substr($gzData, 26, 4)));
|
||||
if (false !== ($decompressed = @gzinflate(substr($gzData, 30 + $first_file_start)))) {
|
||||
$first_file_start = array_sum(unpack('v2', substr($gz_data, 26, 4)));
|
||||
$decompressed = @gzinflate(substr($gz_data, 30 + $first_file_start));
|
||||
if ($decompressed !== false) {
|
||||
return $decompressed;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Finally fall back to straight gzinflate
|
||||
if (false !== ($decompressed = @gzinflate($gzData))) {
|
||||
$decompressed = @gzinflate($gz_data);
|
||||
if ($decompressed !== false) {
|
||||
return $decompressed;
|
||||
}
|
||||
|
||||
// Fallback for all above failing, not expected, but included for
|
||||
// debugging and preventing regressions and to track stats
|
||||
if (false !== ($decompressed = @gzinflate(substr($gzData, 2)))) {
|
||||
$decompressed = @gzinflate(substr($gz_data, 2));
|
||||
if ($decompressed !== false) {
|
||||
return $decompressed;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,5 +29,5 @@ interface Requests_Auth {
|
||||
* @see Requests_Hooks::register
|
||||
* @param Requests_Hooks $hooks Hook system
|
||||
*/
|
||||
public function register(Requests_Hooks &$hooks);
|
||||
}
|
||||
public function register(Requests_Hooks $hooks);
|
||||
}
|
||||
|
||||
@@ -53,9 +53,9 @@ class Requests_Auth_Basic implements Requests_Auth {
|
||||
* @see fsockopen_header
|
||||
* @param Requests_Hooks $hooks Hook system
|
||||
*/
|
||||
public function register(Requests_Hooks &$hooks) {
|
||||
$hooks->register('curl.before_send', array(&$this, 'curl_before_send'));
|
||||
$hooks->register('fsockopen.after_headers', array(&$this, 'fsockopen_header'));
|
||||
public function register(Requests_Hooks $hooks) {
|
||||
$hooks->register('curl.before_send', array($this, 'curl_before_send'));
|
||||
$hooks->register('fsockopen.after_headers', array($this, 'fsockopen_header'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -85,4 +85,4 @@ class Requests_Auth_Basic implements Requests_Auth {
|
||||
public function getAuthString() {
|
||||
return $this->user . ':' . $this->pass;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,16 +65,16 @@ class Requests_Cookie {
|
||||
* @param array|Requests_Utility_CaseInsensitiveDictionary $attributes Associative array of attribute data
|
||||
*/
|
||||
public function __construct($name, $value, $attributes = array(), $flags = array(), $reference_time = null) {
|
||||
$this->name = $name;
|
||||
$this->value = $value;
|
||||
$this->name = $name;
|
||||
$this->value = $value;
|
||||
$this->attributes = $attributes;
|
||||
$default_flags = array(
|
||||
'creation' => time(),
|
||||
$default_flags = array(
|
||||
'creation' => time(),
|
||||
'last-access' => time(),
|
||||
'persistent' => false,
|
||||
'host-only' => true,
|
||||
'persistent' => false,
|
||||
'host-only' => true,
|
||||
);
|
||||
$this->flags = array_merge($default_flags, $flags);
|
||||
$this->flags = array_merge($default_flags, $flags);
|
||||
|
||||
$this->reference_time = time();
|
||||
if ($reference_time !== null) {
|
||||
@@ -228,7 +228,7 @@ class Requests_Cookie {
|
||||
public function normalize() {
|
||||
foreach ($this->attributes as $key => $value) {
|
||||
$orig_value = $value;
|
||||
$value = $this->normalize_attribute($key, $value);
|
||||
$value = $this->normalize_attribute($key, $value);
|
||||
if ($value === null) {
|
||||
unset($this->attributes[$key]);
|
||||
continue;
|
||||
@@ -288,6 +288,11 @@ class Requests_Cookie {
|
||||
return $expiry_time;
|
||||
|
||||
case 'domain':
|
||||
// Domains are not required as per RFC 6265 section 5.2.3
|
||||
if (empty($value)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Domain normalization, as per RFC 6265 section 5.2.3
|
||||
if ($value[0] === '.') {
|
||||
$value = substr($value, 1);
|
||||
@@ -380,7 +385,7 @@ class Requests_Cookie {
|
||||
* @return Requests_Cookie Parsed cookie object
|
||||
*/
|
||||
public static function parse($string, $name = '', $reference_time = null) {
|
||||
$parts = explode(';', $string);
|
||||
$parts = explode(';', $string);
|
||||
$kvparts = array_shift($parts);
|
||||
|
||||
if (!empty($name)) {
|
||||
@@ -392,13 +397,13 @@ class Requests_Cookie {
|
||||
// (`=foo`)
|
||||
//
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=169091
|
||||
$name = '';
|
||||
$name = '';
|
||||
$value = $kvparts;
|
||||
}
|
||||
else {
|
||||
list($name, $value) = explode('=', $kvparts, 2);
|
||||
}
|
||||
$name = trim($name);
|
||||
$name = trim($name);
|
||||
$value = trim($value);
|
||||
|
||||
// Attribute key are handled case-insensitively
|
||||
@@ -407,15 +412,15 @@ class Requests_Cookie {
|
||||
if (!empty($parts)) {
|
||||
foreach ($parts as $part) {
|
||||
if (strpos($part, '=') === false) {
|
||||
$part_key = $part;
|
||||
$part_key = $part;
|
||||
$part_value = true;
|
||||
}
|
||||
else {
|
||||
list($part_key, $part_value) = explode('=', $part, 2);
|
||||
$part_value = trim($part_value);
|
||||
$part_value = trim($part_value);
|
||||
}
|
||||
|
||||
$part_key = trim($part_key);
|
||||
$part_key = trim($part_key);
|
||||
$attributes[$part_key] = $part_value;
|
||||
}
|
||||
}
|
||||
@@ -444,7 +449,7 @@ class Requests_Cookie {
|
||||
// Default domain/path attributes
|
||||
if (empty($parsed->attributes['domain']) && !empty($origin)) {
|
||||
$parsed->attributes['domain'] = $origin->host;
|
||||
$parsed->flags['host-only'] = true;
|
||||
$parsed->flags['host-only'] = true;
|
||||
}
|
||||
else {
|
||||
$parsed->flags['host-only'] = false;
|
||||
@@ -492,7 +497,7 @@ class Requests_Cookie {
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @deprecated Use {@see Requests_Cookie::parse_from_headers}
|
||||
* @return string
|
||||
* @return array
|
||||
*/
|
||||
public static function parseFromHeaders(Requests_Response_Headers $headers) {
|
||||
return self::parse_from_headers($headers);
|
||||
|
||||
@@ -68,7 +68,7 @@ class Requests_Cookie_Jar implements ArrayAccess, IteratorAggregate {
|
||||
* Get the value for the item
|
||||
*
|
||||
* @param string $key Item key
|
||||
* @return string Item value
|
||||
* @return string|null Item value (null if offsetExists is false)
|
||||
*/
|
||||
public function offsetGet($key) {
|
||||
if (!isset($this->cookies[$key])) {
|
||||
@@ -162,14 +162,14 @@ class Requests_Cookie_Jar implements ArrayAccess, IteratorAggregate {
|
||||
*
|
||||
* @var Requests_Response $response
|
||||
*/
|
||||
public function before_redirect_check(Requests_Response &$return) {
|
||||
public function before_redirect_check(Requests_Response $return) {
|
||||
$url = $return->url;
|
||||
if (!$url instanceof Requests_IRI) {
|
||||
$url = new Requests_IRI($url);
|
||||
}
|
||||
|
||||
$cookies = Requests_Cookie::parse_from_headers($return->headers, $url);
|
||||
$this->cookies = array_merge($this->cookies, $cookies);
|
||||
$cookies = Requests_Cookie::parse_from_headers($return->headers, $url);
|
||||
$this->cookies = array_merge($this->cookies, $cookies);
|
||||
$return->cookies = $this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,4 +59,4 @@ class Requests_Exception extends Exception {
|
||||
public function getData() {
|
||||
return $this->data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,4 +68,4 @@ class Requests_Exception_HTTP extends Requests_Exception {
|
||||
|
||||
return 'Requests_Exception_HTTP_Unknown';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_304 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Not Modified';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_400 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Bad Request';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_401 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Unauthorized';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_402 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Payment Required';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_403 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Forbidden';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_404 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Not Found';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_405 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Method Not Allowed';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_406 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Not Acceptable';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_407 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Proxy Authentication Required';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_408 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Request Timeout';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_409 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Conflict';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_410 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Gone';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_411 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Length Required';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_412 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Precondition Failed';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_413 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Request Entity Too Large';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_414 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Request-URI Too Large';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_415 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Unsupported Media Type';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_416 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Requested Range Not Satisfiable';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_417 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Expectation Failed';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,4 +26,4 @@ class Requests_Exception_HTTP_418 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = "I'm A Teapot";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,4 +26,4 @@ class Requests_Exception_HTTP_428 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Precondition Required';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,4 +26,4 @@ class Requests_Exception_HTTP_429 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Too Many Requests';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,4 +26,4 @@ class Requests_Exception_HTTP_431 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Request Header Fields Too Large';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_500 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Internal Server Error';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_501 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Not Implemented';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_502 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Bad Gateway';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_503 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Service Unavailable';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_504 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Gateway Timeout';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Requests_Exception_HTTP_505 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'HTTP Version Not Supported';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,4 +26,4 @@ class Requests_Exception_HTTP_511 extends Requests_Exception_HTTP {
|
||||
* @var string
|
||||
*/
|
||||
protected $reason = 'Network Authentication Required';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,4 +41,4 @@ class Requests_Exception_HTTP_Unknown extends Requests_Exception_HTTP {
|
||||
|
||||
parent::__construct($reason, $data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
class Requests_Exception_Transport_cURL extends Requests_Exception_Transport {
|
||||
|
||||
const EASY = 'cURLEasy';
|
||||
const EASY = 'cURLEasy';
|
||||
const MULTI = 'cURLMulti';
|
||||
const SHARE = 'cURLShare';
|
||||
|
||||
|
||||
@@ -30,4 +30,4 @@ interface Requests_Hooker {
|
||||
* @return boolean Successfulness
|
||||
*/
|
||||
public function dispatch($hook, $parameters = array());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,4 +65,4 @@ class Requests_Hooks implements Requests_Hooker {
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,31 +141,32 @@ class Requests_IDNAEncoder {
|
||||
// Get number of bytes
|
||||
$strlen = strlen($input);
|
||||
|
||||
// phpcs:ignore Generic.CodeAnalysis.JumbledIncrementer -- This is a deliberate choice.
|
||||
for ($position = 0; $position < $strlen; $position++) {
|
||||
$value = ord($input[$position]);
|
||||
|
||||
// One byte sequence:
|
||||
if ((~$value & 0x80) === 0x80) {
|
||||
$character = $value;
|
||||
$length = 1;
|
||||
$length = 1;
|
||||
$remaining = 0;
|
||||
}
|
||||
// Two byte sequence:
|
||||
elseif (($value & 0xE0) === 0xC0) {
|
||||
$character = ($value & 0x1F) << 6;
|
||||
$length = 2;
|
||||
$length = 2;
|
||||
$remaining = 1;
|
||||
}
|
||||
// Three byte sequence:
|
||||
elseif (($value & 0xF0) === 0xE0) {
|
||||
$character = ($value & 0x0F) << 12;
|
||||
$length = 3;
|
||||
$length = 3;
|
||||
$remaining = 2;
|
||||
}
|
||||
// Four byte sequence:
|
||||
elseif (($value & 0xF8) === 0xF0) {
|
||||
$character = ($value & 0x07) << 18;
|
||||
$length = 4;
|
||||
$length = 4;
|
||||
$remaining = 3;
|
||||
}
|
||||
// Invalid byte:
|
||||
@@ -185,14 +186,14 @@ class Requests_IDNAEncoder {
|
||||
throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
|
||||
}
|
||||
|
||||
$character |= ($value & 0x3F) << (--$remaining * 6);
|
||||
--$remaining;
|
||||
$character |= ($value & 0x3F) << ($remaining * 6);
|
||||
}
|
||||
$position--;
|
||||
}
|
||||
|
||||
if (
|
||||
// Non-shortest form sequences are invalid
|
||||
$length > 1 && $character <= 0x7F
|
||||
if (// Non-shortest form sequences are invalid
|
||||
$length > 1 && $character <= 0x7F
|
||||
|| $length > 2 && $character <= 0x7FF
|
||||
|| $length > 3 && $character <= 0xFFFF
|
||||
// Outside of range of ucschar codepoints
|
||||
@@ -201,7 +202,7 @@ class Requests_IDNAEncoder {
|
||||
|| $character >= 0xFDD0 && $character <= 0xFDEF
|
||||
|| (
|
||||
// Everything else not in ucschar
|
||||
$character > 0xD7FF && $character < 0xF900
|
||||
$character > 0xD7FF && $character < 0xF900
|
||||
|| $character < 0x20
|
||||
|| $character > 0x7E && $character < 0xA0
|
||||
|| $character > 0xEFFFD
|
||||
@@ -227,17 +228,18 @@ class Requests_IDNAEncoder {
|
||||
*/
|
||||
public static function punycode_encode($input) {
|
||||
$output = '';
|
||||
# let n = initial_n
|
||||
// let n = initial_n
|
||||
$n = self::BOOTSTRAP_INITIAL_N;
|
||||
# let delta = 0
|
||||
// let delta = 0
|
||||
$delta = 0;
|
||||
# let bias = initial_bias
|
||||
// let bias = initial_bias
|
||||
$bias = self::BOOTSTRAP_INITIAL_BIAS;
|
||||
# let h = b = the number of basic code points in the input
|
||||
$h = $b = 0; // see loop
|
||||
# copy them to the output in order
|
||||
// let h = b = the number of basic code points in the input
|
||||
$h = 0;
|
||||
$b = 0; // see loop
|
||||
// copy them to the output in order
|
||||
$codepoints = self::utf8_to_codepoints($input);
|
||||
$extended = array();
|
||||
$extended = array();
|
||||
|
||||
foreach ($codepoints as $char) {
|
||||
if ($char < 128) {
|
||||
@@ -260,35 +262,36 @@ class Requests_IDNAEncoder {
|
||||
$extended = array_keys($extended);
|
||||
sort($extended);
|
||||
$b = $h;
|
||||
# [copy them] followed by a delimiter if b > 0
|
||||
// [copy them] followed by a delimiter if b > 0
|
||||
if (strlen($output) > 0) {
|
||||
$output .= '-';
|
||||
}
|
||||
# {if the input contains a non-basic code point < n then fail}
|
||||
# while h < length(input) do begin
|
||||
while ($h < count($codepoints)) {
|
||||
# let m = the minimum code point >= n in the input
|
||||
// {if the input contains a non-basic code point < n then fail}
|
||||
// while h < length(input) do begin
|
||||
$codepointcount = count($codepoints);
|
||||
while ($h < $codepointcount) {
|
||||
// let m = the minimum code point >= n in the input
|
||||
$m = array_shift($extended);
|
||||
//printf('next code point to insert is %s' . PHP_EOL, dechex($m));
|
||||
# let delta = delta + (m - n) * (h + 1), fail on overflow
|
||||
// let delta = delta + (m - n) * (h + 1), fail on overflow
|
||||
$delta += ($m - $n) * ($h + 1);
|
||||
# let n = m
|
||||
// let n = m
|
||||
$n = $m;
|
||||
# for each code point c in the input (in order) do begin
|
||||
for ($num = 0; $num < count($codepoints); $num++) {
|
||||
// for each code point c in the input (in order) do begin
|
||||
for ($num = 0; $num < $codepointcount; $num++) {
|
||||
$c = $codepoints[$num];
|
||||
# if c < n then increment delta, fail on overflow
|
||||
// if c < n then increment delta, fail on overflow
|
||||
if ($c < $n) {
|
||||
$delta++;
|
||||
}
|
||||
# if c == n then begin
|
||||
// if c == n then begin
|
||||
elseif ($c === $n) {
|
||||
# let q = delta
|
||||
// let q = delta
|
||||
$q = $delta;
|
||||
# for k = base to infinity in steps of base do begin
|
||||
// for k = base to infinity in steps of base do begin
|
||||
for ($k = self::BOOTSTRAP_BASE; ; $k += self::BOOTSTRAP_BASE) {
|
||||
# let t = tmin if k <= bias {+ tmin}, or
|
||||
# tmax if k >= bias + tmax, or k - bias otherwise
|
||||
// let t = tmin if k <= bias {+ tmin}, or
|
||||
// tmax if k >= bias + tmax, or k - bias otherwise
|
||||
if ($k <= ($bias + self::BOOTSTRAP_TMIN)) {
|
||||
$t = self::BOOTSTRAP_TMIN;
|
||||
}
|
||||
@@ -298,34 +301,30 @@ class Requests_IDNAEncoder {
|
||||
else {
|
||||
$t = $k - $bias;
|
||||
}
|
||||
# if q < t then break
|
||||
// if q < t then break
|
||||
if ($q < $t) {
|
||||
break;
|
||||
}
|
||||
# output the code point for digit t + ((q - t) mod (base - t))
|
||||
$digit = $t + (($q - $t) % (self::BOOTSTRAP_BASE - $t));
|
||||
// output the code point for digit t + ((q - t) mod (base - t))
|
||||
$digit = $t + (($q - $t) % (self::BOOTSTRAP_BASE - $t));
|
||||
$output .= self::digit_to_char($digit);
|
||||
# let q = (q - t) div (base - t)
|
||||
// let q = (q - t) div (base - t)
|
||||
$q = floor(($q - $t) / (self::BOOTSTRAP_BASE - $t));
|
||||
# end
|
||||
}
|
||||
# output the code point for digit q
|
||||
} // end
|
||||
// output the code point for digit q
|
||||
$output .= self::digit_to_char($q);
|
||||
# let bias = adapt(delta, h + 1, test h equals b?)
|
||||
// let bias = adapt(delta, h + 1, test h equals b?)
|
||||
$bias = self::adapt($delta, $h + 1, $h === $b);
|
||||
# let delta = 0
|
||||
// let delta = 0
|
||||
$delta = 0;
|
||||
# increment h
|
||||
// increment h
|
||||
$h++;
|
||||
# end
|
||||
}
|
||||
# end
|
||||
}
|
||||
# increment delta and n
|
||||
} // end
|
||||
} // end
|
||||
// increment delta and n
|
||||
$delta++;
|
||||
$n++;
|
||||
# end
|
||||
}
|
||||
} // end
|
||||
|
||||
return $output;
|
||||
}
|
||||
@@ -358,31 +357,31 @@ class Requests_IDNAEncoder {
|
||||
* @param int $numpoints
|
||||
* @param bool $firsttime
|
||||
* @return int New bias
|
||||
*
|
||||
* function adapt(delta,numpoints,firsttime):
|
||||
*/
|
||||
protected static function adapt($delta, $numpoints, $firsttime) {
|
||||
# function adapt(delta,numpoints,firsttime):
|
||||
# if firsttime then let delta = delta div damp
|
||||
// if firsttime then let delta = delta div damp
|
||||
if ($firsttime) {
|
||||
$delta = floor($delta / self::BOOTSTRAP_DAMP);
|
||||
}
|
||||
# else let delta = delta div 2
|
||||
// else let delta = delta div 2
|
||||
else {
|
||||
$delta = floor($delta / 2);
|
||||
}
|
||||
# let delta = delta + (delta div numpoints)
|
||||
// let delta = delta + (delta div numpoints)
|
||||
$delta += floor($delta / $numpoints);
|
||||
# let k = 0
|
||||
// let k = 0
|
||||
$k = 0;
|
||||
# while delta > ((base - tmin) * tmax) div 2 do begin
|
||||
// while delta > ((base - tmin) * tmax) div 2 do begin
|
||||
$max = floor(((self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN) * self::BOOTSTRAP_TMAX) / 2);
|
||||
while ($delta > $max) {
|
||||
# let delta = delta div (base - tmin)
|
||||
// let delta = delta div (base - tmin)
|
||||
$delta = floor($delta / (self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN));
|
||||
# let k = k + base
|
||||
// let k = k + base
|
||||
$k += self::BOOTSTRAP_BASE;
|
||||
# end
|
||||
}
|
||||
# return k + (((base - tmin + 1) * delta) div (delta + skew))
|
||||
} // end
|
||||
// return k + (((base - tmin + 1) * delta) div (delta + skew))
|
||||
return $k + floor(((self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN + 1) * $delta) / ($delta + self::BOOTSTRAP_SKEW));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,8 +40,8 @@ class Requests_IPv6 {
|
||||
}
|
||||
|
||||
list($ip1, $ip2) = explode('::', $ip);
|
||||
$c1 = ($ip1 === '') ? -1 : substr_count($ip1, ':');
|
||||
$c2 = ($ip2 === '') ? -1 : substr_count($ip2, ':');
|
||||
$c1 = ($ip1 === '') ? -1 : substr_count($ip1, ':');
|
||||
$c2 = ($ip2 === '') ? -1 : substr_count($ip2, ':');
|
||||
|
||||
if (strpos($ip2, '.') !== false) {
|
||||
$c2++;
|
||||
@@ -51,19 +51,19 @@ class Requests_IPv6 {
|
||||
$ip = '0:0:0:0:0:0:0:0';
|
||||
}
|
||||
// ::xxx
|
||||
else if ($c1 === -1) {
|
||||
elseif ($c1 === -1) {
|
||||
$fill = str_repeat('0:', 7 - $c2);
|
||||
$ip = str_replace('::', $fill, $ip);
|
||||
$ip = str_replace('::', $fill, $ip);
|
||||
}
|
||||
// xxx::
|
||||
else if ($c2 === -1) {
|
||||
elseif ($c2 === -1) {
|
||||
$fill = str_repeat(':0', 7 - $c1);
|
||||
$ip = str_replace('::', $fill, $ip);
|
||||
$ip = str_replace('::', $fill, $ip);
|
||||
}
|
||||
// xxx::xxx
|
||||
else {
|
||||
$fill = ':' . str_repeat('0:', 6 - $c2 - $c1);
|
||||
$ip = str_replace('::', $fill, $ip);
|
||||
$ip = str_replace('::', $fill, $ip);
|
||||
}
|
||||
return $ip;
|
||||
}
|
||||
@@ -84,7 +84,7 @@ class Requests_IPv6 {
|
||||
*/
|
||||
public static function compress($ip) {
|
||||
// Prepare the IP to be compressed
|
||||
$ip = self::uncompress($ip);
|
||||
$ip = self::uncompress($ip);
|
||||
$ip_parts = self::split_v6_v4($ip);
|
||||
|
||||
// Replace all leading zeros
|
||||
@@ -126,7 +126,7 @@ class Requests_IPv6 {
|
||||
*/
|
||||
protected static function split_v6_v4($ip) {
|
||||
if (strpos($ip, '.') !== false) {
|
||||
$pos = strrpos($ip, ':');
|
||||
$pos = strrpos($ip, ':');
|
||||
$ipv6_part = substr($ip, 0, $pos);
|
||||
$ipv4_part = substr($ip, $pos + 1);
|
||||
return array($ipv6_part, $ipv4_part);
|
||||
@@ -145,10 +145,10 @@ class Requests_IPv6 {
|
||||
* @return bool true if $ip is a valid IPv6 address
|
||||
*/
|
||||
public static function check_ipv6($ip) {
|
||||
$ip = self::uncompress($ip);
|
||||
$ip = self::uncompress($ip);
|
||||
list($ipv6, $ipv4) = self::split_v6_v4($ip);
|
||||
$ipv6 = explode(':', $ipv6);
|
||||
$ipv4 = explode('.', $ipv4);
|
||||
$ipv6 = explode(':', $ipv6);
|
||||
$ipv4 = explode('.', $ipv4);
|
||||
if (count($ipv6) === 8 && count($ipv4) === 1 || count($ipv6) === 6 && count($ipv4) === 4) {
|
||||
foreach ($ipv6 as $ipv6_part) {
|
||||
// The section can't be empty
|
||||
|
||||
@@ -67,28 +67,28 @@ class Requests_IRI {
|
||||
/**
|
||||
* Scheme
|
||||
*
|
||||
* @var string
|
||||
* @var string|null
|
||||
*/
|
||||
protected $scheme = null;
|
||||
|
||||
/**
|
||||
* User Information
|
||||
*
|
||||
* @var string
|
||||
* @var string|null
|
||||
*/
|
||||
protected $iuserinfo = null;
|
||||
|
||||
/**
|
||||
* ihost
|
||||
*
|
||||
* @var string
|
||||
* @var string|null
|
||||
*/
|
||||
protected $ihost = null;
|
||||
|
||||
/**
|
||||
* Port
|
||||
*
|
||||
* @var string
|
||||
* @var string|null
|
||||
*/
|
||||
protected $port = null;
|
||||
|
||||
@@ -102,12 +102,12 @@ class Requests_IRI {
|
||||
/**
|
||||
* iquery
|
||||
*
|
||||
* @var string
|
||||
* @var string|null
|
||||
*/
|
||||
protected $iquery = null;
|
||||
|
||||
/**
|
||||
* ifragment
|
||||
* ifragment|null
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
@@ -118,6 +118,8 @@ class Requests_IRI {
|
||||
*
|
||||
* Each key is the scheme, each value is an array with each key as the IRI
|
||||
* part and value as the default value for that part.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $normalization = array(
|
||||
'acap' => array(
|
||||
@@ -249,9 +251,9 @@ class Requests_IRI {
|
||||
*
|
||||
* Returns false if $base is not absolute, otherwise an IRI.
|
||||
*
|
||||
* @param IRI|string $base (Absolute) Base IRI
|
||||
* @param IRI|string $relative Relative IRI
|
||||
* @return IRI|false
|
||||
* @param Requests_IRI|string $base (Absolute) Base IRI
|
||||
* @param Requests_IRI|string $relative Relative IRI
|
||||
* @return Requests_IRI|false
|
||||
*/
|
||||
public static function absolutize($base, $relative) {
|
||||
if (!($relative instanceof Requests_IRI)) {
|
||||
@@ -419,7 +421,7 @@ class Requests_IRI {
|
||||
*/
|
||||
protected function replace_invalid_with_pct_encoding($string, $extra_chars, $iprivate = false) {
|
||||
// Normalize as many pct-encoded sections as possible
|
||||
$string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array(&$this, 'remove_iunreserved_percent_encoded'), $string);
|
||||
$string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array($this, 'remove_iunreserved_percent_encoded'), $string);
|
||||
|
||||
// Replace invalid percent characters
|
||||
$string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string);
|
||||
@@ -1010,7 +1012,7 @@ class Requests_IRI {
|
||||
/**
|
||||
* Get the complete IRI
|
||||
*
|
||||
* @return string
|
||||
* @return string|false
|
||||
*/
|
||||
protected function get_iri() {
|
||||
if (!$this->is_valid()) {
|
||||
@@ -1047,7 +1049,7 @@ class Requests_IRI {
|
||||
/**
|
||||
* Get the complete iauthority
|
||||
*
|
||||
* @return string
|
||||
* @return string|null
|
||||
*/
|
||||
protected function get_iauthority() {
|
||||
if ($this->iuserinfo === null && $this->ihost === null && $this->port === null) {
|
||||
|
||||
@@ -31,5 +31,5 @@ interface Requests_Proxy {
|
||||
* @see Requests_Hooks::register
|
||||
* @param Requests_Hooks $hooks Hook system
|
||||
*/
|
||||
public function register(Requests_Hooks &$hooks);
|
||||
}
|
||||
public function register(Requests_Hooks $hooks);
|
||||
}
|
||||
|
||||
@@ -59,12 +59,12 @@ class Requests_Proxy_HTTP implements Requests_Proxy {
|
||||
$this->proxy = $args;
|
||||
}
|
||||
elseif (is_array($args)) {
|
||||
if (count($args) == 1) {
|
||||
if (count($args) === 1) {
|
||||
list($this->proxy) = $args;
|
||||
}
|
||||
elseif (count($args) == 3) {
|
||||
elseif (count($args) === 3) {
|
||||
list($this->proxy, $this->user, $this->pass) = $args;
|
||||
$this->use_authentication = true;
|
||||
$this->use_authentication = true;
|
||||
}
|
||||
else {
|
||||
throw new Requests_Exception('Invalid number of arguments', 'proxyhttpbadargs');
|
||||
@@ -82,13 +82,13 @@ class Requests_Proxy_HTTP implements Requests_Proxy {
|
||||
* @see fsockopen_header
|
||||
* @param Requests_Hooks $hooks Hook system
|
||||
*/
|
||||
public function register(Requests_Hooks &$hooks) {
|
||||
$hooks->register('curl.before_send', array(&$this, 'curl_before_send'));
|
||||
public function register(Requests_Hooks $hooks) {
|
||||
$hooks->register('curl.before_send', array($this, 'curl_before_send'));
|
||||
|
||||
$hooks->register('fsockopen.remote_socket', array(&$this, 'fsockopen_remote_socket'));
|
||||
$hooks->register('fsockopen.remote_host_path', array(&$this, 'fsockopen_remote_host_path'));
|
||||
$hooks->register('fsockopen.remote_socket', array($this, 'fsockopen_remote_socket'));
|
||||
$hooks->register('fsockopen.remote_host_path', array($this, 'fsockopen_remote_host_path'));
|
||||
if ($this->use_authentication) {
|
||||
$hooks->register('fsockopen.after_headers', array(&$this, 'fsockopen_header'));
|
||||
$hooks->register('fsockopen.after_headers', array($this, 'fsockopen_header'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,4 +148,4 @@ class Requests_Proxy_HTTP implements Requests_Proxy {
|
||||
public function get_auth_string() {
|
||||
return $this->user . ':' . $this->pass;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,7 @@ class Requests_Response {
|
||||
|
||||
/**
|
||||
* Protocol version, false if non-blocking
|
||||
*
|
||||
* @var float|boolean
|
||||
*/
|
||||
public $protocol_version = false;
|
||||
@@ -97,7 +98,7 @@ class Requests_Response {
|
||||
*/
|
||||
public function is_redirect() {
|
||||
$code = $this->status_code;
|
||||
return in_array($code, array(300, 301, 302, 303, 307)) || $code > 307 && $code < 400;
|
||||
return in_array($code, array(300, 301, 302, 303, 307), true) || $code > 307 && $code < 400;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -21,7 +21,7 @@ class Requests_Response_Headers extends Requests_Utility_CaseInsensitiveDictiona
|
||||
* Set-Cookie headers.
|
||||
*
|
||||
* @param string $key
|
||||
* @return string Header value
|
||||
* @return string|null Header value
|
||||
*/
|
||||
public function offsetGet($key) {
|
||||
$key = strtolower($key);
|
||||
@@ -58,7 +58,7 @@ class Requests_Response_Headers extends Requests_Utility_CaseInsensitiveDictiona
|
||||
* Get all values for a given header
|
||||
*
|
||||
* @param string $key
|
||||
* @return array Header values
|
||||
* @return array|null Header values
|
||||
*/
|
||||
public function getValues($key) {
|
||||
$key = strtolower($key);
|
||||
|
||||
@@ -20,7 +20,6 @@ class Requests_SSL {
|
||||
*
|
||||
* Unfortunately, PHP doesn't check the certificate against the alternative
|
||||
* names, leading things like 'https://www.github.com/' to be invalid.
|
||||
* Instead
|
||||
*
|
||||
* @see https://tools.ietf.org/html/rfc2818#section-3.1 RFC2818, Section 3.1
|
||||
*
|
||||
@@ -30,13 +29,6 @@ class Requests_SSL {
|
||||
* @return bool
|
||||
*/
|
||||
public static function verify_certificate($host, $cert) {
|
||||
// Calculate the valid wildcard match if the host is not an IP address
|
||||
$parts = explode('.', $host);
|
||||
if (ip2long($host) === false) {
|
||||
$parts[0] = '*';
|
||||
}
|
||||
$wildcard = implode('.', $parts);
|
||||
|
||||
$has_dns_alt = false;
|
||||
|
||||
// Check the subjectAltName
|
||||
@@ -125,7 +117,7 @@ class Requests_SSL {
|
||||
* @return boolean Does the domain match?
|
||||
*/
|
||||
public static function match_domain($host, $reference) {
|
||||
// Check if the reference is blacklisted first
|
||||
// Check if the reference is blocklisted first
|
||||
if (self::verify_reference_name($reference) !== true) {
|
||||
return false;
|
||||
}
|
||||
@@ -139,7 +131,7 @@ class Requests_SSL {
|
||||
// Also validates that the host has 3 parts or more, as per Firefox's
|
||||
// ruleset.
|
||||
if (ip2long($host) === false) {
|
||||
$parts = explode('.', $host);
|
||||
$parts = explode('.', $host);
|
||||
$parts[0] = '*';
|
||||
$wildcard = implode('.', $parts);
|
||||
if ($wildcard === $reference) {
|
||||
@@ -149,4 +141,4 @@ class Requests_SSL {
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,12 +22,14 @@ class Requests_Session {
|
||||
* Base URL for requests
|
||||
*
|
||||
* URLs will be made absolute using this as the base
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $url = null;
|
||||
|
||||
/**
|
||||
* Base headers for requests
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $headers = array();
|
||||
@@ -64,9 +66,9 @@ class Requests_Session {
|
||||
* @param array $options Default options for requests
|
||||
*/
|
||||
public function __construct($url = null, $headers = array(), $data = array(), $options = array()) {
|
||||
$this->url = $url;
|
||||
$this->url = $url;
|
||||
$this->headers = $headers;
|
||||
$this->data = $data;
|
||||
$this->data = $data;
|
||||
$this->options = $options;
|
||||
|
||||
if (empty($this->options['cookies'])) {
|
||||
|
||||
@@ -38,4 +38,4 @@ interface Requests_Transport {
|
||||
* @return bool
|
||||
*/
|
||||
public static function test();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,9 +38,9 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
public $info;
|
||||
|
||||
/**
|
||||
* Version string
|
||||
* cURL version number
|
||||
*
|
||||
* @var long
|
||||
* @var int
|
||||
*/
|
||||
public $version;
|
||||
|
||||
@@ -90,9 +90,9 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct() {
|
||||
$curl = curl_version();
|
||||
$curl = curl_version();
|
||||
$this->version = $curl['version_number'];
|
||||
$this->handle = curl_init();
|
||||
$this->handle = curl_init();
|
||||
|
||||
curl_setopt($this->handle, CURLOPT_HEADER, false);
|
||||
curl_setopt($this->handle, CURLOPT_RETURNTRANSFER, 1);
|
||||
@@ -100,9 +100,11 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
curl_setopt($this->handle, CURLOPT_ENCODING, '');
|
||||
}
|
||||
if (defined('CURLOPT_PROTOCOLS')) {
|
||||
// phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_protocolsFound
|
||||
curl_setopt($this->handle, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
|
||||
}
|
||||
if (defined('CURLOPT_REDIR_PROTOCOLS')) {
|
||||
// phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_redir_protocolsFound
|
||||
curl_setopt($this->handle, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
|
||||
}
|
||||
}
|
||||
@@ -138,8 +140,8 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
$this->stream_handle = fopen($options['filename'], 'wb');
|
||||
}
|
||||
|
||||
$this->response_data = '';
|
||||
$this->response_bytes = 0;
|
||||
$this->response_data = '';
|
||||
$this->response_bytes = 0;
|
||||
$this->response_byte_limit = false;
|
||||
if ($options['max_bytes'] !== false) {
|
||||
$this->response_byte_limit = $options['max_bytes'];
|
||||
@@ -168,7 +170,7 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
// Reset encoding and try again
|
||||
curl_setopt($this->handle, CURLOPT_ENCODING, 'none');
|
||||
|
||||
$this->response_data = '';
|
||||
$this->response_data = '';
|
||||
$this->response_bytes = 0;
|
||||
curl_exec($this->handle);
|
||||
$response = $this->response_data;
|
||||
@@ -199,23 +201,24 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
|
||||
$multihandle = curl_multi_init();
|
||||
$subrequests = array();
|
||||
$subhandles = array();
|
||||
$subhandles = array();
|
||||
|
||||
$class = get_class($this);
|
||||
foreach ($requests as $id => $request) {
|
||||
$subrequests[$id] = new $class();
|
||||
$subhandles[$id] = $subrequests[$id]->get_subrequest_handle($request['url'], $request['headers'], $request['data'], $request['options']);
|
||||
$subhandles[$id] = $subrequests[$id]->get_subrequest_handle($request['url'], $request['headers'], $request['data'], $request['options']);
|
||||
$request['options']['hooks']->dispatch('curl.before_multi_add', array(&$subhandles[$id]));
|
||||
curl_multi_add_handle($multihandle, $subhandles[$id]);
|
||||
}
|
||||
|
||||
$completed = 0;
|
||||
$responses = array();
|
||||
$completed = 0;
|
||||
$responses = array();
|
||||
$subrequestcount = count($subrequests);
|
||||
|
||||
$request['options']['hooks']->dispatch('curl.before_multi_exec', array(&$multihandle));
|
||||
|
||||
do {
|
||||
$active = false;
|
||||
$active = 0;
|
||||
|
||||
do {
|
||||
$status = curl_multi_exec($multihandle, $active);
|
||||
@@ -235,15 +238,15 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
// Parse the finished requests before we start getting the new ones
|
||||
foreach ($to_process as $key => $done) {
|
||||
$options = $requests[$key]['options'];
|
||||
if (CURLE_OK !== $done['result']) {
|
||||
if ($done['result'] !== CURLE_OK) {
|
||||
//get error string for handle.
|
||||
$reason = curl_error($done['handle']);
|
||||
$exception = new Requests_Exception_Transport_cURL(
|
||||
$reason,
|
||||
Requests_Exception_Transport_cURL::EASY,
|
||||
$done['handle'],
|
||||
$done['result']
|
||||
);
|
||||
$reason = curl_error($done['handle']);
|
||||
$exception = new Requests_Exception_Transport_cURL(
|
||||
$reason,
|
||||
Requests_Exception_Transport_cURL::EASY,
|
||||
$done['handle'],
|
||||
$done['result']
|
||||
);
|
||||
$responses[$key] = $exception;
|
||||
$options['hooks']->dispatch('transport.internal.parse_error', array(&$responses[$key], $requests[$key]));
|
||||
}
|
||||
@@ -262,7 +265,7 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
$completed++;
|
||||
}
|
||||
}
|
||||
while ($active || $completed < count($subrequests));
|
||||
while ($active || $completed < $subrequestcount);
|
||||
|
||||
$request['options']['hooks']->dispatch('curl.after_multi_exec', array(&$multihandle));
|
||||
|
||||
@@ -287,8 +290,8 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
$this->stream_handle = fopen($options['filename'], 'wb');
|
||||
}
|
||||
|
||||
$this->response_data = '';
|
||||
$this->response_bytes = 0;
|
||||
$this->response_data = '';
|
||||
$this->response_bytes = 0;
|
||||
$this->response_byte_limit = false;
|
||||
if ($options['max_bytes'] !== false) {
|
||||
$this->response_byte_limit = $options['max_bytes'];
|
||||
@@ -310,17 +313,32 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
$options['hooks']->dispatch('curl.before_request', array(&$this->handle));
|
||||
|
||||
// Force closing the connection for old versions of cURL (<7.22).
|
||||
if ( ! isset( $headers['Connection'] ) ) {
|
||||
if (!isset($headers['Connection'])) {
|
||||
$headers['Connection'] = 'close';
|
||||
}
|
||||
|
||||
/**
|
||||
* Add "Expect" header.
|
||||
*
|
||||
* By default, cURL adds a "Expect: 100-Continue" to most requests. This header can
|
||||
* add as much as a second to the time it takes for cURL to perform a request. To
|
||||
* prevent this, we need to set an empty "Expect" header. To match the behaviour of
|
||||
* Guzzle, we'll add the empty header to requests that are smaller than 1 MB and use
|
||||
* HTTP/1.1.
|
||||
*
|
||||
* https://curl.se/mail/lib-2017-07/0013.html
|
||||
*/
|
||||
if (!isset($headers['Expect']) && $options['protocol_version'] === 1.1) {
|
||||
$headers['Expect'] = $this->get_expect_header($data);
|
||||
}
|
||||
|
||||
$headers = Requests::flatten($headers);
|
||||
|
||||
if (!empty($data)) {
|
||||
$data_format = $options['data_format'];
|
||||
|
||||
if ($data_format === 'query') {
|
||||
$url = self::format_get($url, $data);
|
||||
$url = self::format_get($url, $data);
|
||||
$data = '';
|
||||
}
|
||||
elseif (!is_string($data)) {
|
||||
@@ -363,6 +381,7 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
curl_setopt($this->handle, CURLOPT_TIMEOUT, ceil($timeout));
|
||||
}
|
||||
else {
|
||||
// phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_timeout_msFound
|
||||
curl_setopt($this->handle, CURLOPT_TIMEOUT_MS, round($timeout * 1000));
|
||||
}
|
||||
|
||||
@@ -370,6 +389,7 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
curl_setopt($this->handle, CURLOPT_CONNECTTIMEOUT, ceil($options['connect_timeout']));
|
||||
}
|
||||
else {
|
||||
// phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_connecttimeout_msFound
|
||||
curl_setopt($this->handle, CURLOPT_CONNECTTIMEOUT_MS, round($options['connect_timeout'] * 1000));
|
||||
}
|
||||
curl_setopt($this->handle, CURLOPT_URL, $url);
|
||||
@@ -385,9 +405,9 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
curl_setopt($this->handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
|
||||
}
|
||||
|
||||
if (true === $options['blocking']) {
|
||||
curl_setopt($this->handle, CURLOPT_HEADERFUNCTION, array(&$this, 'stream_headers'));
|
||||
curl_setopt($this->handle, CURLOPT_WRITEFUNCTION, array(&$this, 'stream_body'));
|
||||
if ($options['blocking'] === true) {
|
||||
curl_setopt($this->handle, CURLOPT_HEADERFUNCTION, array($this, 'stream_headers'));
|
||||
curl_setopt($this->handle, CURLOPT_WRITEFUNCTION, array($this, 'stream_body'));
|
||||
curl_setopt($this->handle, CURLOPT_BUFFERSIZE, Requests::BUFFER_SIZE);
|
||||
}
|
||||
}
|
||||
@@ -397,7 +417,8 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
*
|
||||
* @param string $response Response data from the body
|
||||
* @param array $options Request options
|
||||
* @return string HTTP response data including headers
|
||||
* @return string|false HTTP response data including headers. False if non-blocking.
|
||||
* @throws Requests_Exception
|
||||
*/
|
||||
public function process_response($response, $options) {
|
||||
if ($options['blocking'] === false) {
|
||||
@@ -405,7 +426,7 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
$options['hooks']->dispatch('curl.after_request', array(&$fake_headers));
|
||||
return false;
|
||||
}
|
||||
if ($options['filename'] !== false) {
|
||||
if ($options['filename'] !== false && $this->stream_handle) {
|
||||
fclose($this->stream_handle);
|
||||
$this->headers = trim($this->headers);
|
||||
}
|
||||
@@ -439,7 +460,7 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
// interim responses, such as a 100 Continue. We don't need that.
|
||||
// (We may want to keep this somewhere just in case)
|
||||
if ($this->done_headers) {
|
||||
$this->headers = '';
|
||||
$this->headers = '';
|
||||
$this->done_headers = false;
|
||||
}
|
||||
$this->headers .= $headers;
|
||||
@@ -473,7 +494,7 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
if (($this->response_bytes + $data_length) > $this->response_byte_limit) {
|
||||
// Limit the length
|
||||
$limited_length = ($this->response_byte_limit - $this->response_bytes);
|
||||
$data = substr($data, 0, $limited_length);
|
||||
$data = substr($data, 0, $limited_length);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -497,16 +518,17 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
*/
|
||||
protected static function format_get($url, $data) {
|
||||
if (!empty($data)) {
|
||||
$query = '';
|
||||
$url_parts = parse_url($url);
|
||||
if (empty($url_parts['query'])) {
|
||||
$query = $url_parts['query'] = '';
|
||||
$url_parts['query'] = '';
|
||||
}
|
||||
else {
|
||||
$query = $url_parts['query'];
|
||||
}
|
||||
|
||||
$query .= '&' . http_build_query($data, null, '&');
|
||||
$query = trim($query, '&');
|
||||
$query = trim($query, '&');
|
||||
|
||||
if (empty($url_parts['query'])) {
|
||||
$url .= '?' . $query;
|
||||
@@ -539,4 +561,29 @@ class Requests_Transport_cURL implements Requests_Transport {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the correct "Expect" header for the given request data.
|
||||
*
|
||||
* @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD.
|
||||
* @return string The "Expect" header.
|
||||
*/
|
||||
protected function get_expect_header($data) {
|
||||
if (!is_array($data)) {
|
||||
return strlen((string) $data) >= 1048576 ? '100-Continue' : '';
|
||||
}
|
||||
|
||||
$bytesize = 0;
|
||||
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($data));
|
||||
|
||||
foreach ($iterator as $datum) {
|
||||
$bytesize += strlen((string) $datum);
|
||||
|
||||
if ($bytesize >= 1048576) {
|
||||
return '100-Continue';
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -62,9 +62,9 @@ class Requests_Transport_fsockopen implements Requests_Transport {
|
||||
if (empty($url_parts)) {
|
||||
throw new Requests_Exception('Invalid URL.', 'invalidurl', $url);
|
||||
}
|
||||
$host = $url_parts['host'];
|
||||
$context = stream_context_create();
|
||||
$verifyname = false;
|
||||
$host = $url_parts['host'];
|
||||
$context = stream_context_create();
|
||||
$verifyname = false;
|
||||
$case_insensitive_headers = new Requests_Utility_CaseInsensitiveDictionary($headers);
|
||||
|
||||
// HTTPS support
|
||||
@@ -75,13 +75,13 @@ class Requests_Transport_fsockopen implements Requests_Transport {
|
||||
}
|
||||
|
||||
$context_options = array(
|
||||
'verify_peer' => true,
|
||||
// 'CN_match' => $host,
|
||||
'capture_peer_cert' => true
|
||||
'verify_peer' => true,
|
||||
'capture_peer_cert' => true,
|
||||
);
|
||||
$verifyname = true;
|
||||
$verifyname = true;
|
||||
|
||||
// SNI, if enabled (OpenSSL >=0.9.8j)
|
||||
// phpcs:ignore PHPCompatibility.Constants.NewConstants.openssl_tlsext_server_nameFound
|
||||
if (defined('OPENSSL_TLSEXT_SERVER_NAME') && OPENSSL_TLSEXT_SERVER_NAME) {
|
||||
$context_options['SNI_enabled'] = true;
|
||||
if (isset($options['verifyname']) && $options['verifyname'] === false) {
|
||||
@@ -91,7 +91,9 @@ class Requests_Transport_fsockopen implements Requests_Transport {
|
||||
|
||||
if (isset($options['verify'])) {
|
||||
if ($options['verify'] === false) {
|
||||
$context_options['verify_peer'] = false;
|
||||
$context_options['verify_peer'] = false;
|
||||
$context_options['verify_peer_name'] = false;
|
||||
$verifyname = false;
|
||||
}
|
||||
elseif (is_string($options['verify'])) {
|
||||
$context_options['cafile'] = $options['verify'];
|
||||
@@ -100,7 +102,7 @@ class Requests_Transport_fsockopen implements Requests_Transport {
|
||||
|
||||
if (isset($options['verifyname']) && $options['verifyname'] === false) {
|
||||
$context_options['verify_peer_name'] = false;
|
||||
$verifyname = false;
|
||||
$verifyname = false;
|
||||
}
|
||||
|
||||
stream_context_set_option($context, array('ssl' => $context_options));
|
||||
@@ -116,6 +118,7 @@ class Requests_Transport_fsockopen implements Requests_Transport {
|
||||
}
|
||||
$remote_socket .= ':' . $url_parts['port'];
|
||||
|
||||
// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_set_error_handler
|
||||
set_error_handler(array($this, 'connect_error_handler'), E_WARNING | E_NOTICE);
|
||||
|
||||
$options['hooks']->dispatch('fsockopen.remote_socket', array(&$remote_socket));
|
||||
@@ -150,17 +153,19 @@ class Requests_Transport_fsockopen implements Requests_Transport {
|
||||
$options['hooks']->dispatch('fsockopen.remote_host_path', array(&$path, $url));
|
||||
|
||||
$request_body = '';
|
||||
$out = sprintf("%s %s HTTP/%.1f\r\n", $options['type'], $path, $options['protocol_version']);
|
||||
$out = sprintf("%s %s HTTP/%.1F\r\n", $options['type'], $path, $options['protocol_version']);
|
||||
|
||||
if ($options['type'] !== Requests::TRACE) {
|
||||
if (is_array($data)) {
|
||||
$request_body = http_build_query($data, null, '&');
|
||||
$request_body = http_build_query($data, '', '&');
|
||||
}
|
||||
else {
|
||||
$request_body = $data;
|
||||
}
|
||||
|
||||
if (!empty($data)) {
|
||||
// Always include Content-length on POST requests to prevent
|
||||
// 411 errors from some servers when the body is empty.
|
||||
if (!empty($data) || $options['type'] === Requests::POST) {
|
||||
if (!isset($case_insensitive_headers['Content-Length'])) {
|
||||
$headers['Content-Length'] = strlen($request_body);
|
||||
}
|
||||
@@ -174,7 +179,7 @@ class Requests_Transport_fsockopen implements Requests_Transport {
|
||||
if (!isset($case_insensitive_headers['Host'])) {
|
||||
$out .= sprintf('Host: %s', $url_parts['host']);
|
||||
|
||||
if (( 'http' === strtolower($url_parts['scheme']) && $url_parts['port'] !== 80 ) || ( 'https' === strtolower($url_parts['scheme']) && $url_parts['port'] !== 443 )) {
|
||||
if ((strtolower($url_parts['scheme']) === 'http' && $url_parts['port'] !== 80) || (strtolower($url_parts['scheme']) === 'https' && $url_parts['port'] !== 443)) {
|
||||
$out .= ':' . $url_parts['port'];
|
||||
}
|
||||
$out .= "\r\n";
|
||||
@@ -192,7 +197,7 @@ class Requests_Transport_fsockopen implements Requests_Transport {
|
||||
$headers = Requests::flatten($headers);
|
||||
|
||||
if (!empty($headers)) {
|
||||
$out .= implode($headers, "\r\n") . "\r\n";
|
||||
$out .= implode("\r\n", $headers) . "\r\n";
|
||||
}
|
||||
|
||||
$options['hooks']->dispatch('fsockopen.after_headers', array(&$out));
|
||||
@@ -220,7 +225,7 @@ class Requests_Transport_fsockopen implements Requests_Transport {
|
||||
}
|
||||
|
||||
$timeout_sec = (int) floor($options['timeout']);
|
||||
if ($timeout_sec == $options['timeout']) {
|
||||
if ($timeout_sec === $options['timeout']) {
|
||||
$timeout_msec = 0;
|
||||
}
|
||||
else {
|
||||
@@ -228,11 +233,13 @@ class Requests_Transport_fsockopen implements Requests_Transport {
|
||||
}
|
||||
stream_set_timeout($socket, $timeout_sec, $timeout_msec);
|
||||
|
||||
$response = $body = $headers = '';
|
||||
$response = '';
|
||||
$body = '';
|
||||
$headers = '';
|
||||
$this->info = stream_get_meta_data($socket);
|
||||
$size = 0;
|
||||
$doingbody = false;
|
||||
$download = false;
|
||||
$size = 0;
|
||||
$doingbody = false;
|
||||
$download = false;
|
||||
if ($options['filename']) {
|
||||
$download = fopen($options['filename'], 'wb');
|
||||
}
|
||||
@@ -248,7 +255,7 @@ class Requests_Transport_fsockopen implements Requests_Transport {
|
||||
$response .= $block;
|
||||
if (strpos($response, "\r\n\r\n")) {
|
||||
list($headers, $block) = explode("\r\n\r\n", $response, 2);
|
||||
$doingbody = true;
|
||||
$doingbody = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -264,7 +271,7 @@ class Requests_Transport_fsockopen implements Requests_Transport {
|
||||
if (($size + $data_length) > $this->max_bytes) {
|
||||
// Limit the length
|
||||
$limited_length = ($this->max_bytes - $size);
|
||||
$block = substr($block, 0, $limited_length);
|
||||
$block = substr($block, 0, $limited_length);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -300,10 +307,10 @@ class Requests_Transport_fsockopen implements Requests_Transport {
|
||||
*/
|
||||
public function request_multiple($requests, $options) {
|
||||
$responses = array();
|
||||
$class = get_class($this);
|
||||
$class = get_class($this);
|
||||
foreach ($requests as $id => $request) {
|
||||
try {
|
||||
$handler = new $class();
|
||||
$handler = new $class();
|
||||
$responses[$id] = $handler->request($request['url'], $request['headers'], $request['data'], $request['options']);
|
||||
|
||||
$request['options']['hooks']->dispatch('transport.internal.parse_response', array(&$responses[$id], $request));
|
||||
@@ -353,8 +360,8 @@ class Requests_Transport_fsockopen implements Requests_Transport {
|
||||
$url_parts['query'] = '';
|
||||
}
|
||||
|
||||
$url_parts['query'] .= '&' . http_build_query($data, null, '&');
|
||||
$url_parts['query'] = trim($url_parts['query'], '&');
|
||||
$url_parts['query'] .= '&' . http_build_query($data, '', '&');
|
||||
$url_parts['query'] = trim($url_parts['query'], '&');
|
||||
}
|
||||
if (isset($url_parts['path'])) {
|
||||
if (isset($url_parts['query'])) {
|
||||
|
||||
@@ -46,7 +46,7 @@ class Requests_Utility_CaseInsensitiveDictionary implements ArrayAccess, Iterato
|
||||
* Get the value for the item
|
||||
*
|
||||
* @param string $key Item key
|
||||
* @return string Item value
|
||||
* @return string|null Item value (null if offsetExists is false)
|
||||
*/
|
||||
public function offsetGet($key) {
|
||||
$key = strtolower($key);
|
||||
@@ -70,7 +70,7 @@ class Requests_Utility_CaseInsensitiveDictionary implements ArrayAccess, Iterato
|
||||
throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
|
||||
}
|
||||
|
||||
$key = strtolower($key);
|
||||
$key = strtolower($key);
|
||||
$this->data[$key] = $value;
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,27 @@ class Requests_Utility_FilteredIterator extends ArrayIterator {
|
||||
*/
|
||||
public function current() {
|
||||
$value = parent::current();
|
||||
$value = call_user_func($this->callback, $value);
|
||||
|
||||
if (is_callable($this->callback)) {
|
||||
$value = call_user_func($this->callback, $value);
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function unserialize($serialized) {}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*
|
||||
* @phpcs:disable PHPCompatibility.FunctionNameRestrictions.NewMagicMethods.__unserializeFound
|
||||
*/
|
||||
public function __unserialize($serialized) {}
|
||||
|
||||
public function __wakeup() {
|
||||
unset($this->callback);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<package packagerversion="1.8.0" version="2.0"
|
||||
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"
|
||||
xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
|
||||
http://pear.php.net/dtd/tasks-1.0.xsd
|
||||
http://pear.php.net/dtd/package-2.0
|
||||
http://pear.php.net/dtd/package-2.0.xsd">
|
||||
<name>Requests</name>
|
||||
<channel>pear.ryanmccue.info</channel>
|
||||
<summary>A HTTP library written in PHP, for human beings.</summary>
|
||||
<description>
|
||||
Requests is a HTTP library written in PHP, for human beings. It is
|
||||
roughly based on the API from the excellent Requests Python library.
|
||||
Requests is ISC Licensed (similar to the new BSD license) and has
|
||||
no dependencies.
|
||||
</description>
|
||||
<lead>
|
||||
<name>Ryan McCue</name>
|
||||
<user>rmccue</user>
|
||||
<email>me+pear@ryanmccue dot info</email>
|
||||
<active>yes</active>
|
||||
</lead>
|
||||
<date>{{ date }}</date>
|
||||
<time>{{ time }}</time>
|
||||
<version>
|
||||
<release>{{ version }}</release>
|
||||
<api>{{ api_version }}</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>{{ stability }}</release>
|
||||
<api>{{ stability }}</api>
|
||||
</stability>
|
||||
<license uri="https://github.com/rmccue/Requests/blob/master/LICENSE" filesource="LICENSE">ISC</license>
|
||||
<notes>-</notes>
|
||||
<contents>
|
||||
<dir name="/">
|
||||
<file name="CHANGELOG.md" role="doc" />
|
||||
<file name="LICENSE" role="doc" />
|
||||
<file name="README.md" role="doc" />
|
||||
<dir name="library">
|
||||
<file install-as="Requests.php" name="Requests.php" role="php" />
|
||||
<dir name="Requests">
|
||||
{{ files }}
|
||||
</dir>
|
||||
</dir>
|
||||
<file name="library/Requests/Transport/cacert.pem" install-as="library/Requests/Transport/cacert.pem" role="data" />
|
||||
</dir>
|
||||
</contents>
|
||||
<dependencies>
|
||||
<required>
|
||||
<php>
|
||||
<min>5.2.0</min>
|
||||
</php>
|
||||
<pearinstaller>
|
||||
<min>1.4.0</min>
|
||||
</pearinstaller>
|
||||
</required>
|
||||
</dependencies>
|
||||
<phprelease />
|
||||
</package>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user