## **Curl類**
~~~
class Curls extends Controller
{
private static $url = ''; // 訪問的url
private static $oriUrl = ''; // Referer url,告訴服務器來源頁面
private static $data = array(); // 可能發出的請求參數 get和post都有數組傳參方式
private static $method; // 訪問方式,默認是GET請求
private static $cookie = ''; // 是否傳遞cookie; 默認為空, 需要時傳入cookie參數
private static $returnCookie = 0; // 是否返回cookie; 默認0不返回
/*
* 發送請求入口
* **/
public static function send($url, $data = array(), $method = 'get', $cookie = '', $returnCookie = 0)
{
//判斷傳入的url
if (!$url){
return self::output('100', 'url不能為空!', '');
}
self::$url = $url;
self::$data = $data;
self::$method = $method;
self::$oriUrl = request()->url(true);//助手函數request獲取當前url
self::$cookie = $cookie;
self::$returnCookie = $returnCookie;
// 請求方式判斷
if ( !in_array(self::$method, array('get', 'post') )) {
return self::output('101', '非法請求方式!', '');
}
return self::doRequest(self::$method);
}
/**
* 基礎發起curl請求函數
* @param string $method 請求方式, get或者post
*/
private static function doRequest($method)
{
$curl = curl_init(); //初始化curl
/* get方式 */
if ($method != 1) {
self::$data = empty(self::$data) ? '' : self::dealGetData(self::$data);//處理get數據
self::$url = self::$url.self::$data;
}
curl_setopt($curl, CURLOPT_URL, self::$url); //抓取指定網頁
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
curl_setopt($curl, CURLOPT_REFERER, self::$oriUrl); //來源,獲取的當前站點url
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求結果為字符串且輸出到屏幕上
/* post方式數據傳遞 */
if ($method == 1)
{
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query(self::$data));
}
/* 如果提交了cookie參數, 傳遞cookie參數 */
if(self::$cookie) {
curl_setopt($curl, CURLOPT_COOKIE, self::$cookie);
}
curl_setopt($curl, CURLOPT_HEADER, self::$returnCookie); //是否返回cookie
curl_setopt($curl, CURLOPT_TIMEOUT, 30); //超時設置
/* 執行并獲取數據 */
$result = curl_exec($curl);
/* 出錯時的操作 */
$error_num = curl_error($curl); // 獲取錯誤碼,正常時為0
//出錯時
if ($error_num >0){
$error = include 'cURLError.php'; //載入錯誤信息
$error_msg = $error[$error_num]; //獲取對應錯誤信息
return self::output($error_num, $error_msg, '');
} else {
$error_num = '0';
$error_msg = "請求正常!";
curl_close($curl); //關閉
/* 如果返回cookie */
if(self::$returnCookie){
list($header, $body) = explode("\r\n\r\n", $result, 2);
preg_match_all("/Set\-Cookie:([^;]*);/", $header, $matches);
$info['cookie'] = substr($matches[1][0], 1);
$info['content'] = $body;
return self::output($error_num, $error_msg, $info);
} else {
return self::output($error_num, $error_msg, $result);
}
}
}
/*
* 處理get數據
* @param array $data 傳入的需要處理的數據
* @return string 包含參數與值的字符串
* **/
public static function dealGetData($data)
{
$output = '?';
foreach ($data as $k => $v){
$output .= $k.'='.$v.'&';
}
$output = substr($output, 0 , -1);
return $output;
}
/*
* 返回數據
* @param int $code 狀態碼,為0時是ok的沒有出錯正常請求
* @param string $info 返回的錯誤信息
* @param array $result 返回的數據
* @return array
* **/
public static function output($code, $info, $result)
{
return array(
'code' => $code,
'info' => $info,
'result' => $result
);
}
}
~~~
- 公共頁面js
- 公共頁面添加js
- 公共頁面編輯js
- 公共頁面列表js
- 文件上傳方法
- 分類相關
- 獲取ip
- Response類
- Curl類
- JWT
- tp5.1下redis的使用
- tp5.1使用RabbitMQ
- tp5.1+easywechat相關
- tp5.1+easywechat實現小程序登錄
- uniapp頁面
- tp控制器
- git相關操作
- php文件操作
- 大文件上傳
- laravel隊列
- 1.安裝laravel并進行相關配置
- nginx反向代理解決微信公眾號,小程序,微信支付域名限制,回調
- readme
- do
- 雜項
- cas單點登錄
- tp6跨域(中間件不起作用版)
- php算法
- 冒泡排序
- knn算法
- 使用es
- 使用mongdb
- tp6+rabbirmq
- 一些問題
- php文件操作/文件操作的一些方法
- 客戶端請求相關