Zend_Http_Client.xml 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <sect1 id="zend.http.client">
  2. <title>Zend_Http_Client - 介绍</title>
  3. <sect2 id="zend.http.client.introduction">
  4. <title>介绍</title>
  5. <para>
  6. Zend_Http_Client 提供了一个简单的界面来执行HTTP请求。Zend_Http_Client 支持
  7. 作为一个 HTTP 客户端应有的大多数简单功能,也包括象HTTP认证和文件上传等更加
  8. 复杂的功能。成功的请求和大多数失败的请求将返回一个 Zend_Http_Response 对象,
  9. 该对象提供了对响应的头部信息和主体信息的访问。
  10. (见<xref linkend="zend.http.response" />)
  11. </para>
  12. <para>
  13. 构造器类可选的第一个参数可以是一个URL(字符串或者 Zend_Uri_Http 对象),
  14. 第二个可选参数是一个包含配置参数的数组。这两个参数也可以全空,之后由
  15. setUri()和setConfig()方法提供。
  16. <example id="zend.http.client.introduction.example-1">
  17. <title>初始化一个 Zend_Http_Client 对象</title>
  18. <programlisting role="php"><![CDATA[
  19. $client = new Zend_Http_Client('http://example.org', array(
  20. 'maxredirects' => 0,
  21. 'timeout' => 30));
  22. // 上述代码和下面的代码是两种不同的写法
  23. $client = new Zend_Http_Client();
  24. $client->setUri('http://example.org');
  25. $client->setConfig(array(
  26. 'maxredirects' => 0,
  27. 'timeout' => 30));
  28. ]]>
  29. </programlisting>
  30. </example>
  31. </para>
  32. </sect2>
  33. <sect2 id="zend.http.client.configuration">
  34. <title>配置参数</title>
  35. <para>
  36. 构造器和 setConfig() 方法接受一个复合的配置参数数组,因为这些配置参数
  37. 有一个缺省值,所以是否配置这些参数都是可选的。
  38. <table id="zend.http.client.configuration.table">
  39. <title>Zend_Http_Client 配置参数</title>
  40. <tgroup cols="4">
  41. <thead>
  42. <row>
  43. <entry>参数</entry>
  44. <entry>描述</entry>
  45. <entry>值的类型</entry>
  46. <entry>缺省值</entry>
  47. </row>
  48. </thead>
  49. <tbody>
  50. <row>
  51. <entry>maxredirects</entry>
  52. <entry>随后的重定向的最大值 (0 = none)</entry>
  53. <entry>整数</entry>
  54. <entry>5</entry>
  55. </row>
  56. <row>
  57. <entry>strict</entry>
  58. <entry>是否执行头部名称的确认,当设置为 False 时,将忽略确认,通常情况下不应改变这个参数的值。</entry>
  59. <entry>布尔值</entry>
  60. <entry>true</entry>
  61. </row>
  62. <row>
  63. <entry>strictredirects</entry>
  64. <entry>重定向时是否严格遵守 RFC (见 <xref linkend="zend.http.client.redirections" />)</entry>
  65. <entry>布尔值</entry>
  66. <entry>false</entry>
  67. </row>
  68. <row>
  69. <entry>useragent</entry>
  70. <entry>用户代理的识别字符串(含在请求的头部信息内)</entry>
  71. <entry>字符串</entry>
  72. <entry>'Zend_Http_Client'</entry>
  73. </row>
  74. <row>
  75. <entry>timeout</entry>
  76. <entry>连接超时 (单位是秒)</entry>
  77. <entry>整数</entry>
  78. <entry>10</entry>
  79. </row>
  80. <row>
  81. <entry>httpversion</entry>
  82. <entry>HTTP 协议版本 (通常是 '1.1' 或 '1.0')</entry>
  83. <entry>字符串</entry>
  84. <entry>'1.1'</entry>
  85. </row>
  86. <row>
  87. <entry>adapter</entry>
  88. <entry>连接适配器类时使用(见 <xref linkend="zend.http.client.adapters" />)</entry>
  89. <entry>多种类型</entry>
  90. <entry>'Zend_Http_Client_Adapter_Socket'</entry>
  91. </row>
  92. <row>
  93. <entry>keepalive</entry>
  94. <entry>是否允许与服务器之间的 keep-alive 连接。如果在同一台服务器上
  95. 执行几个互相关联的请求时,keep-alive 连接是有用的而且有可能提高性能。</entry>
  96. <entry>布尔值</entry>
  97. <entry>false</entry>
  98. </row>
  99. <row>
  100. <entry>storeresponse</entry>
  101. <entry>是否保存上次的响应结果,以备今后使用getLastResponse()重新获取。如果设置为 false,getLastResponse() 将返回空。</entry>
  102. <entry>布尔值</entry>
  103. <entry>true</entry>
  104. </row>
  105. </tbody>
  106. </tgroup>
  107. </table>
  108. </para>
  109. </sect2>
  110. <sect2 id="zend.http.client.basic-requests">
  111. <title>执行基本 HTTP 请求</title>
  112. <para>
  113. 使用 request() 方法执行简单 HTTP 请求是件非常容易的事情,3行代码即可搞定:
  114. <example id="zend.http.client.basic-requests.example-1">
  115. <title>执行一个简单的 GET 请求</title>
  116. <programlisting role="php"><![CDATA[
  117. $client = new Zend_Http_Client('http://example.org');
  118. $response = $client->request();
  119. ]]>
  120. </programlisting>
  121. </example>
  122. request() 带一个可选的参数 - 请求方法,它可以是 GET, POST, PUT, HEAD,
  123. DELETE, TRACE, OPTIONS 或 CONNECT 等由 HTTP 协议定义的方法。
  124. <footnote>
  125. <para>
  126. 见 RFC 2616 - <ulink url="http://www.w3.org/Protocols/rfc2616/rfc2616.html" />.
  127. </para>
  128. </footnote>.
  129. 为了方便起见,这些都被定义为类的常量:即
  130. Zend_Http_Request::GET, Zend_Http_Request::POST 等等。
  131. </para>
  132. <para>
  133. 如果没有指定请求方法,则使用最后一次 setMethod() 设定的请求方法。
  134. 如果从未使用 setMethod(),那么缺省的请求方法是 GET(见上述的例子)。
  135. <example id="zend.http.client.basic-requests.example-2">
  136. <title>使用 GET 以外的请求方法</title>
  137. <programlisting role="php"><![CDATA[
  138. // 执行一个 POST 请求
  139. $response = $client->request('POST');
  140. // 另外一种执行 POST 请求的方式
  141. $client->setMethod(Zend_Http_Client::POST);
  142. $response = $client->request();
  143. ]]>
  144. </programlisting>
  145. </example>
  146. </para>
  147. </sect2>
  148. <sect2 id="zend.http.client.parameters">
  149. <title>添加 GET 和 POST 参数 </title>
  150. <para>
  151. 在一个HTTP请求中添加GET参数是非常简单的,既可以通过把参数指定为
  152. URL的一部分,也可以通过使用 setParameterGet() 方法来添加。这个方
  153. 法把把GET参数的名称作为它的第一个参数,把GET参数的值作为它的第二
  154. 个参数。为了方便起见,setParameterGet() 方法也能接受单个复合数组
  155. (名称 => 值)的 GET 参数,这种方式对于需要设置几个 GET 参数时更
  156. 加方便。
  157. <example id="zend.http.client.parameters.example-1">
  158. <title>设置 GET 参数</title>
  159. <programlisting role="php"><![CDATA[
  160. // 使用 setParameterGet 方法设置一个 GET 参数
  161. $client->setParameterGet('knight', 'lancelot');
  162. // 设置 URL 的等效方法
  163. $client->setUri('http://example.com/index.php?knight=lancelot');
  164. // 一次添加几个参数
  165. $client->setParameterGet(array(
  166. 'first_name' => 'Bender',
  167. 'middle_name' => 'Bending'
  168. 'made_in' => 'Mexico',
  169. ));
  170. ]]>
  171. </programlisting>
  172. </example>
  173. </para>
  174. <para>
  175. 虽然 GET 参数可以和任何请求方法一起发送,但 POST 参数只能在 POST
  176. 请求内发送。给一个请求添加 POST 参数与添加 GET 参数非常类似,是由
  177. setParameterPost() 方法完成的,该方法在结构上与 setParameterGet()
  178. 方法很相似。
  179. <example id="zend.http.client.parameters.example-2">
  180. <title>设置 POST 参数</title>
  181. <programlisting role="php"><![CDATA[
  182. // 设置一个 POST 参数
  183. $client->setParameterPost('language', 'fr');
  184. // 设置几个 POST 参数,其中的一个参数有几个值
  185. $client->setParameterPost(array(
  186. 'language' => 'es',
  187. 'country' => 'ar',
  188. 'selection' => array(45, 32, 80)
  189. ));
  190. ]]>
  191. </programlisting>
  192. </example>
  193. 需要注意的是,当发送 POST 请求时,即可设置GET参数,也可设置POST参数。
  194. 另一方面,如果针对一个非 POST 请求设置 POST 参数,将不会被触发或给出
  195. 报错,因为它是没有用的。除非请求是一个 POST 请求,POST 参数都会被简
  196. 单地忽略掉。
  197. </para>
  198. </sect2>
  199. <sect2 id="zend.http.client.accessing_last">
  200. <title>访问最后一次的请求和响应</title>
  201. <para>
  202. Zend_Http_Client 提供了访问客户端最后一次发送的请求和访问客户端最后
  203. 一次接收到的响应的方法。
  204. <code>Zend_Http_Client->getLastRequest()</code> 不需要设置参数,同时
  205. 返回最后一次客户端发送的HTTP请求字符串。同样,
  206. <code>Zend_Http_Client->getLastResponse()</code> 返回客户端接收到的
  207. 最后一次<link linkend="zend.http.response">Zend_Http_Response</link> 对象。
  208. </para>
  209. </sect2>
  210. </sect1>
  211. <!--
  212. vim:se ts=4 sw=4 et:
  213. -->