【CURL】PHP的CURL開發專案最佳實踐
前言
最近自己做了團隊內部的http除錯工具,github開源地址 https://github.com/diandianxiyu/ApiTesting ,通過這個專案又重新操作了PHP的curl函式,通過本篇部落格進行記錄,和大家一起學習~
Code
本程式碼通過PHP7環境執行。
function curl($url, $method=`GET`,$fields = [], $headers=[],$auth = false){
//如果是get的獲取方式,拼接引數到url上
if($method == "GET"){
$fields_string = http_build_query($fields);
$url=$url."?".$fields_string;
}
$curl = curl_init($url); //初始化
curl_setopt ($curl, CURLOPT_CUSTOMREQUEST, $method ); //設定HTTP請求方式
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_HEADER, 1);
$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
$header[] = "Cache-Control: max-age=0";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 300";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[] = "Accept-Language: en-us,en;q=0.5";
$header[] = "Pragma: "; // browsers keep this blank.
curl_setopt($curl, CURLOPT_HTTPHEADER, array_merge($header,$headers)); //和引數中的header一起傳遞過去
if($auth){
curl_setopt($curl, CURLOPT_USERPWD, "$auth");
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
}
if($fields){
//POST
if($method == "POST"){//單獨對POST方法設定引數傳遞
$fields_string = http_build_query($fields);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string);
}else{
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true) ;
curl_setopt($curl, CURLOPT_BINARYTRANSFER, true) ;
}
}
$response = curl_exec($curl); //執行curl
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$header_string = substr($response, 0, $header_size);
$body = substr($response, $header_size);
$header_rows = explode(PHP_EOL, $header_string);
foreach($header_rows as $key => $value){
$header_rows[$key]=trim($header_rows[$key]);
}
$i=0;
foreach((array)$header_rows as $hr){
$colonpos = strpos($hr, `:`);
$key = $colonpos !== false ? substr($hr, 0, $colonpos) : (int)$i++;
$headers[$key] = $colonpos !== false ? trim(substr($hr, $colonpos+1)) : $hr;
}
$j=0;
foreach((array)$headers as $key => $val){
$vals = explode(`;`, $val);
if(count($vals) >= 2){
unset($headers[$key]);
foreach($vals as $vk => $vv){
$equalpos = strpos($vv, `=`);
$vkey = $equalpos !== false ? trim(substr($vv, 0, $equalpos)) : (int)$j++;
$headers[$key][$vkey] = $equalpos !== false ? trim(substr($vv, $equalpos+1)) : $vv;
}
}
}
curl_close($curl);
return array($body, $headers); //最終返回 result[0]為body,result[1]為header
}
參考資料
相關文章
- PHP 中 CURL 使用之 CURL 詳解!PHP
- php curl使用PHP
- PHP curl 請求PHP
- PHP CURL詳解PHP
- php curl的使用心得PHP
- php curl引數大全PHP
- linux + php 安裝curlLinuxPHP
- PHP curl 請求使用教程PHP
- curl_multi實現併發
- CURL 傳送檔案
- [譯]php和curl_multi_execPHP
- windows2個本地專案curl訪問Windows
- php下利用curl判斷遠端檔案是否存在的實現程式碼PHP
- cURL實現傳送Get和Post請求(PHP)PHP
- 大型開發專案中 git 工作流的最佳實踐Git
- curl 使用指北&實戰
- 在PHP中進行curl開啟操作的具體教程PHP
- 有贊開源專案最佳實踐
- PHP curl error 60 錯誤解決PHPError
- curl文件
- PHP 請求用 cURL 還是用 guzzle?PHP
- PHP報錯:Call to undefined function curl_init()PHPUndefinedFunction
- php CURL 伺服器響應慢的問題PHP伺服器
- php curl 連線 EMQ http_api的請求PHPMQHTTPAPI
- PHP7 以後使用 CURL 連結 FTP 上傳檔案PHPFTP
- go專案dockerfile最佳實踐GoDocker
- Android開發編譯curl庫給Android使用Android編譯
- curl命令PostJsonJSON
- curl wget bondwget
- [Bash] curl command
- 谷歌翻譯使用php curl請求介面文件谷歌PHP
- PHP file_get_contents 與 curl 效能比較PHP
- Ubuntu Linux下為PHP5安裝cURLUbuntuLinuxPHP
- php5.5CURL圖片上傳廢棄@PHP
- curl 的用法指南
- 最全的cURL命令使用
- 如何使用curl命令下載檔案
- 一本實踐的專案開發《Python專案開發實戰(第2版)》Python
- PHP CURL 上傳二進位制流圖片PHP