/** * Efficiently Download a file through HTTP. Returns downloaded file as a string in-memory * This is best used for small files * * If an HTTP proxy has been configured (http_proxy Pyrus\Config * setting), the proxy will be used. * * @param string $url the URL to download * @param false|string|array $lastmodified header values to check against * for caching use false to return * the header values from this download * @param false|array $accept Accept headers to send * * @return string|array Returns the contents of the downloaded file or a PEAR * error on failure. If the error is caused by * socket-related errors, the error object will * have the fsockopen error code available through * getCode(). If caching is requested, then return the header * values. * * @throws Pyrus\REST\Exception if the url is invalid * @access public */ function downloadHttp($url, $lastmodified = null, $accept = false) { $info = parse_url($url); if (!isset($info['scheme']) || !in_array($info['scheme'], array('http', 'https'))) { throw new REST\Exception('Cannot download non-http URL "' . $url . '"'); } if (!isset($info['host'])) { throw new REST\Exception('Cannot download from non-URL "' . $url . '"'); } $response = Main::download($url); if ($response->code == 304 && ($lastmodified || $lastmodified === false)) { return false; } if (isset($response->headers['content-length'])) { $length = $response->headers['content-length']; } else { $length = -1; } $data = $response->body; if ($lastmodified === false || $lastmodified) { if (isset($response->headers['etag'])) { $lastmodified = array('ETag' => $response->headers['etag']); } if (isset($response->headers['last-modified'])) { if (is_array($lastmodified)) { $lastmodified['Last-Modified'] = $response->headers['last-modified']; } else { $lastmodified = $response->headers['last-modified']; } } return array($data, $lastmodified, $response->headers); } return $data; }
/** * Attempts to get the xml from the URL specified. * * @param string $xml_url URL to the channel xml http://pear.php.net/channel.xml * * @return string Channel XML */ protected function _fromURL($xml_url) { $response = Main::download($xml_url); return $response->body; }