第 15 章 Zend_Http

目录

15.1. Zend_Http_Client
15.1.1. 简介
15.1.2. 带有指定的HTTP头的基本 GET 请求
15.1.3. 发送请求到多个域名
15.1.4. 改变HTTP timeout时间
15.1.5. 动态指定HTTP Header
15.1.6. 构造 HTTP POST, PUT, 和 DELETE 请求
15.2. Zend_Http_Client - Advanced Usage
15.2.1. HTTP Redirections
15.2.2. Adding Cookies and Using Cookie Persistence
15.2.3. Setting Custom Request Headers
15.2.4. File Uploads
15.2.5. Sending Raw POST Data
15.2.6. HTTP Authentication
15.2.7. Sending Multiple Requests With the Same Client
15.3. Zend_Http_Client - Connection Adapters
15.3.1. Overview
15.3.2. The Socket Adapter
15.3.3. The Proxy Adapter
15.3.4. The Test Adapter
15.3.5. Creating your own connection adapters
15.4. Zend_Http_Cookie and Zend_Http_CookieJar
15.4.1. Introduction
15.4.2. Instantiating Zend_Http_Cookie Objects
15.4.3. Zend_Http_Cookie getter methods
15.4.4. Zend_Http_Cookie: Matching against a scenario
15.4.5. The Zend_Http_CookieJar Class: Instantiation
15.4.6. Adding Cookies to a Zend_Http_CookieJar object
15.4.7. Retrieving Cookies From a Zend_Http_CookieJar object
15.5. Zend_Http_Response
15.5.1. 简介

15.1. Zend_Http_Client

15.1.1. 简介

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

[注意] 注意

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

例 15.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>';
	}
	?>

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

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

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

例 15.2. 创建一个基本的Zend_Http_Client

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

例 15.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, 参考 第 15.1.3 节 “发送请求到多个域名”

15.1.3. 发送请求到多个域名

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

[注意] 注意

当查询多个RSS feed时,这是一个非常好的用法.

例 15.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();
	?>   

15.1.4. 改变HTTP timeout时间

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

[注意] 注意

默认的 timeout 为10秒.

15.1.5. 动态指定HTTP Header

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

[重要] 重要

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

15.1.6. 构造 HTTP POST, PUT, 和 DELETE 请求

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

例 15.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().