首頁 > 後端開發 > php教程 > PHP中的使用curl發送請求(GET請求和POST請求)

PHP中的使用curl發送請求(GET請求和POST請求)

高洛峰
發布: 2023-03-05 17:00:02
原創
2132 人瀏覽過

這篇文章主要介紹了PHP中的使用curl發送請求(GET請求和POST請求),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧

使用CURL發送請求的基本流程

使用CURL的PHP​​擴展完成一個HTTP請求的發送一般有以下幾個步驟:

1.初始化連接句柄

2.設定CURL選項;

3.執行並取得結果;

4.釋放VURL連接句柄。

下面的程式片段是使用CURL發送HTTP的典型過程


// 1. 初始化
 $ch = curl_init();
 // 2. 设置选项,包括URL
 curl_setopt($ch,CURLOPT_URL,"http://www.devdo.net");
 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
 curl_setopt($ch,CURLOPT_HEADER,0);
 // 3. 执行并获取HTML文档内容
 $output = curl_exec($ch);
 if($output === FALSE ){
 echo "CURL Error:".curl_error($ch);
 }
 // 4. 释放curl句柄
 curl_close($ch);
登入後複製


上述程式碼中使用了四個函數

CURL連接,都比較簡單。
  • curl_exec() 執行CURL請求,如果沒有錯誤發生,則函數的傳回是對應URL傳回的數據,以字串表示滿意;如果發生錯誤,則函數傳回 FALSE。需要注意的是,判斷輸出是否為FALSE用的是全等號,這是為了區分回傳空串和出錯的情況。
  • CURL函數庫裡最重要的函數是curl_setopt(),它可以透過設定CURL函數庫定義的選項來客製化HTTP請求。上述程式碼片段中使用了三個重要的選項:
  • ①CURLOPT_URL 指定請求的URL;

②CURLOPT_RETURNTRANSFER 設定為1表示稍後執行的curl_exec字串的回傳是URL串定向到標準輸出並回傳TRUE;

③CURLLOPT_HEADER設定為0表示不回傳HTTP頭部資訊。

CURL的選項還有很多,可以到PHP的官方網站(//m.sbmmt.com/)上查看CURL支援的所有選項清單。

取得CURL請求的輸出資訊

在curl_exec()函數執行之後,可以使用curl_getinfo()函數取得CURL請求輸出的相關訊息,範例程式碼如下:

程式碼中curl_getinfo回傳的是一個關聯數組,包含以下資料:


url:網路位址。


content_type:內容編碼。

  • http_code:HTTP狀態碼。

  • header_size:header的大小。

  • request_size:請求的大小。

  • filetime:檔案建立的時間。

  • ssl_verify_result:SSL驗證結果。

  • redirect_count:跳到計數。

  • total_time:總耗時。

  • namelookup_time:DNS查詢耗時。

  • connect_time:等待連線耗時。

  • pretransfer_time:傳輸前準備耗時。

  • size_uplpad:上傳資料的大小。

  • size_download:下載資料的大小。

  • speed_download:下載速度。

  • speed_upload:上傳速度。

  • download_content_length:下載內容的長度。

  • upload_content_length:上傳內容的長度。

  • starttransfer_time:開始傳輸的時間表。

  • redirect_time:重定向耗時。

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

  • 使用CURL發送GET請求

如何使用CURL來發送GET請求,發送GET請求的關鍵是拼裝格式正確的URL。請求位址和GET資料由一個「?」分割,然後GET變數的名稱和值用「=」分隔,各個GET名稱和值由「&」連接。 PHP為我們提供了一個函數專門用來拼裝GET請求和資料部分-http_build_query,該函數接受一個關聯數組,並傳回由該關聯資料描述的GET請求字串。使用這個函數,結合CURL發送HTTP請求的一般流程,我們封閉了一個發送GET請求的函數-doCurlGetRequest,具體程式碼如下:

curl_exec($ch);
$info = curl_getinfo($sh);
echo ' 获取 '.$info['url'].'耗时'.$info['total_time'].'秒';
登入後複製

這個函數把使用http_build_quem_query 的的URL傳給curl_init函數,然後使用CURL發送HTTP請求。


使用CURL發送POST請求


可以使用CURL提供的選項CURLOPT_POSTFIELDS,設定此選項為POST字串資料就可以把請求放在正文中。同樣我們實作了一個發送POST請求的函數-doCurlPostRequest,程式碼如下:

/**
 *@desc 封闭curl的调用接口,get的请求方式。
*/
function doCurlGetRequest($url,$data,$timeout = 5){
 if($curl == "" || $timeout <= 0){
 return false;
 }
 $url = $url.&#39;?&#39;.http_bulid_query($data);
 $con = curl_init((string)$url);
 curl_setopt($con, CURLOPT_HEADER, false);
 curl_setopt($con, CURLOPT_RETURNTRANSFER,true);
 curl_setopt($con, CURLOPT_TIMEOUT, (int)$timeout);
 
 return curl_exec($con);
}
登入後複製

上面程式碼中除了設定CURLOPT_POSTFIELDS外,我們也設定了一個CURL_上面程式碼中除了設定CURLOPT_POSTFIELDS外,我們也設定了一個CURL_POST為這個程式碼。在POST請求中也是可以傳輸GET資料的,只需要在URL中拼裝GET請求資料即可。

The above is the entire content of this article. I hope it will be helpful to everyone's study. I also hope that everyone will support the PHP Chinese website.

For more articles related to using curl to send requests (GET requests and POST requests) in PHP, please pay attention to the PHP Chinese website!

Related articles:

The url parameter problem when PHP uses curl to initiate a get request

Notes on PHP using the curl function to send Post requests Detailed explanation of matter examples

PHP development skills (8)-CURL request code details

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板