<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 函數集目錄 [TOC=2,3] * * * * * * * * * * * * * * * - ## 接口:遠程請求api函數1 * * * * * >[info]#### 1.遠程請求api函數(支持:GET、POST、POST[json]、http/https)【curl_api】 ~~~ <?php /** * 遠程CURL請求API函數(支持:GET、POST、POST[json]、http/https,并進行日志記錄) * @param Array $params 請求的信息數組 * 接口請求錯誤:status=100 data:服務器錯誤信息 * 接口正常響應:status=200 data:接口信息 */ function curl_api($params = array()) { $params = array( 'url' => $params['url'], // 必須有 請求的地址 'request_data' => $params['request_data']?:'', //要傳輸的數據 'type' => $params['type'] ? : 'GET', // POST/GET/post/get 默認為GET 'json' => $params['json'] ? : FALSE, // 是否json數據傳輸(POST下有效),默認為非json 'timeout' => $params['timeout'] ? : 30, // 超時時間,默認為30s 'debug' => $params['debug'] ? : FALSE,//是否打印詳細信息,默認關閉 'log' => $params['log'] ? : FALSE,// 默認關閉日志(日志輸出) 'log_title' => $params['log_title'] ? : '',// 日志標題 'log_name' => $params['log_name'] ? : 'log',// 日志文件名 'log_dir' => $params['log_dir'] ? : '',// 日志路徑 ); $type = strtoupper($params['type']); $params['request_data'] = $type == 'POST' && $params['json'] ? json_encode($params['request_data']) : http_build_query($params['request_data']); $option_arr = array(); $response_data = array(); $option_arr = array( CURLOPT_URL => $params['url'], CURLOPT_FOLLOWLOCATION => TRUE, CURLOPT_RETURNTRANSFER => TRUE, // 要求結果為字符串且輸出到屏幕上 CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0", // 模擬瀏覽器類型 CURLOPT_MAXREDIRS => 5, CURLOPT_CONNECTTIMEOUT => 30, CURLOPT_TIMEOUT => $params['timeout'], CURLOPT_SSL_VERIFYPEER => FALSE, // 對認證證書來源的檢查 支持https CURLOPT_SSL_VERIFYHOST => FALSE, CURLOPT_POST => $type == 'POST' ? TRUE : FALSE, CURLOPT_HTTPHEADER => $type == 'POST' && $params['json'] ? array( "Content-type: application/json;charset=utf-8" ) : array(), CURLOPT_POSTFIELDS => $params['request_data'] ); $ch = curl_init(); curl_setopt_array($ch, $option_arr); $response_data = curl_exec($ch); $curl_no = curl_errno($ch); $curl_or = curl_error($ch); //$curl_info = curl_getinfo($ch); $response_data = ! empty($response_data) && ! is_null(json_decode($response_data)) ? json_decode($response_data, true) : $response_data; curl_close($ch); if ($curl_no > 0) { $response_data = array('status' => 100,'data' => 'errorCode(' . $curl_no . ')' . $curl_or); } else{ $response_data = array('status' => 200,'data' => $response_data); } $log_content=''; if($params['log']){ $log_content=''; $log_content .= "【CURL請求開始】:{$params['log_title']}\n"; $log_content .= '【請 求 時 間 】:'.date("Y-m-d H:i:s").'\n'; $log_content .= "【請 求 URL 】:{$params['url']}\n"; $log_content .= "【請 求 數 據】:\n"; $log_content .= $params['json']?$params['request_data']:json_encode($params['request_data']); $log_content .= "【響 應 數 據】:\n"; $log_content .= print_r($response_data, true); $log_content .= "【CURL請求結束】:\n"; $this->Share->_write_log($params['log_name'], $params['log_dir'], $log_content); } if ($params['debug']) { // 輸出請求、響應數據 echo $log_content; } return $response_data; } ~~~ >[info]#### 2. 測試 - #### 函數使用 ~~~ $data=array( 'username'=>'5555@qq.com', 'password'=>'1234567', ); $params=array( 'url' => "http://www.ityangss.com.xx.cc/test/curl/info.php", // 必須有 'request_data' => $data, // 必須有 'type' => 'POST', // 默認為GET 'json' => true, // 默認為非json 'timeout' => 30,// 默認為30s 'debug' => true,// 默認關閉調試(信息輸出) ); curl_api($params); ~~~ * * * * * * * * * * * * * * * - ## 接口:遠程請求api函數2 * * * * * >[info]#### 1.遠程請求api函數(支持:GET、POST、POST[json]、http/https)【curl_api】 ~~~ /** * 遠程請求api函數(支持:GET、POST、POST[json]、http/https) * @param string $url 請求的地址 * @param string $type POST/GET/post/get * @param array $request_data 要傳輸的數據 * @param int $timeout 超時時間 * @param int $json 是否json數據傳輸(POST下可以) * @param int debug 是否打印詳細信息,默認關閉 */ function curl_api($params = array()) { $params = array( 'url' => $params['url'], // 必須有 'request_data' => $params['request_data'], // 必須有 'type' => $params['type'] ? : 'GET', // 默認為GET 'json' => $params['json'] ? : FALSE, // 默認為非json 'timeout' => $params['timeout'] ? : 30, // 默認為30s 'debug' => $params['debug'] ? : FALSE,// 默認關閉調試(信息輸出) ); $type = strtoupper($params['type']); $params['request_data'] = $type == 'POST' && $params['json'] ? json_encode($params['request_data']) : http_build_query($params['request_data']); $option_arr = array(); $response_data = array(); $option_arr = array( CURLOPT_URL => $params['url'], CURLOPT_FOLLOWLOCATION => TRUE, CURLOPT_RETURNTRANSFER => TRUE, // 要求結果為字符串且輸出到屏幕上 CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0", // 模擬瀏覽器類型 CURLOPT_MAXREDIRS => 5, CURLOPT_CONNECTTIMEOUT => 30, CURLOPT_TIMEOUT => $params['timeout'], CURLOPT_SSL_VERIFYPEER => FALSE, // 對認證證書來源的檢查 支持https CURLOPT_SSL_VERIFYHOST => FALSE, CURLOPT_POST => $type == 'POST' ? TRUE : FALSE, CURLOPT_HTTPHEADER => $type == 'POST' && $params['json'] ? array( "Content-type: application/json;charset=utf-8" ) : array(), CURLOPT_POSTFIELDS => $params['request_data'] ); $ch = curl_init(); curl_setopt_array($ch, $option_arr); $response_data = curl_exec($ch); $curl_no = curl_errno($ch); $response_data = ! empty($response_data) && ! is_null(json_decode($response_data)) ? json_decode($response_data, true) : $response_data; if ($curl_no) { // 請求錯誤 $response_data = array( 'status' => 100, 'data' => 'errorCode(' . $curl_no . '):' . curl_error($ch) ); } else { $response_data = is_array($response_data) ? array( 'status' => 200, 'data' => $response_data ) : array( 'status' => 101, 'data' => $response_data ); } if ($params['debug']) { // 輸出請求、響應數據 echo "=====request data======<br/>"; echo "<pre>"; print_r($params['request_data']); echo "</pre>"; echo "<br/>=====request info=====<br/>"; echo "<pre>"; print_r(curl_getinfo($ch)); echo "</pre>"; echo "<br/>=====response data=====<br/>"; echo "<pre>"; print_r($response_data); echo "</pre>"; } curl_close($ch); return $response_data; } ~~~ >[info]#### 2. 測試 - #### 函數使用 ~~~ $data=array( 'username'=>'5555@qq.com', 'password'=>'1234567', ); $params=array( 'url' => "http://www.ityangss.com.xx.cc/test/curl/info.php", // 必須有 'request_data' => $data, // 必須有 'type' => 'POST', // 默認為GET 'json' => true, // 默認為非json 'timeout' => 30,// 默認為30s 'debug' => true,// 默認關閉調試(信息輸出) ); curl_api($params); ~~~ - #### 函數結果 ~~~ =====request data====== {"username":"5555@qq.com","password":"1234567"} =====request info===== Array ( [url] => http://www.ityangss.com.xx.cc/test/curl/info.php [content_type] => text/html [http_code] => 200 [header_size] => 184 [request_size] => 280 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.157 [namelookup_time] => 0 [connect_time] => 0.016 [pretransfer_time] => 0.016 [size_upload] => 45 [size_download] => 45 [speed_download] => 286 [speed_upload] => 286 [download_content_length] => 45 [upload_content_length] => 45 [starttransfer_time] => 0.157 [redirect_time] => 0 [redirect_url] => [primary_ip] => 47.90.92.56 [certinfo] => Array ( ) [primary_port] => 80 [local_ip] => 192.168.2.102 [local_port] => 64123 ) =====response data===== Array ( [status] => 200 [data] => Array ( [username] => 5555@qq.com [password] => 1234567 ) ) ~~~ * * * * * * * * * * * * * * * - ## 接口:遠程請求api函數3 * * * * * >[info]#### 1.遠程請求api函數3【curl_api】 ~~~ /** * 遠程請求(支持post,get,json) * @param: $url 請求地址 * @param: $data 數組 * @param: $options 請求頭 * @param: $method 請求方式 * @param: $method 是否json請求 * @author: ityangs<ityangs@163.com> */ function curl_api($url, array $data = NULL, array $options = array(), $method='get', $json=false) { $datas= $method=='post' && $json ? json_encode($data) : http_build_query($data); $options=$method=='post' && $json ? $options + array('Content-Type: application/json;charset=utf-8') : $options; $defaults = $method=='post'? array( CURLOPT_POST => 1, CURLOPT_HEADER => 0, CURLOPT_URL => $url, CURLOPT_FRESH_CONNECT => 1, CURLOPT_RETURNTRANSFER => 1, CURLOPT_FORBID_REUSE => 1, CURLOPT_TIMEOUT => 300, CURLOPT_POSTFIELDS => $datas ) : array( CURLOPT_URL => $url. (strpos($url, '?') === FALSE ? '?' : ''). http_build_query($data), CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_TIMEOUT => 4 ); $ch = curl_init(); curl_setopt_array($ch, ($options + $defaults)); if( ! $result = curl_exec($ch)) { trigger_error(curl_error($ch)); } curl_close($ch); return $result; } ~~~ >[info]#### 2. 測試 - #### 函數使用 ~~~ $header = array( 'User-Auth:'.$this->user_auth ); curl($url,$request_data,array(CURLOPT_HTTPHEADER=>$header),'post',true); ~~~ * * * * * * * * * * * * * * * - ## 接口:遠程請求api函數4 * * * * * >[info]#### 1.遠程請求api函數4【iCurl】 ~~~ /** * curl請求 * @param $url * @param null $data 發送數據 如果發送數據是數組,建議進行http_build_query處理成字符串以便更高的兼容性 * @param string $method 請求方法 * @param array $headers 請求頭 鍵值對數組,如: array('Content-Type' => 'text/html; charset=utf-8'),兼容array('Content-Type:text/html; charset=utf-8') * @param array $options 其他的標準的curl選項, 鍵值對數組,如array(CURLOPT_USERAGENT => 'wms-server'); * @param null $cookies 攜帶cookie 鍵值對數組或者標準cookie字符串都可以 * @param null $info 請求信息,包含絕大部分信息,出錯了可以看這個錯誤消息 * @return mixed|null */ function iCurl($url, $data = null, $method = 'get', array $headers = array(), array $options = array(), $cookies = null, &$info = null) { $method = strtoupper($method); if ($data) { if ($method == 'GET') { $data = is_array($data) ? http_build_query($data) : $data; $url = strpos($url, '?') !== false ? $url . '&' . $data : $url . '?' . $data;//get的參數直接拼接在url后面 $curl = curl_init($url); } else { $curl = curl_init($url); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } } else { $curl = curl_init($url); } //設置基本的選項 curl_setopt_array($curl, array( CURLOPT_TIMEOUT => 30, //超時時間 CURLOPT_CUSTOMREQUEST => $method,// 請求方法 CURLOPT_RETURNTRANSFER => true,// 返回內容 CURLOPT_HEADER => false,// 返回header CURLOPT_FOLLOWLOCATION => true,// 自動重定向 CURLOPT_MAXREDIRS => 10, //重定向最大次數 CURLOPT_SSL_VERIFYPEER => false,// 不校驗證書 )); //設置頭信息 if (!empty($headers)) { $_headers = []; foreach ($headers as $name => $value) { //處理成CURL可以識別的headers格式 $_headers[] = is_int($name) ? $value : $name . ':' . $value; //兼容已經拼好的字符串數組 } curl_setopt($curl, CURLOPT_HTTPHEADER, $_headers); } //設置cookie if (!empty($cookies)) { $_cookies = ''; if (is_array($cookies)) { foreach ($cookies as $name => $value) { $_cookies .= "{$name}={$value}; "; } } else { $_cookies = $cookies; } curl_setopt($curl, CURLOPT_COOKIE, $_cookies); } //其他特殊選項 if (!empty($options)) { curl_setopt_array($curl, $options); } //執行請求 $output = curl_exec($curl); $info = curl_getinfo($curl); //http狀態碼必須是200 才認為請求成功 if ($info['http_code'] != 200) { $info['error'] = curl_error($curl); $info['output'] = $output; //記錄詳細錯誤日志 get_instance()->Share->_write_log('log', 'curl', array('args'=>func_get_args(), 'curlInfo'=>$info)); $output = null; } curl_close($curl); return $output; } ~~~ >[info]#### 2. 測試 - #### 函數使用 ~~~ iCurl(config_item('ic_host') . config_item('ic_secret_key_url'),'get',array('Content-Type' => 'text/html; charset=utf-8')); ~~~ * * * * * * * * * * * * * * * - ## 下載文件:實現下載遠程文件保存到本地 * * * * * >[info]#### 1.實現下載遠程文件保存到本地【curl_get_file】 ~~~ /** * 實現下載遠程文件保存到本地[當保存文件名稱為空時則使用遠程文件原來的名稱] * @param unknown $url 文件url * @param string $save_dir 保存文件目錄 * @param string $filename 保存文件名稱 * @param number $type 使用的下載方式 * @return multitype:string number */ function curl_down($url,$save_dir='',$filename='',$type=0,$timeout=30){ $save_dir = iconv("utf-8","gb2312//IGNORE",$save_dir); $filename = iconv("utf-8","gb2312//IGNORE",$filename); if(trim($url)==''){ return array('status'=>400,'message'=>'文件下載地址為空!'); } if(trim($save_dir)==''){ $save_dir='./'; } if(trim($filename)==''){//保存文件名 $ext=strrchr($url,'.'); $filename=time().$ext; } if(0!==strrpos($save_dir,'/')){ $save_dir.='/'; } //創建保存目錄 if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){ return array('status'=>400,'message'=>'保存文件不能寫入!'); } //獲取遠程文件所采用的方法 if($type){ $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); $res=curl_exec($ch); curl_close($ch); }else{ ob_start(); readfile($url); $res=ob_get_contents(); ob_end_clean(); } $size=strlen($res); //文件大小 $fp2=@fopen($save_dir.$filename,'w'); fwrite($fp2,$res); fclose($fp2); unset($res,$url); return array('status'=>200,'file_name'=>$filename,'save_path'=>$save_dir.$filename); } ~~~ >[info]#### 2. 測試 - #### 函數使用 ~~~ curl_down("http://www.baidu.com/img/baidu_sylogo1.gif",'下載/下載/','下載.gif',0); ~~~ - #### 函數結果 ~~~ 文件下載下來 ~~~ * * * * * * * * * * * * * * * - ## curl爬蟲 * * * * * >[info]#### 1.curl爬蟲【curl_spider】 ~~~ /** * curl爬蟲 * @param unknown $url * @param string $return * @param unknown $postData * @param string $cookiePath * @param string $referer * @param unknown $proxy * @param string $userAgent * @return mixed */ function curl_spider($url, $return = true, $postData = array(), $cookiePath = null, $referer = null, $proxy = array(), $userAgent = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)") { $ch = curl_init(); $optionArray = array( CURLOPT_AUTOREFERER => true, CURLOPT_URL => $url, // 目標URL CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1, // 不直接打印顯示 CURLOPT_CONNECTTIMEOUT => 3, // 連接超時3s CURLOPT_TIMEOUT => 12, // 執行超時12s CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false ); // 此處兩個SSL相關參數是適應HTTPS網頁 if (count($proxy) > 0) { // 網頁代理設置,代理,大家都懂的,可以做很多事 $optionArray[CURLOPT_HTTPPROXYTUNNEL] = true; // HTTP代理開關 if (! empty($proxy['type']) && $proxy['type'] == 'socket') { $optionArray[CURLOPT_PROXYTYPE] = CURLPROXY_SOCKS5; // 可以使用socket代理(×這里我沒有測試socket代理) } $optionArray[CURLOPT_PROXY] = $proxy['url']; if (! empty($proxy['auth'])) { // 代理驗證 $optionArray[CURLOPT_PROXYAUTH] = false; $optionArray[CURLOPT_PROXYUSERPWD] = $proxy['auth']; // 格式 username:password } } if (! empty($referer)) { // HTTP頭部的referer $optionArray[CURLOPT_REFERER] = $referer; } if (! empty($userAgent)) { // HTTP頭部的UserAgent $optionArray[CURLOPT_USERAGENT] = $userAgent; } if (! empty($cookiePath)) { // Cookie的保存與傳遞(cookiePath是一個cookie文件,自定義即可) $optionArray[CURLOPT_COOKIEFILE] = $cookiePath; // 傳遞cookie $optionArray[CURLOPT_COOKIEJAR] = $cookiePath; // 保存cookie } if (count($postData) > 0) { // post傳值 $optionArray[CURLOPT_POST] = 1; $optionArray[CURLOPT_POSTFIELDS] = $postData; } curl_setopt_array($ch, $optionArray); $content = curl_exec($ch); if (! curl_errno($ch)) { $output = curl_getinfo($ch); } curl_close($ch); if ($return) { $output['content'] = $content; print_r($output,true); return $output; } else { echo $content; } } ~~~ >[info]#### 2. 測試 - #### 函數使用 ~~~ $proxy = array( 'url' => 'http://localhost:8087' ); print_r(curl_spider('http://127.0.0.1/test/curl/ip.php', true, array(), null, null, $proxy)); ~~~ ~~~ /** * curl請求 * @param $url * @param null $data 發送數據 如果發送數據是數組,建議進行http_build_query處理成字符串以便更高的兼容性 * @param string $method 請求方法 * @param array $headers 請求頭 鍵值對數組,如: array('Content-Type' => 'text/html; charset=utf-8'),兼容array('Content-Type:text/html; charset=utf-8') * @param array $options 其他的標準的curl選項, 鍵值對數組,如array(CURLOPT_USERAGENT => 'wms-server'); * @param null $cookies 攜帶cookie 鍵值對數組或者標準cookie字符串都可以 * @param null $info 請求信息,包含絕大部分信息,出錯了可以看這個錯誤消息 * @return mixed|null */ function iCurl($url, $data = null, $method = 'get', array $headers = array(), array $options = array(), $cookies = null, &$info = null) { $method = strtoupper($method); if ($data) { if ($method == 'GET') { $data = is_array($data) ? http_build_query($data) : $data; $url = strpos($url, '?') !== false ? $url . '&' . $data : $url . '?' . $data;//get的參數直接拼接在url后面 $curl = curl_init($url); } else { $curl = curl_init($url); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } } else { $curl = curl_init($url); } //設置基本的選項 curl_setopt_array($curl, array( CURLOPT_TIMEOUT => 30, //超時時間 CURLOPT_CUSTOMREQUEST => $method,// 請求方法 CURLOPT_RETURNTRANSFER => true,// 返回內容 CURLOPT_HEADER => false,// 返回header CURLOPT_FOLLOWLOCATION => true,// 自動重定向 CURLOPT_MAXREDIRS => 10, //重定向最大次數 CURLOPT_SSL_VERIFYPEER => false,// 不校驗證書 )); //設置頭信息 if (!empty($headers)) { $_headers = []; foreach ($headers as $name => $value) { //處理成CURL可以識別的headers格式 $_headers[] = is_int($name) ? $value : $name . ':' . $value; //兼容已經拼好的字符串數組 } curl_setopt($curl, CURLOPT_HTTPHEADER, $_headers); } //設置cookie if (!empty($cookies)) { $_cookies = ''; if (is_array($cookies)) { foreach ($cookies as $name => $value) { $_cookies .= "{$name}={$value}; "; } } else { $_cookies = $cookies; } curl_setopt($curl, CURLOPT_COOKIE, $_cookies); } //其他特殊選項 if (!empty($options)) { curl_setopt_array($curl, $options); } //執行請求 $output = curl_exec($curl); $info = curl_getinfo($curl); //http狀態碼必須是200 才認為請求成功 if ($info['http_code'] != 200) { $info['error'] = curl_error($curl); $info['output'] = $output; //記錄詳細錯誤日志 get_instance()->Share->_write_log('log', 'curl', array('args'=>func_get_args(), 'curlInfo'=>$info)); $output = null; } curl_close($curl); return $output; } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看