目录
Zend_Http_Client
为那些需要执行HTTP请求的程序提供了一个简单的接口.
Zend_Http_Client
可以执行 GET, POST, PUT 和 DELETE 请求.
注意 | |
---|---|
默认情况下Zend_Http_Client 将追踪 5 次 HTTP 重定向. 要改变这个行为,
可以传入允许重定向的最大数量到get() 的方法
|
例 8.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>'; } ?>
Zend_Http_Client
的构造函数创建一个Zend_Http_Client
的实例来发送HTTP请求.
当在单个URL上使用 Zend_Http_Client
时, 大多数情况下你可以提供URL
和相应的头部信息到构造函数, 比如下面的例子:
例 8.2. 创建一个基本的Zend_Http_Client
<?php require_once 'Zend/Http_Client.php'; // 指定URL和一个简单的header信息 $http = new Zend_Http_Client('http://example.org', 'Accept: text/html'); ?>
例 8.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,
参考 第 8.1.3 节 “发送请求到多个域名”
Zend_Http_Client
支持发送请求到多个域名,
用 Zend_Http_Client::setUri()
函数来设定要查询的URL.
注意 | |
---|---|
当查询多个RSS feed时,这是一个非常好的用法. |
例 8.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(); ?>
Zend_Http_Client::setTimeout()
允许你为HTTP连接设置 timeout 时间
(以秒为单位).
注意 | |
---|---|
默认的 timeout 为10秒. |
使用 Zend_Http_Client::setHeaders()
函数, 传递一个header的 数组
.
重要 | |
---|---|
Header一定要遵循如下格式:
|
执行 HTTP POST, PUT, 和 DELETE 请求是非常容易的, 在 Zend_Http_Client
里我们可以通过如下三个函数分别实现
: post()
, put()
, 和 delete()
.
post()
和 put()
方法分别使用一个简单的字符串作为参数,
参数的字符串应该是一段经过适当编码的信息, 就像下面这条:
name=value&foo=bar
. delete()
方法没有参数
.
例 8.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()
.