setAccessible(true); return $method->invokeArgs($this, $args); } public static function __callStatic($method, $args) { $method = new \ReflectionMethod('IndieWeb\MentionClient', $method); $method->setAccessible(true); return $method->invokeArgs(null, $args); } protected static function _head($url, $headers = []) { self::$_redirects_remaining = 5; $response = self::_read_file($url); return array( 'code' => $response['code'], 'headers' => $response['headers'], 'url' => $response['url'] ); } protected static function _get($url, $headers = []) { self::$_redirects_remaining = 5; return self::_read_file($url); } protected static function _post($url, $body, $headers = []) { return self::_read_file($url); } private static function _read_file($url) { if(self::$dataDir) { $dataDir = self::$dataDir; } else { $dataDir = dirname(__FILE__).'/../../tests/data/'; } $filename = $dataDir.preg_replace('/https?:\/\//', '', $url); if(!file_exists($filename)) { $filename = dirname(__FILE__).'/../../tests/data/404.response.txt'; } $response = file_get_contents($filename); $split = explode("\r\n\r\n", $response); if(count($split) != 2) { throw new \Exception("Invalid file contents, check that newlines are CRLF: $url"); } list($headers, $body) = $split; if(preg_match('/HTTP\/1\.1 (\d+)/', $headers, $match)) { $code = $match[1]; } $headers = preg_replace('/HTTP\/1\.1 \d+ .+/', '', $headers); $parsedHeaders = self::_parse_headers($headers); if(($code == 302 || $code == 301) && array_key_exists('Location', $parsedHeaders)) { $effectiveUrl = \mf2\resolveUrl($url, $parsedHeaders['Location']); if(self::$_redirects_remaining > 0) { self::$_redirects_remaining--; return self::_read_file($effectiveUrl); } else { return [ 'code' => 0, 'headers' => $parsedHeaders, 'body' => $body, 'error' => 'too_many_redirects', 'error_description' => '', 'url' => $effectiveUrl ]; } } else { $effectiveUrl = $url; } return array( 'code' => $code, 'headers' => $parsedHeaders, 'body' => $body, 'url' => $effectiveUrl ); } }__halt_compiler();----SIGNATURE:----XWq9HtyTi6U9zUmmzWbkOdvxj3VV/v1OaurxO5ZZxk7pYrrMDeVa7+iwYINAOf6ka2VZ65e0mVPDiE30v4HK0R6sfiEDQQXx1nDHE7c6zwChVo4WZdx899q+cevmb1Yc6x6t1s8zoEUKO26prgD03KiOhsc7okvtTIdPTxl7sThBVFvzZWGAWUz05XHnB2N1H+9z8ZKaHl3CK3bZh92XKe9qzvxIt+zScD+qJrfYpCgc2QVE8GECNVduZMIROmmfKBNS2a0kdBHIUXeNFhEYKGDw1vcn9lKzUW7dUfpim7zhcE7e2KAm752c3nYZ/zQwIQC22MTJImo1y/yGrl9LaRhVN9pHe9tPdDVwbqO4bwat+/KFCCmIZNEtDJCk4FyOTuPhX6jtrp/jGB5AN//ibixXdejE503TCQf7labiv2Ce3kHuHP19XSq0iwps0zzBj3xUmRCcjZq1mcytOXotNpEqHd77N28KPXwa1d6+Cvz0WSIdb0vcfezyJbmaiZlC3UEmlbYCwxY+R6WNjlmiAuyL81Db3Cjmgm+o0Jbuv0FNyPGkhJAaw/ipL9DLRITT+xaqri8TiF2cFfMdNW/qs8E0+V9M+8R5ShKO/srqBU2uWvhVljJNm4nnPITNAMRxAjnr5TeQ7k2DAD45OT/ME6PE3j2IB1tLyMkb1KACNUc=----ATTACHMENT:----MTcxNjk5MTU5NTA1MzkzMiA0MjUzMjUzOTc5MTI3MDczIDI1Mzk3MTYyMDQxNTU2ODE=