這篇文章主要介紹了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);
上述程式碼中使用了四個函數
②CURLOPT_RETURNTRANSFER 設定為1表示稍後執行的curl_exec字串的回傳是URL串定向到標準輸出並回傳TRUE;
③CURLLOPT_HEADER設定為0表示不回傳HTTP頭部資訊。
在curl_exec()函數執行之後,可以使用curl_getinfo()函數取得CURL請求輸出的相關訊息,範例程式碼如下:
程式碼中curl_getinfo回傳的是一個關聯數組,包含以下資料:
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提供的選項CURLOPT_POSTFIELDS,設定此選項為POST字串資料就可以把請求放在正文中。同樣我們實作了一個發送POST請求的函數-doCurlPostRequest,程式碼如下:
/**
*@desc 封闭curl的调用接口,get的请求方式。
*/
function doCurlGetRequest($url,$data,$timeout = 5){
if($curl == "" || $timeout <= 0){
return false;
}
$url = $url.'?'.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