學習CURL擴充套件功能的使用(二)

2022-09-19 09:42:18 字數 3059 閱讀 6760

上回文章中我們已經學習了 curl 的基本操作,對於乙個能夠傳送 get 和 post 資料的遠端請求擴充套件來說,經常也會使用 curl 來進行爬蟲或是自動操作的一些專案的開發,在這其中,還有許多功能也是我們經常會使用到的,比如檔案上傳以及多個請求同時傳送。這個在筆者的實際工作開發中也都是做過的東西,相對來說,curl 的這些功能肯定不如直接的 post 請求之類的功能常用,但它們的出鏡率也著實不低。

首先就是檔案上傳功能,php5.5 之前和之後的語法是不一樣的,這裡我們當然是以最新的方式來演示檔案上傳功能的實現。

$file = "./1.學習乙個php中用於檢測危險函式的擴充套件taint.php";

// curlopt_postfields => ['a' =>' post測試', 'files' => curl_file_create($file, 'text/plain', 'phpfile.php')],

curlopt_postfields => ['a' => 'post測試', 'files' => $cfile],

]);$res = curl_exec($ch);

curl_close($ch);

var_dump($res);

// string(244) "測試資料

// post測試

// array

// (

// [files] => array

// (

// [name] => phpfile.php

// [type] => text/plain

// [tmp_name] => /private/tmp/phpvkyesy

// [error] => 0

// [size] => 1785

// )

// )

// "

例子非常簡單,也是檔案上傳最基本的實現。我們需要的就只是在 post 欄位中新增乙個 curlfile 物件就可以實現檔案的上傳功能。它在例項化的時候需要三個引數,分別是要上傳的檔案路徑、mime型別以及上傳時顯示的檔名。關於這個上傳時的檔名,我們可以看到在服務端列印 $_fiels 時,就會顯示在 name 欄位中。對於最常用的檔案來說,mime型別就是常用的 image/jpeg 之類的,而對於文字檔案,直接使用 text/plain 就可以了,就像我們在這個測試**中直接上傳的 php 檔案一樣。

除了使用 curlfile 物件進行例項化以外,我們還可以直接使用乙個 curl_file_create() 函式,它的作用也是返回乙個 curlfile 物件,其實就是 curlfile 物件例項化的面向過程寫法而已,作用和引數都是一樣的。

curl_setopt($ch2, curlopt_postfields, ['a' => 'post測試']);

$mh = curl_multi_init();

curl_multi_add_handle($mh, $ch1);

curl_multi_add_handle($mh, $ch2);

$running=null;

do while ($running > 0);

curl_multi_remove_handle($mh, $ch1);

curl_multi_remove_handle($mh, $ch2);

curl_multi_close($mh);

// **********=== 2 **********===

// **********=== 2 **********===

// **********=== 2 **********===

// 測試資料

// post測試

// **********=== 2 **********===

// **********=== 1 **********===

// // ………………………………

// ………………………………

// ………………………………

// // **********=== 0 **********===通過 curl_multi_init() 獲得乙個批量執行的 curl 控制代碼,然後 curl_multi_add_handle() 新增普通的 curl 控制代碼。在執行的時候就會按照新增的順序依次執行請求。每個請求都可以單獨設定自己的各種選項引數,比如我們這裡就是分別使用 get 和 post 進行不同的請求。

在執行的過程中,可以看出,後新增的請求會先執行。curl_multi_exec() 中的第二個引數是乙個引用引數,會不斷地返回當前執行的任務,從第 2 個任務開始遞減,直到沒有任務,也就是我們判斷的 running > 0 這個條件。

curl 中其實還有其它的一些功能,比如 curl_share_init() 這種共享控制代碼,不過使用的頻率不高,但它是可以在不同的請求控制代碼之間共享一些資料的,比如說 cookie 資料。有需要的同學可以自己查閱相關的文件。對於 curl 的功能就簡單的介紹到這裡,因為它的使用還是比較頻繁的,而且更多的是在於各種 opt 常量的設定,這塊除了常用的那些之外,更多的情況還是去文件中查詢自己需要的內容,畢竟記憶的成本太大了。

測試**:

學習curl擴充套件功能的使用(二).php

學習CURL擴充套件功能的使用(一)

其實 curl 這個擴充套件本來也不打算寫得,畢竟這個也是大家最常用的功能之一的。不過既然是在刷文件,學習到了就分享出來吧,不要陷入 知識的詛咒 本身自己的知識體系就不完整,說不定也有很多小夥伴和我一樣只是平常追求業務快速開發而簡單地使用,並沒有深入地去了解過。今天,我們就來深入地了解一下 curl...

CURL 使用學習

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!一 curl 轉義 url特殊字元需轉義 1 空格換成加號 2 正斜槓 分隔目錄和子目錄 3 問號 分隔url和查詢 4 百分號 制定特殊字元 5 號指定書籤 6 號分隔引數 轉義字元的原因 如果你的表單使用get方法提交,並且提交的引數中有 等特...

php7使用curl擴充套件

前言 最近專案中要呼叫第三方介面,看到網上很多都使用curl,但剛開始,php很多的知識都不是很熟悉。為了使用curl init 等函式,從安裝php的擴充套件curl開始踩了很多坑。對於環境安裝真的是比較頭疼的事情,往往可能因為一些小問題而不成功,而且按照網上亂七八糟的部落格說的做,真的一點用都沒...