http.php.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 624 行 · 第 1/2 页

SVN-BASE
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 + -
显示快捷键?