cURL的幾個經典執行個體

來源:互聯網
上載者:User

標籤:

1、cURL請求的基本步驟:
  (1)初始化

  (2)設定選項,包括URL

  (3)執行並擷取HTML文檔內容

  (4)釋放cURL控制代碼

 1 <?php 2     //1、初始化 3     $ch = curl_init(); 4  5     //2、設定選項,包括URL 6     curl_setopt($ch, CURLOPT_URL, "http://www.cnblogs.com/it-cen/"); 7  8     //將curl_exec()擷取的資訊以檔案流的形式返回,而不是直接輸出 9     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);10 11     //啟動時會將標頭檔的資訊作為資料流輸出12     curl_setopt($ch, CURLOPT_HEADER, 1);13 14     //3、執行並擷取HTML文檔內容15     curl_exec($ch);16 17     //4、釋放控制代碼18     curl_close($ch);19 20     echo $ch;21 22 ?>

  注意:第二步最重要,也就是curl_setopt()函數

     我們可以加一段檢查錯誤的語句,這裡要注意用的是"===false",這是為了區分空輸出和布爾值false

 

1 $output = curl_exec($ch);2 3     if ($output === false) {4         echo "cURL Error:".curl_error($ch);5     }

 

    curl_getinfo()函數返回cURL執行後這一請求相關的資訊,這對調試和排錯很有用:

1     curl_exec($ch);2     $info = curl_getinfo($ch);3     echo ‘<pre>‘;4     print_r($info);    5     echo ‘</pre>‘; 

      返回的資料

Array(    [url] => http://www.cnblogs.com/it-cen/    [content_type] => text/html; charset=utf-8    [http_code] => 200    [header_size] => 312    [request_size] => 61    [filetime] => -1    [ssl_verify_result] => 0    [redirect_count] => 0    [total_time] => 0.172    [namelookup_time] => 0.016    [connect_time] => 0.063    [pretransfer_time] => 0.063    [size_upload] => 0    [size_download] => 14658      //請求的資料大小    [speed_download] => 85220        [speed_upload] => 0    [download_content_length] => 14658    [upload_content_length] => 0    [starttransfer_time] => 0.125    [redirect_time] => 0    [certinfo] => Array        (        )    [redirect_url] => )

 

2、這些資訊在調試很有用,例如在cURL抓取的時候,可能由於網路等原因,時常出現抓取資料不完整的情況,這是我們可以通過所擷取的資料計算filesize,然後和curl_getinfo()擷取的進行比較,如果大小相等,就認定下載正確,否則進行重複嘗試。

 下面我們看一個抓取圖片的例子:

 1 <?php 2     header("Content-Type: image/png"); 3  4     //1、初始化 5     $ch = curl_init(); 6  7     //2、設定選項,包括URL 8     curl_setopt($ch, , CURLOPT_URL, "http://img04.taobaocdn.com/tfscom/TB1omaTHXXXXXajXVXXtKXbFXXX.png"); 9     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);10     curl_setopt($ch, CURLOPT_HEADER, 1);11 12     //3、執行並擷取內容13     $res = curl_exec($ch);14 15     //擷取資訊16     $info = curl_getinfo($ch);17 18     //4、釋放資源19     curl_close($ch);20 21     file_put_contents("d:/aa.png", $res);22 23     $size = filesize("d:/aa.png");24 25     if ($size != $info[‘size_download‘]) {26         echo "下載的資料不完整,請重新下載";27     } else {28         echo "下載資料完整";29     }30 31 32 ?>

 

3、在cURL中用POST方法發送資料

 1 <?php 2     $ch = curl_init(); 3  4     $data = array(‘name‘=>‘kelly‘, ‘age‘=>27, ‘sex‘=>1); 5  6     curl_setopt($ch, CURLOPT_URL, "http://localhost.post.php"); 7     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 8  9     //設定為post10     curl_setopt($ch, CURLOPT_POST, 1);11     //把post的變數加上12     curl_setopt($ch, CURLOPT_POSTFIELDS,$data);13 14     $res = curl_exec($ch);15 16     curl_close($ch);17 18     echo $res;19 20 21 ?>

用此方法可以類比留言,或者可以坐灌水機器人,思路都是一樣的

 

4、用cURL上傳檔案

 

 1 <?php 2     //索要上傳的資料 3     $data = array(‘name‘=>‘beauty‘, "upload"=>"@a.zip"); 4  5     $ch = curl_init(); 6  7     curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1/Socket/upload_file.php"); 8     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 9 10     curl_setopt($ch, CURLOPT_POST, 1);11     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);12 13     $res = curl_exec($ch);14 15     curl_close($ch);16 17     echo $res;18 19 ?>

 

注意:要傳送檔案時,要在檔案名稱前面加上  @  首碼並使用完整路徑

 

5、cURL設定項

其實,cURL有許多配置選項,這些選項才是cURL的靈魂,通過setopt()設定,下面總結幾個比較常見且重要的配置項,希望在對讀者在以後用到cURL時有一定的協助:

 

  CURLOPT_AUTOREFERER:當根據location:重新導向時,自動化佈建header中的Referer:資訊

  CURLOPT_COOKIESESSION:啟用時cURL會緊緊傳遞一個sessioncookie,忽略其他cookie

  CURLOPT_HEADER:將標頭檔的資訊作為資料流輸出

  CURLOPT_INFILESIZE:設定上傳檔案的大小,單位為位元組

  CURLOPT_MAXCONNECTS:允許最大串連數量

  CURLOPT_MAXREDIRS:指定HTTP重新導向的最多數量

  CURLOPT_COOKIE:設定HTTP請求中“cookie:”部分的內容,多個cookie用分號跟個,分號後帶一個空格

  CURLOPT_POSTFIELDS:全部資料用HTTP協議中的“POST”操作發送要傳送檔案,在檔案名稱前面加上@首碼並使用完整路徑

  .......

  具體更多配置項請參考PHP手冊

 

  cURL功能很強大,它是一個通用的庫,並非PHP專屬。

  希望讀者通過本博文的幾個經典cURL例子的學習能有所收穫。

 

cURL的幾個經典執行個體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.