首页 > 开发 > PHP > 正文

PHP封装CURL扩展类实例

2024-05-04 23:38:10
字体:
来源:转载
供稿:网友

这篇文章主要介绍了PHP封装CURL扩展类,实例分析了基于curl发送post、get请求及操作cookie等相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了PHP封装CURL扩展类。分享给大家供大家参考。具体如下:

 

 
  1. <?php 
  2. /** 
  3. * @description: 封装CURL扩展 
  4. * @date: 2014-07-28 16:04 
  5. */ 
  6. /** 
  7. * @编码规范 
  8. * @class 类名首字母大写,类名为多个单词, 每个大字首字母大写 eg: class Curl , class CurlPage 
  9. * @variable 变量名小写, 变量名为多个单词, 每个单词小写,使用下划线_分割 eg: $curl_result 
  10. * @function 函数名与类名规则相同 eg: function SendRequest 
  11. * @params 函数形参规则与变量名相同 
  12. * @class-variable 成员变量,以下划线结尾,多个单词使用下划线分隔. eg: private $host_name_ 
  13. */ 
  14. /** 
  15. * @要求 
  16. * 
  17. */ 
  18. class Curl{ 
  19. /** 
  20. * @请求的host 
  21. */ 
  22. private $host_; 
  23. /** 
  24. * @curl 句柄 
  25. */ 
  26. private $ch_; 
  27. /** 
  28. * @超时限制时间 
  29. */ 
  30. const time_=5; 
  31. /** 
  32. * @请求的设置 
  33. */ 
  34. private $options_; 
  35. /** 
  36. * @保存请求头信息 
  37. */ 
  38. private $request_header_; 
  39. /** 
  40. * @保存响应头信息 
  41. */ 
  42. private $response_header_; 
  43. /** 
  44. * @body_ 用于保存curl请求返回的结果 
  45. */ 
  46. private $body_; 
  47. /** 
  48. * @读取cookie 
  49. */ 
  50. private $cookie_file_; 
  51. /** 
  52. * @写入cookie 
  53. */ 
  54. private $cookie_jar_; 
  55. /** 
  56. * @todo proxy 
  57. * @构造函数,初始化CURL回话 
  58. */ 
  59. public function Start($url){ 
  60. $this->ch_ = curl_init($url); 
  61. curl_setopt($this->ch_, CURLOPT_HEADER, 1); 
  62. curl_setopt($this->ch_, CURLOPT_RETURNTRANSFER , 1 ); 
  63. /** 
  64. * @返回响应头 
  65. */ 
  66. public function ResponseHeader($url){ 
  67. if (!function_exists('http_parse_headers')) { 
  68. function http_parse_headers ($raw_headers){ 
  69. $headers = array(); 
  70. foreach (explode("/n", $raw_headers) as $i => $h) { 
  71. $h = explode(':', $h, 2); 
  72. if (isset($h[1])) { 
  73. if(!isset($headers[$h[0]])) { 
  74. $headers[$h[0]] = trim($h[1]); 
  75. else if(is_array($headers[$h[0]])) { 
  76. $tmp = array_merge($headers[$h[0]],array(trim($h[1]))); 
  77. $headers[$h[0]] = $tmp; 
  78. else { 
  79. $tmp = array_merge(array($headers[$h[0]]),array(trim($h[1]))); 
  80. $headers[$h[0]] = $tmp; 
  81. return $headers; 
  82. $this->Start($url); 
  83. curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_); 
  84. $this->body_=$this->Execx(); 
  85. $header_size = curl_getinfo($this->ch_, CURLINFO_HEADER_SIZE); 
  86. $this->response_header_ = substr($this->body_, $start = 0, $offset = $header_size); 
  87. $this->response_header_ = http_parse_headers($this->response_header_); 
  88. print_r($this->response_header_); 
  89. return $this->Close($this->body_); 
  90. /** 
  91. * @读取cookie 
  92. */ 
  93. public function LoadCookie($url,$cookie_file){ 
  94. $this->Start($url); 
  95. curl_setopt($this->ch_, CURLOPT_COOKIE, 1); 
  96. curl_setopt($this->ch_, CURLOPT_COOKIEFILE , $cookie_file); 
  97. $this->body_=$this->Execx(); 
  98. return $this->Close($this->body_); 
  99. /** 
  100. * @写入cookie 
  101. */ 
  102. public function SaveCookie($url){ 
  103. $this->Start($url); 
  104. curl_setopt($this->ch_, CURLOPT_COOKIE, 1); 
  105. curl_setopt($this->ch_, CURLOPT_COOKIEFILE ,'cookie.txt'); 
  106. curl_setopt($this->ch_, CURLOPT_COOKIEJAR , 'cookie.txt'); 
  107. $this->body_=$this->Execx(); 
  108. return $this->Close($this->body_); 
  109. /** 
  110. * @设置HEADER 
  111. */ 
  112. public function SetHeader($headers = null){ 
  113. if (is_array($headers) && count($headers) > 0) { 
  114. curl_setopt($this->ch_, CURLOPT_HTTPHEADER, $headers); 
  115. /** 
  116. * @GET请求 
  117. */ 
  118. public function Get($url, array $params = array()) { 
  119. if ($params) { 
  120. if (strpos($url, '?')) { 
  121. $url .= "&".http_build_query($params); 
  122. else { 
  123. $url .= "?".http_build_query($params); 
  124. $this->Start($url); 
  125. curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_); 
  126. if (strpos($url, 'https') === 0) { 
  127. curl_setopt($this->ch_, CURLOPT_SSL_VERIFYHOST, 0); 
  128. curl_setopt($this->ch_, CURLOPT_SSL_VERIFYPEER, 0); 
  129. $this->body_=$this->Execx(); 
  130. return $this->Close($this->body_); 
  131. /** 
  132. * @POST请求 
  133. */ 
  134. public function Post($url, array $params = array()) { 
  135. $this->Start($url); 
  136. curl_setopt($this->ch_, CURLOPT_SSL_VERIFYPEER, 0); 
  137. curl_setopt($this->ch_, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded")); 
  138. curl_setopt($this->ch_, CURLOPT_POST, true); 
  139. curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_); 
  140. if ($params) { 
  141. curl_setopt($this->ch_, CURLOPT_POSTFIELDS, http_build_query($params)); 
  142. $this->body_=$this->Execx(); 
  143. return $this->Close($this->body_); 
  144. /** 
  145. * @tips: google http head 方法 
  146. */ 
  147. public function Head($url, array $params = array()) { 
  148. $this->Start($url); 
  149. curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_); 
  150. curl_setopt($this->ch_, CURLOPT_RETURNTRANSFER , 0); 
  151. curl_setOpt($this->ch_,CURLOPT_NOBODY, true); 
  152. $this->body_=$this->Execx(); 
  153. return $this->Close($this->body_); 
  154. /** 
  155. * @执行CURL会话 
  156. */ 
  157. public function Execx(){ 
  158. return curl_exec($this->ch_); 
  159. /** 
  160. * @关闭CURL句柄 
  161. */ 
  162. public function Close($body_){ 
  163. if ($body_ === false) { 
  164. echo "CURL Error: " . curl_error($body_); 
  165. return false
  166. curl_close($this->ch_); 
  167. return $body_; 

希望本文所述对大家的php程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表