php的curl封裝類
轉自:::: http://www.cnblogs.com/freephp/p/4962591.html
之前一直做爬蟲相關的,每次自己去寫一系列curl_setopt()函式太繁瑣,我於是封裝瞭如下curl請求類。
<?php
/**
* @author freephp
* @date 2015-11-13
*
*/
class MyCurl {
private static $url = ''; // 訪問的url
private static $oriUrl = ''; // referer url
private static $data = array(); // 可能發出的資料 post,put
private static $method; // 訪問方式,預設是GET請求
public static function send($url, $data = array(), $method = 'get') {
if (!$url) exit('url can not be null');
self::$url = $url;
self::$method = $method;
$urlArr = parse_url($url);
self::$oriUrl = $urlArr['scheme'] .'://'. $urlArr['host'];
self::$data = $data;
if ( !in_array(
self::$method,
array('get', 'post', 'put', 'delete')
)
) {
exit('error request method type!');
}
$func = self::$method . 'Request';
return self::$func(self::$url);
}
/**
* 基礎發起curl請求函式
* @param int $is_post 是否是post請求
*/
private function doRequest($is_post = 0) {
$ch = curl_init();//初始化curl
curl_setopt($ch, CURLOPT_URL, self::$url);//抓取指定網頁
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
// 來源一定要設定成來自本站
curl_setopt($ch, CURLOPT_REFERER, self::$oriUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求結果為字串且輸出到螢幕上
if($is_post == 1) curl_setopt($ch, CURLOPT_POST, $is_post);//post提交方式
if (!empty(self::$data)) {
self::$data = self::dealPostData(self::$data);
curl_setopt($ch, CURLOPT_POSTFIELDS, self::$data);
}
$data = curl_exec($ch);//執行curl
curl_close($ch);
return $data;
}
/**
* 發起get請求
*/
public function getRequest() {
return self::doRequest(0);
}
/**
* 發起post請求
*/
public function postRequest() {
return self::doRequest(1);
}
/**
* 處理髮起非get請求的傳輸資料
*
* @param array $postData
*/
public function dealPostData($postData) {
if (!is_array($postData)) exit('post data should be array');
foreach ($postData as $k => $v) {
$o .= "$k=" . urlencode($v) . "&";
}
$postData = substr($o, 0, -1);
return $postData;
}
/**
* 發起put請求
*/
public function putRequest($param) {
return self::doRequest(2);
}
/**
* 發起delete請求
*/
public function deleteRequest($param) {
return self::doRequest(3);
}
}
/* $curl = new MyCurl('http://www.jumei.com',array(), 'get');
$res = $curl->send(); */
$res = MyCurl::send('http://www.ipip.net/ip.html',array('ip' => '61.142.206.145'),'post');
var_dump($res);die();
考慮到可能會有迴圈呼叫的可能和高併發,為了減少記憶體堆的不必要消耗,我只對客戶端呼叫提供靜態方法。為了類的單一職責,MyCurl只做發請求和返回data的作用,對返回資料的處理交給其他程式碼。
相關文章
- php用curl封裝一個http請求類(鏈式呼叫)PHP封裝HTTP
- 萬能PHP Curl封裝類,適合多個場景,呼叫方便!PHP封裝
- linux + php 安裝curlLinuxPHP
- 封裝 PHP curl http 請求 (全) Composer 安裝 httpbuilder,支援 GET,POST,PUT,DELETE封裝PHPHTTPUIdelete
- php封裝db 類連線sqlite3PHP封裝SQLite
- PHP封裝的一個單例模式Mysql操作類PHP封裝單例模式MySql
- php圖片水印新增,壓縮,剪下的封裝類PHP封裝
- php的curlPHP
- jwt是什麼?php jwt類封裝和使用JWTPHP封裝
- 一、類的封裝性封裝
- 封裝xunsearch類封裝
- JS 封裝類JS封裝
- php函式封裝PHP函式封裝
- PHP,CURL和你的安全!PHP
- PHP下的cURL庫PHP
- php curl使用PHP
- 封裝JDBC—非框架開發必備的封裝類封裝JDBC框架
- 十五、類與封裝的概念封裝
- http通訊類的封裝HTTP封裝
- 封裝Date工具類封裝
- JsonValue 封裝類JSON封裝
- 封裝Redis工具類封裝Redis
- PHP 中 CURL 使用之 CURL 詳解!PHP
- 【CURL】PHP的CURL開發專案最佳實踐PHP
- php curl的使用心得PHP
- 初試php中的curlPHP
- 15_類與封裝的概念封裝
- PHP curl 請求PHP
- PHP CURL詳解PHP
- c#封裝DBHelper類C#封裝
- 4、類和物件—封裝物件封裝
- 自用驗證類封裝封裝
- 封裝獲取Class類封裝
- 關於php面向的特性之封裝PHP封裝
- Ubuntu Linux下為PHP5安裝cURLUbuntuLinuxPHP
- 給PHP安裝和開啟curl擴充套件PHP套件
- 基於javascript的拖拽類封裝^o^JavaScript封裝
- php curl引數大全PHP