摘要:支持創建的庫,能夠連接通訊各種服務器使用各種協議。目前支持的協議有。在一些復雜的請求中,不能夠設置請求頭代理認證等相關信息,更不能向某個服務器提交表單數據,上傳文件。文件類型可在文件名后以的格式指定。
概述 簡介
在設計之初,cURL (Client URL Library)是一種作為使用 URL 語法傳輸數據的命令行工具。通過 cURL 庫,我們可以在 PHP 腳本中自由地使用某種協議來獲取或者提交數據,比如獲取 HTTP 請求數據。簡單的來說,cURL 是客戶端向服務器請求資源的工具。
PHP 支持 Daniel Stenberg 創建的 libcurl 庫,能夠連接通訊各種服務器、使用各種協議。libcurl 目前支持的協議有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同時支持 HTTPS 證書、HTTP POST、HTTP PUT、 FTP 上傳(也能通過 PHP 的 FTP 擴展完成)、HTTP 基于表單的上傳、代理、cookies、用戶名+密碼的認證。優勢
在 PHP 中,想要獲取某個 URL 的內容其實很簡單,有多種實現方法,比如使用 file_get_contents() 函數:
雖然 file_get_contents() 函數使用起來很方便,但是不夠靈活,也沒法進行錯誤處理。在一些復雜的請求中,不能夠設置請求頭、Cookie、代理、認證等相關信息,更不能向某個服務器提交表單數據,上傳文件。
cURl 庫不但支持豐富的網絡協議,而且提供了設置各種 URL 請求參數的方法,功能強大。cURL 的使用場景有很多,比如訪問網頁資源,獲取 WebService 接口數據、下載 FTP 服務器文件。
使用 基本步驟要使用 cURL 來發送 URL 請求,步驟大體分為以下四步:
初始化 cURL 會話;
設置請求選項;
執行 cURL 會話;
關閉 cURL 會話。
// 1. 初始化 cURL 會話 $ch = curl_init(); // 2. 設置請求選項 curl_setopt($ch, CURLOPT_URL, "https://segmentfault.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); # 獲取的信息以字符串返回,而不是直接輸出 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); # 禁止 cURL 驗證對等證書,從而支持 HTTPS 訪問 // 3. 執行 cURL 會話 $response = curl_exec($ch); var_dump($response); // 4. 關閉 cURL 會話 curl_close($ch);cURL 主要通過 curl_setopt() 函數設置請求選項,具體的每個選項說明請見 http://php.net/manual/zh/func...錯誤處理通過 curl_error() 函數可以查看 cURL 會話錯誤詳情,而 curl_getinfo() 函數可以查看響應信息。因此,通過這兩個函數我們可以實現一個簡單的錯誤處理程序,比如我們現在訪問一個不存在的 URL 地址:
實戰案例 1. POST 請求使用 cURL 模擬發送 POST 請求:
$url, CURLOPT_RETURNTRANSFER => 1, # 獲取的信息以字符串返回 CURLOPT_POST => 1, # 發送 POST 請求 CURLOPT_POSTFIELDS => $data, # POST 請求數據 ]); $response = curl_exec($ch); curl_close($ch); return $response; } $url = "http://localhost/test.php"; $data = ["id" => 1, "username" => "jochen"]; echo curl_post($url, $data);2. 文件上傳CURLOPT_POSTFIELDS:全部數據使用 HTTP 協議中的 "POST" 操作來發送。 要發送文件,在文件名前面加上@前綴并使用完整路徑。 文件類型可在文件名后以 ";type=mimetype" 的格式指定。 這個參數可以是 urlencoded 后的字符串,類似"val1=1&val2=2&...",也可以使用一個以字段名為鍵值,字段數據為值的數組。通過 cURL 發送 POST 請求來實現文件上傳:
$url, CURLOPT_RETURNTRANSFER => 1, # 獲取的信息以字符串返回 CURLOPT_POST => 1, # 發送 POST 請求 CURLOPT_POSTFIELDS => $data, # POST 請求數據 ]); $response = curl_exec($ch); curl_close($ch); return $response; } $url = "http://localhost/test.php"; $data = ["id" => 1, "file" => "@/root/image/boy.jpg"]; echo curl_post($url, $data);3. 文件下載其實,文件下載與普通 GET 請求是一樣的,只是文件下載把返回內容保存至文件中,而不是簡單的輸出。配合 file_put_contents() 函數實現文件下載:
$url, CURLOPT_RETURNTRANSFER => 1, # 獲取的信息以字符串返回 ]); $response = curl_exec($ch); curl_close($ch); return file_put_contents($path, $response); } curl_download("http://localhost/boy.jpg", "./boy.jpg");4. HTTP 認證如果服務器端需要驗證請求,設置 CURLOPT_USERPWD 參數即可:
$url, CURLOPT_USERPWD => "$user:$passwd", # 格式為:"[username]:[password]" CURLOPT_RETURNTRANSFER => 1 ]); $result = curl_exec($ch); curl_close($ch); return $result; } echo curl_auth("http://localhost", "jochen", "password");5. 模擬登錄這里主要展示模擬登錄使用了 Cookie 來保持登錄狀態的應用。首先我們需要通過賬號密碼登錄獲取到 Cookie 數據,然后利用已登錄的 Cookie 獲取頁面數據:
$url, CURLOPT_POST => 1, # 發送 POST 請求 CURLOPT_POSTFIELDS => $data, # POST 請求數據 CURLOPT_COOKIEJAR => $cookie # 將 cookie 信息保存至文件中 CURLOPT_RETURNTRANSFER => 1, # 獲取的信息以字符串返回 ]); $response = curl_exec($ch); curl_close($ch); return $response; } // 獲取頁面數據 function curl_content($url, $cookie) { $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_COOKIEFILE => $cookie # 加載包含 Cookie 數據的文件 CURLOPT_RETURNTRANSFER => 1, # 獲取的信息以字符串返回 ]); $response = curl_exec($ch); curl_close($ch); return $response; } $post = ["username" => "jochen", "password" => "123456"]; $cookie = "./cookie.txt"; if (curl_login("http://localhost/login", $post, $cookie)) { echo curl_content("http://localhost", $cookie); }cURL 封裝庫PHP Curl Class 是一個編寫得很好的 cURL 封裝庫,它可以非常方便地發送 HTTP 請求并與任何類型的 Web API 集成。PHP Curl Class 封裝庫適用于 PHP 5.3,5.4,5.5,5.6,7.0,7.1 和 HHVM。這個庫是眾所周知的,并提供了一個非常簡單的語法:
get("https://www.example.com/"); if ($curl->error) { echo "Error: " . $curl->errorCode . ": " . $curl->errorMessage . " "; } else { echo "Response:" . " "; var_dump($curl->response); }參考文章:
Client URL 庫
php中的curl使用入門教程和常見用法實例
在PHP中使用CURL,“撩”服務器只需幾行——php curl詳細解析和常見大坑
Top 7: Best Curl Wrapper Libraries for PHP
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28555.html
摘要:說明這里用到的項目都是基于的項目。但同時,它和其他的分布式文件系統的區別也是很明顯的。能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。放寬了一部分約束,來實現流式讀取文件系統數據的目的。是項目的一部分。 關鍵詞 Java、PHP、hdfs、mqrocket、excel、poi、報表 需求背景 在業務需求方面,每個企業或多或少都會有報表導出的作業,量少則可是使用輸出流或者字符串的...
摘要:說明這里用到的項目都是基于的項目。但同時,它和其他的分布式文件系統的區別也是很明顯的。能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。放寬了一部分約束,來實現流式讀取文件系統數據的目的。是項目的一部分。 關鍵詞 Java、PHP、hdfs、mqrocket、excel、poi、報表 需求背景 在業務需求方面,每個企業或多或少都會有報表導出的作業,量少則可是使用輸出流或者字符串的...
摘要:目前支持和協議。除此以外,還能在可能的字符編碼之間相互進行編碼轉換。如果啟用了這個功能,輸入字符編碼可能將自動轉換成。這些可能在未來增加。 前言 PHP7即將在12月3日正式發布,而RC8是已經差不多穩定了的版本,后續的GA版本主要都是在修復bug,所以為了未來開發環境的升級,準備嘗試安裝一下。 PHP7.0.0將在12月3日正式發布,但是12月2日時github已經發布出PHP-7...
閱讀 1682·2021-11-15 11:37
閱讀 3412·2021-09-28 09:44
閱讀 1657·2021-09-07 10:15
閱讀 2789·2021-09-03 10:39
閱讀 2693·2019-08-29 13:20
閱讀 1298·2019-08-29 12:51
閱讀 2209·2019-08-26 13:44
閱讀 2130·2019-08-23 18:02