_testDataPath = $testDataPath; } public function get($url) { return $this->_read_file($url); } public function post($url, $body, $headers=array()) { return $this->_read_file($url); } public function head($url) { $response = $this->_read_file($url); return array( 'code' => $response['code'], 'headers' => $response['headers'], 'error' => '', 'error_description' => '', 'url' => $response['url'] ); } private function _read_file($url) { $filename = $this->_testDataPath.preg_replace('/https?:\/\//', '', $url); if(!file_exists($filename)) { $filename = $this->_testDataPath.'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 in test data, check that newlines are CRLF: $url"); } $headers = array_shift($split); $body = implode("\r\n", $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(array_key_exists('Location', $parsedHeaders)) { $effectiveUrl = \mf2\resolveUrl($url, $parsedHeaders['Location']); } else { $effectiveUrl = $url; } return array( 'code' => $code, 'headers' => $parsedHeaders, 'body' => $body, 'error' => '', 'error_description' => '', 'url' => $effectiveUrl ); } }