http.php

来自「一款可以和GOOGLE媲美的开源统计系统,运用AJAX.功能强大. 无色提示:」· PHP 代码 · 共 624 行 · 第 1/2 页

PHP
624
字号
            $this->_http_version = false;            $this->_mime_type = '';            $this->_location = false;            $this->_cookies = array();            $this->_authentication = false;            $this->_realm = false;            foreach (split("\r\n", $headers) as $header_line) {                $this->_parseHeaderLine($header_line);            }        }                /**         *    Accessor for parsed HTTP protocol version.         *    @return integer           HTTP error code.         *    @access public         */        function getHttpVersion() {            return $this->_http_version;        }                /**         *    Accessor for raw header block.         *    @return string        All headers as raw string.         *    @access public         */        function getRaw() {            return $this->_raw_headers;        }                /**         *    Accessor for parsed HTTP error code.         *    @return integer           HTTP error code.         *    @access public         */        function getResponseCode() {            return (integer)$this->_response_code;        }                /**         *    Returns the redirected URL or false if         *    no redirection.         *    @return string      URL or false for none.         *    @access public         */        function getLocation() {            return $this->_location;        }                /**         *    Test to see if the response is a valid redirect.         *    @return boolean       True if valid redirect.         *    @access public         */        function isRedirect() {            return in_array($this->_response_code, array(301, 302, 303, 307)) &&                    (boolean)$this->getLocation();        }                /**         *    Test to see if the response is an authentication         *    challenge.         *    @return boolean       True if challenge.         *    @access public         */        function isChallenge() {            return ($this->_response_code == 401) &&                    (boolean)$this->_authentication &&                    (boolean)$this->_realm;        }                /**         *    Accessor for MIME type header information.         *    @return string           MIME type.         *    @access public         */        function getMimeType() {            return $this->_mime_type;        }                /**         *    Accessor for authentication type.         *    @return string        Type.         *    @access public         */        function getAuthentication() {            return $this->_authentication;        }                /**         *    Accessor for security realm.         *    @return string        Realm.         *    @access public         */        function getRealm() {            return $this->_realm;        }                /**         *    Writes new cookies to the cookie jar.         *    @param SimpleCookieJar $jar   Jar to write to.         *    @param SimpleUrl $url         Host and path to write under.         *    @access public         */        function writeCookiesToJar(&$jar, $url) {            foreach ($this->_cookies as $cookie) {                $jar->setCookie(                        $cookie->getName(),                        $cookie->getValue(),                        $url->getHost(),                        $cookie->getPath(),                        $cookie->getExpiry());            }        }        /**         *    Called on each header line to accumulate the held         *    data within the class.         *    @param string $header_line        One line of header.         *    @access protected         */        function _parseHeaderLine($header_line) {            if (preg_match('/HTTP\/(\d+\.\d+)\s+(\d+)/i', $header_line, $matches)) {                $this->_http_version = $matches[1];                $this->_response_code = $matches[2];            }            if (preg_match('/Content-type:\s*(.*)/i', $header_line, $matches)) {                $this->_mime_type = trim($matches[1]);            }            if (preg_match('/Location:\s*(.*)/i', $header_line, $matches)) {                $this->_location = trim($matches[1]);            }            if (preg_match('/Set-cookie:(.*)/i', $header_line, $matches)) {                $this->_cookies[] = $this->_parseCookie($matches[1]);            }            if (preg_match('/WWW-Authenticate:\s+(\S+)\s+realm=\"(.*?)\"/i', $header_line, $matches)) {                $this->_authentication = $matches[1];                $this->_realm = trim($matches[2]);            }        }                /**         *    Parse the Set-cookie content.         *    @param string $cookie_line    Text after "Set-cookie:"         *    @return SimpleCookie          New cookie object.         *    @access private         */        function _parseCookie($cookie_line) {            $parts = split(";", $cookie_line);            $cookie = array();            preg_match('/\s*(.*?)\s*=(.*)/', array_shift($parts), $cookie);            foreach ($parts as $part) {                if (preg_match('/\s*(.*?)\s*=(.*)/', $part, $matches)) {                    $cookie[$matches[1]] = trim($matches[2]);                }            }            return new SimpleCookie(                    $cookie[1],                    trim($cookie[2]),                    isset($cookie["path"]) ? $cookie["path"] : "",                    isset($cookie["expires"]) ? $cookie["expires"] : false);        }    }        /**     *    Basic HTTP response.	 *    @package SimpleTest	 *    @subpackage WebTester     */    class SimpleHttpResponse extends SimpleStickyError {        var $_url;        var $_encoding;        var $_sent;        var $_content;        var $_headers;                /**         *    Constructor. Reads and parses the incoming         *    content and headers.         *    @param SimpleSocket $socket   Network connection to fetch         *                                  response text from.         *    @param SimpleUrl $url         Resource name.         *    @param mixed $encoding        Record of content sent.         *    @access public         */        function SimpleHttpResponse(&$socket, $url, $encoding) {            $this->SimpleStickyError();            $this->_url = $url;            $this->_encoding = $encoding;            $this->_sent = $socket->getSent();            $this->_content = false;            $raw = $this->_readAll($socket);            if ($socket->isError()) {                $this->_setError('Error reading socket [' . $socket->getError() . ']');                return;            }            $this->_parse($raw);        }                /**         *    Splits up the headers and the rest of the content.         *    @param string $raw    Content to parse.         *    @access private         */        function _parse($raw) {            if (! $raw) {                $this->_setError('Nothing fetched');                $this->_headers = &new SimpleHttpHeaders('');            } elseif (! strstr($raw, "\r\n\r\n")) {                $this->_setError('Could not split headers from content');                $this->_headers = &new SimpleHttpHeaders($raw);            } else {                list($headers, $this->_content) = split("\r\n\r\n", $raw, 2);                $this->_headers = &new SimpleHttpHeaders($headers);            }        }                /**         *    Original request method.         *    @return string        GET, POST or HEAD.         *    @access public         */        function getMethod() {            return $this->_encoding->getMethod();        }                /**         *    Resource name.         *    @return SimpleUrl        Current url.         *    @access public         */        function getUrl() {            return $this->_url;        }                /**         *    Original request data.         *    @return mixed              Sent content.         *    @access public         */        function getRequestData() {            return $this->_encoding;        }                /**         *    Raw request that was sent down the wire.         *    @return string        Bytes actually sent.         *    @access public         */        function getSent() {            return $this->_sent;        }                /**         *    Accessor for the content after the last         *    header line.         *    @return string           All content.         *    @access public         */        function getContent() {            return $this->_content;        }                /**         *    Accessor for header block. The response is the         *    combination of this and the content.         *    @return SimpleHeaders        Wrapped header block.         *    @access public         */        function getHeaders() {            return $this->_headers;        }                /**         *    Accessor for any new cookies.         *    @return array       List of new cookies.         *    @access public         */        function getNewCookies() {            return $this->_headers->getNewCookies();        }                /**         *    Reads the whole of the socket output into a         *    single string.         *    @param SimpleSocket $socket  Unread socket.         *    @return string               Raw output if successful         *                                 else false.         *    @access private         */        function _readAll(&$socket) {            $all = '';            while (! $this->_isLastPacket($next = $socket->read())) {                $all .= $next;            }            return $all;        }                /**         *    Test to see if the packet from the socket is the         *    last one.         *    @param string $packet    Chunk to interpret.         *    @return boolean          True if empty or EOF.         *    @access private         */        function _isLastPacket($packet) {            if (is_string($packet)) {                return $packet === '';            }            return ! $packet;        }    }?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?