Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1293419
  • 博文数量: 315
  • 博客积分: 10397
  • 博客等级: 上将
  • 技术积分: 3731
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-07 21:21
文章分类

全部博文(315)

文章存档

2015年(10)

2014年(3)

2013年(2)

2012年(8)

2011年(8)

2010年(29)

2009年(59)

2008年(77)

2007年(119)

分类:

2008-02-29 10:56:07

Zend_Http_Response可以容易的访问一个HTTP 响应信息,和一组解析HTTP响应包的静态方法。通常,Zend_Http_Response由一个Zend_Http_Client请求返回成一个对象。

在大多情形下,一个Zend_Http_Response对象是使用factory方法实例化。该方法读取一个包含HTTP响应信息的字符串,并返回一个新的Zend_Http_Response对象

 

$str '';
$sock fsockopen(''80
);
$req =     "GET / HTTP/1.1\r\n" 
.
        
"Host: \r\n" 
.
        
"Connectoin: close\r\n" 
.
        
"\r\n"
;

fwrite($sock$req
);
while (
$buff fread($sock1024
))
    
$str .= $sock
;

$response Zend_Http_Response::factory($str);

 

你也可以使用构造器方法创建一个新的response对象,通过指定所有response参数

public function __construct($code, $headers, $body = null, $version = '1.1', $message = null)

·         $code: HTTP response编码 (eg. 200, 404, etc.)

·         $headers: 一个HTTP response 报头的关联数组 (eg. 'Host' => 'example.com')

·         $body: response 实体字符串

·         $version: HTTP response版本 (usually 1.0 or 1.1)

·         $message:HTTP response 信息 (eg 'OK', 'Internal Server Error').如没指定,信息将会根据响应编码来设定

布尔Tester方法

一旦Zend_Http_Response被实例化,它提供了几个方法来测试响应的类型,他们都返回布尔truefalse

·         Boolean isSuccessful(): 请求是否成功,如是HTTP 1xx2xx回应编码,返回TRUE

·         Boolean isError(): 响应编码是否为错误,如是HTTP 4xx(客户端错误)和5xx(服务器错误)回应编码,返回TRUE

·         Boolean isRedirect(): 响应是否为一个重定向的响应如是HTTP3xx回应编码,返回TRUE

 

if ($response->isError()) {

  echo 
"Error transmitting data.\n"

  
echo "Server reply was: " $response->getStatus() . " " $response->getMessage() . "\n";

}
// .. process the response here...

存储器方法

Response对象的主要目的就是可以容易的访问各种不同的response参数。

·         int getStatus(): 获取 HTTP response 状态码 (eg. 200, 504, etc.)

·         string getMessage(): 获取 HTTP response 状态信息 (eg. "Not Found", "Authorization Required")

·         string getBody(): 获取整个解码的 HTTP response 实体

·         string getRawBody(): 获取原始的,可能未解码HTTP response 实体.如果实体使用GZIP 编码, 它将不会被解码

·         array getHeaders(): 获取HTTP response报头的一个关联数组(eg. 'Content-type' => 'text/html')

·         string|array getHeader($header): 获取一个指定的HTTP response 报头,$header指定

·         string getHeadersAsString($status_line = true, $br = "\n"): 以字符串的方式获取整个报头组。如果$status_line true (缺省), 第一行状态(eg. "HTTP/1.1 200 OK") 也将会返回. $br参数断行 (Can be, for example, "
")

·         string asString($br = "\n"): 以字符串的方式获取整个response信息。用$br参数断行(Can be, for example, "
")


if ($response->getStatus() == 200) {
  echo 
"The request returned the following information:";
  echo 
$response->getBody();
} else {
  echo 
"An error occurred while fetching data:";
  echo 
$response->getStatus() . ": " $response->getMessage();
}
注意:总要检查返回值
因为一个response可能包含同样报头的几个实例,getHeader方法和getHeaders方法也许返回既可能是单个字符串,也有可能是字符串数组。所以你应该总要检查返回值是一个字符串还是数组。

$ctype 
$response->getHeader('Content-type');
if (
is_array($ctype)) $ctype $ctype[0];

$body $response->getBody();
if (
$ctype == 'text/html' || $ctype == 'text/xml') {
  
$body htmlentities($body);
} echo 
$body;
静态HTTP Response解析器
Zend_Http_Response类也提供了几个内建的方法来处理和解析HTTP response信息。这些方法都被声明成一个静态方法,这使得他们即使没有实例化一个response对象,仅仅想抽取response指定部分的时候,也可以在外部使用

·         int Zend_Http_Response::extractCode($response_str): HTTP response编码(eg. 200 or 404中抽取$response_str并返回Zend_Http_Response::extractMessage($response_str): HTTP response 信息(eg. "OK" or "File Not Found"中抽取$response_str并返回

·         string Zend_Http_Response::extractVersion($response_str): : HTTP 版本(eg. eg. 1.1 or 1.0中抽取$response_str并返回

·         array Zend_Http_Response::extractHeaders($response_str): HTTP 响应报头中抽取$response_str并返回一个数组

·         string Zend_Http_Response::extractBody($response_str): HTTP 响应实体中抽取$response_str并返回

·         string Zend_Http_Response::responseCodeAsText($code = null, $http11 = true): 从一个response code中获取标准HTTP response信息。比如,如果$code500将返回"Internal Server Error". 如果$http11 is true (缺省),将返回HTTP/1.1 标准信息 否则返回 HTTP/1.0 信息. 如果$code没有指定,该方法将返回所有HTTP响应代码为一个关联数组

除去解析方法,该类也包含了一组通用HTTP response 传输编码的解码器

·         string Zend_Http_Response::decodeChunkedBody($body): 解码一个完全的"Content-Transfer-Encoding: Chunked" 实体

·         string Zend_Http_Response::decodeGzip($body): 解码一个 "Content-Encoding: gzip" 实体

·         string Zend_Http_Response::decodeDeflate($body): 解码一个"Content-Encoding: deflate" 实体

 

阅读(2091) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~