PHP使用CURL詳解

2021-07-28 08:10:49 字數 2670 閱讀 4132

curl是乙個非常強大的開源庫,支援很多協議,包括http、ftp、telnet等,我們使用它來傳送http請求。它給我 們帶來的好處是可以通過靈活的選項設定不同的http協議引數,並且支援https。curl可以根據url字首是「http」 還是「https」自動選擇是否加密傳送內容。

使用curl的php擴充套件完成乙個http請求的傳送一般有以下幾個步驟:

初始化連線控制代碼;

設定curl選項;

執行並獲取結果;

釋放vurl連線控制代碼。

下面的程式片段是使用curl傳送http的典型過程

//

1. 初始化

$ch =curl_init(); //

2. 設定選項,包括url

curl_setopt($ch,curlopt_url,"");

curl_setopt(

$ch,curlopt_returntransfer,1);

curl_setopt(

$ch,curlopt_header,0); //

3. 執行並獲取html文件內容

$output = curl_exec($ch);

if($output === false)

//4. 釋放curl控制代碼

curl_close($ch);

上述**中使用到了四個函式

curl的選項還有很多,可以到php的官方**(上檢視curl支援的所有選項列表。

在curl_exec()函式執行之後,可以使用curl_getinfo()函式獲取curl請求輸出的相關資訊,示例**如下:

curl_exec($ch

);$info = curl_getinfo($sh

);echo ' 獲取 '.$info['url'].'耗時'.$info['total_time'].'秒';

上述**中curl_getinfo返回的是乙個關聯陣列,包含以下資料:

curl_getinfo()函式還有乙個可選擇引數$opt,通過這個引數可以設定一些常量,對應到上術這個字段,如果設定了第二個引數,那麼返回的只有指定的資訊。例如設定$opt為curlinfo_total_time,則curl_getinfo()函式只返回total_time,即總傳輸消耗的時間,在只需要關注某些傳輸資訊時,設定$opt引數很有意義。

如何使用curl來傳送get請求,傳送get請求的關鍵是拼裝格式正確的url。請求位址和get資料由乙個「?」分割,然後get變數的名稱和值用「=」分隔,各個get名稱和值由「&」連線。php為我們提供了乙個函式專門用來拼裝get請求和資料部分——http_build_query,該函式接受乙個關聯陣列,返回由該關聯資料描述的get請求字串。使用這個函式,結合curl傳送http請求的一般流程,我們封閉了乙個傳送get請求的函式——docurlgetrequest,具體**如下:

**

*@desc 封閉curl的呼叫介面,get的請求方式。

);}

這個函式把使用http_build_query 拼裝好的帶get引數的url傳給curl_init函式,然後使用curl傳送http請求。

可以使用curl提供的選項curlopt_postfields,設定該選項為post字串資料就可以把請求放在正文中。同樣我們實現了乙個傳送post請求的函式——docurlpostrequest,**如下:

/*

*** @desc 封裝 curl 的呼叫介面,post的請求方式**/

function docurlpostrequest($url,$requeststring,$timeout = 5)

$con = curl_init((string)$url

); curl_setopt(

$con, curlopt_header, false

); curl_setopt(

$con, curlopt_postfields, $requeststring

); curl_setopt(

$con, curlopt_post,true

); curl_setopt(

$con, curlopt_returntransfer,true

); curl_setopt(

$con, curlopt_timeout,(int)$timeout);

return curl_exec($con

); }

上面**中除了設定curlopt_postfields外,我們還設定了curl_post為true,標識這個請求是乙個post請求。在post請求中也是可以傳輸get資料的,只需要在url中拼裝get請求資料即可秀。

PHP使用CURL詳解

curl是乙個非常強大的開源庫,支援很多協議,包括http ftp telnet等,我們使用它來傳送http請求。它給我 們帶來的好處是可以通過靈活的選項設定不同的http協議引數,並且支援https。curl可以根據url字首是 http 還是 https 自動選擇是否加密傳送內容。使用curl的...

PHP使用CURL詳解

curl是乙個非常強大的開源庫,支援很多協議,包括http ftp telnet等,我們使用它來傳送http請求。它給我 們帶來的好處是可以通過靈活的選項設定不同的http協議引數,並且支援https。curl可以根據url字首是 http 還是 https 自動選擇是否加密傳送內容。使用curl的...

PHP使用CURL詳解

curl是乙個非常強大的開源庫,支援很多協議,包括http ftp telnet等,我們使用它來傳送http請求。它給我 們帶來的好處是可以通過靈活的選項設定不同的http協議引數,並且支援https。curl可以根據url字首是 http 還是 https 自動選擇是否加密傳送內容。使用curl的...