第 13 章 Zend_Http
上一页 |  | 下一页

## 第 13 章 Zend_Http

## 13.1. Zend_Http_Client

### 13.1.1. 简介

`Zend_Http_Client` 为那些需要执行HTTP请求的程序提供了一个简单的接口. `Zend_Http_Client` 可以执行 GET, POST, PUT 和 DELETE 请求.

| 注意
默认情况下`Zend_Http_Client` 将追踪 5 次 HTTP 重定向. 要改变这个行为, 可以传入允许重定向的最大数量到`get()`的方法

例 13.1. 执行一个基本的 GET 请求

    <?php
    	require_once 'Zend/Http_Client.php';
    	try {
    	    $http = new Zend_Http_Client('http://example.org');
    	    $response = $http->get();
    	    if ($response->isSuccessful()) {
    	        echo $response->getBody();
    	    } else {
    	        echo '<p>An error occurred</p>';
    	    }
    	} catch (Zend_Http_Client_Exception $e) {
    	    echo '<p>An error occurred (' .$e->getMessage(). ')</p>';
    	}
    	?>

### 13.1.2. 带有指定的HTTP头的基本 GET 请求

`Zend_Http_Client` 的构造函数创建一个`Zend_Http_Client` 的实例来发送HTTP请求.

当在单个URL上使用 `Zend_Http_Client`时, 大多数情况下你可以提供URL 和相应的头部信息到构造函数, 比如下面的例子:

例 13.2. 创建一个基本的Zend_Http_Client

    <?php
    	require_once 'Zend/Http_Client.php';

    	// 指定URL和一个简单的header信息
    	$http = new Zend_Http_Client('http://example.org', 'Accept: text/html');
    	?>

例 13.3. 发送多条header信息

    <?php
    	require_once 'Zend/Http_Client.php';

    	// 指定URL和多个header信息
    	$http = new Zend_Http_Client('http://example.org',
    	                        array('Accept: text/html', 'Accept-Language: en-us,en;q=0.5'));
    	?>

如果你希望使用 `Zend_Http_Client` 来发送请求到 多个 URL, 参考 第 13.1.3 节 “发送请求到多个域名”

### 13.1.3. 发送请求到多个域名

`Zend_Http_Client` 支持发送请求到多个域名， 用 `Zend_Http_Client::setUri()` 函数来设定要查询的URL.

| 注意
当查询多个RSS feed时，这是一个非常好的用法.

例 13.4. 发送请求到多个域名

    <?php
    	require_once 'Zend/Http_Client.php';

    	// 实例化我们的客户端对象
    	$http = new Zend_Http_Client();

    	// 设置 URI 为 Slashdot的主feed地址
    	$http->setUri('http://rss.slashdot.org/Slashdot/slashdot');

    	// 获得feed
    	$slashdot = $http->get();

    	// 现在获取 BBC 的新闻 feed
    	$http->setUri('http://newsrss.bbc.co.uk/rss/newsonline_world_edition/technology/rss.xml');

    	// 获得feed
    	$bbc = $http->get();
    	?>

### 13.1.4. 改变HTTP timeout时间

`Zend_Http_Client::setTimeout()` 允许你为HTTP连接设置 timeout 时间 （以秒为单位）.

| 注意
默认的 timeout 为10秒.

### 13.1.5. 动态指定HTTP Header

使用 `Zend_Http_Client::setHeaders()` 函数, 传递一个header的 数组 .

| 重要
Header一定要遵循如下格式: ``Header: value``

### 13.1.6. 构造 HTTP POST, PUT, 和 DELETE 请求

执行 HTTP POST, PUT, 和 DELETE 请求是非常容易的， 在 `Zend_Http_Client`里我们可以通过如下三个函数分别实现 : `post()`, `put()`, 和 `delete()`. `post()` 和 `put()` 方法分别使用一个简单的字符串作为参数, 参数的字符串应该是一段经过适当编码的信息, 就像下面这条: `name=value&foo=bar`. `delete()` 方法没有参数 .

例 13.5. 用Zend_Http_Client发送POST 数据

    <?php
    	require_once 'Zend/Http_Client.php';

    	// 实例化客户端对象
    	$http = new Zend_Http_Client();

    	// 设置 URI 到一个POST数据Processor地址
    	$http->setUri('http://example.org/post/processor');

    	// 保存指定的 GET 变量作为HTTP POST 数据
    	$postData = 'foo=' . urlencode($_GET['foo']) . '&bar=' . urlencode($_GET['bar']);

    	// 创建 HTTP POST 请求并保存 HTTP response
    	$httpResponse = $http->post($postData);
    	?>

创建一个 PUT 请求和在上面例子里创建一个POST请求一样; 就是用 `put()` 方法来替换 `post()`.

上一页 |  | 下一页
12.9. Catching Gdata Exceptions | 起始页 | 13.2. Zend_Http_Client - Advanced Usage