php教程curl,PHP使用CURL詳解講解

2021-10-22 23:29:45 字數 3509 閱讀 4602

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

使用curl傳送請求的基本流程

使用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_init() 和 curl_close() 分別是初始化curl連線和關閉curl連線,都比較簡單。

curl_exec() 執行curl請求,如果沒有錯誤發生,該函式的返回是對應url返回的資料,以字串表示滿意;如果發生錯誤,該函式返回 false。需要注意的是,判斷輸出是否為false用的是全等號,這是為了區分返回空串和出錯的情況。

curl函式庫裡最重要的函式是curl_setopt(),它可以通過設定curl函式庫定義的選項來定製http請求。上述**片段中使用了三個重要的選項:

1. curlopt_url 指定請求的url;

2. curlopt_returntransfer 設定為1表示稍後執行的curl_exec函式的返回是url的返回字串,而不是把返回字串定向到標準輸出並返回true;

3. curllopt_header設定為0表示不返回http頭部資訊。

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

獲取curl請求的輸出資訊

$info = curl_getinfo($sh);

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

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:上傳資料的大小。

speed_upload:上傳速度。

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,具體**如下:**

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

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

使用curl傳送post請求

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

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

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

if($url == '' || $requeststring == '' || $timeout <=0){

return false;

$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中使用sftp教程

php php 中的sftp 使用教程 telnet ftp ssh sftp ssl 一 ftp 協議簡介 ftp file transfer protocol,檔案傳輸協議 是網際網路上常用的協議之一,人們用ftp實現互連網上的檔案傳輸。如同其他的很多通訊協議,ftp通訊協議也採用客戶機 伺服器...

php使用TCPDF生成PDF檔案教程

functioncreatepdffile frontdata 新建乙個pdf檔案 orientation orientation屬性用來設定文件列印格式是 portrait 還是 landscape landscape為橫式列印,portrait為縱向列印 unit 設定頁面的單位。pt 點為單位...

索引教程 PHP教程索引

索引教程 introduction to php php簡介 installing php to linux 將php安裝到linux installing php to windows 將php安裝到windows php hello world project with eclipse 帶有ec...