PHP使用CURL詳解

2021-08-19 13:15:17 字數 2786 閱讀 7717

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($ch);

$info = curl_getinfo($sh);

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

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

curl_getinfo()函式還有乙個可選擇引數op

t,通過

這個引數

可以設定

一些常量

,對應到

上術這個

字段,如

果設定了

第二個參

數,那麼

返回的只

有指定的

資訊。例

如設定 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的...