日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > php CURL函數入門教程詳解

php CURL函數入門教程詳解

來源:程序員人生   發布時間:2014-06-07 20:38:55 閱讀次數:3180次

在php中 cURL函數有一組相關函數,它是一個非常不錯的函數了,我們經常用它來模仿各種登錄與采集工作,下面我來給各位介紹CURL函數入門吧。

cURL簡介

cURL是一個利用URL語法規定來傳輸數據和文件的工具,支持很多種協議如HTTP、FTP、TELNET等。PHP也支持 cURL 庫。

假如我們要獲取某個網頁的內容,我們可能會使用下面這幾種方法:

  1. <?php 
  2. // 把整個文件讀入一個字符串中 
  3. $str = file_get_contents("http://www.phpfensi.com"); 
  4. // 把整個文件讀入一個數組中 
  5. $arr = file("http://www.phpfensi.com"); 
  6. // 讀入一個文件并寫入到輸出緩沖 
  7. $out = readfile("http://www.phpfensi.com"); 
  8. ?> 

這幾種做法相當簡單,但缺乏靈活性和有效的錯誤處理,而且他們無法完成一些高難度動作,比如處理coockies、驗證、表單提交、文件上傳等等。

cURL簡例

下面給出一段簡單的代碼,從其中你可以學習到使用cURL的大概步驟,php cURL入門教程,實例代碼如下:

  1. <?php 
  2. header("Content-type: text/html; charset=utf-8"); 
  3. // 1. 初始化 
  4. $ch = curl_init(); 
  5. // 2. 設置選項 
  6. curl_setopt($ch, CURLOPT_URL, "http://www.111cn.net"); 
  7. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  8. curl_setopt($ch, CURLOPT_HEADER, 0); 
  9. // 3. 執行并獲取返回的內容 
  10. $output = curl_exec($ch); 
  11. // 4. 錯誤判斷,注意這里是布爾值,而不是空輸出,所以是3個等號 
  12. if ($output === FALSE) { 
  13.     echo "cURL Error: " . curl_error($ch); 
  14. // 5. 釋放curl資源 
  15. curl_close($ch); 
  16. // 輸出獲得的源代碼 
  17. echo $output
  18. ?> 
關于第二步的 curl_setopt() 是最為重要的,有一長串cURL參數可供設置,它們能指定URL請求的各個細節。

獲取信息

這是另一個可選的設置項,能夠在cURL執行后獲取這一請求的有關信息,代碼如下:

  1. <?php 
  2. header("Content-type: text/html; charset=utf-8"); 
  3. // 1. 初始化 
  4. $ch = curl_init(); 
  5. // 2. 設置選項 
  6. curl_setopt($ch, CURLOPT_URL, "http://www.111cn.net"); 
  7. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  8. curl_setopt($ch, CURLOPT_HEADER, 0); 
  9. // 3. 執行并獲取HTML文檔內容 
  10. $output = curl_exec($ch); 
  11. // 4. 錯誤判斷,注意這里是布爾值,而不是空輸出,所以是3個等號 
  12. if ($output === FALSE) { 
  13.     echo "cURL Error: " . curl_error($ch); 
  14. // 獲取 cURL 信息 并輸出 
  15. $info = curl_getinfo($ch); 
  16. echo '獲取 '$info['url'] . ' 耗時 '$info['total_time'] . '秒'
  17. // 5. 釋放curl句柄 
  18. curl_close($ch); 
  19. ?> 

返回的數組中包括了以下信息:

  1. "url"     // 資源網絡地址 
  2. "content_type"     // 內容類型和編碼 
  3. "http_code"     // HTTP狀態碼 
  4. "header_size"     // header的大小 
  5. "request_size"     // 請求的大小 
  6. "filetime"     // 文件創建時間 
  7. "ssl_verify_result"     // SSL驗證結果 
  8. "redirect_count"     // 跳轉技術   
  9. "total_time"     // 總耗時 
  10. "namelookup_time"     // DNS查詢耗時 
  11. "connect_time"     // 等待連接耗時 
  12. "pretransfer_time"     // 傳輸前準備耗時 
  13. "size_upload"     // 上傳數據的大小 
  14. "size_download"     // 下載數據的大小 
  15. "speed_download"     // 下載速度 
  16. "speed_upload"     // 上傳速度 
  17. "download_content_length"     // 下載內容的長度 
  18. "upload_content_length"     // 上傳內容的長度   
  19. "starttransfer_time"     // 開始傳輸的時間 
  20. "redirect_time"     // 重定向耗時 

用POST方法發送數據,新建 from.php,代碼如下:

  1. <?php 
  2. header("Content-type: text/html; charset=utf-8"); 
  3. // 待 post 的數據 
  4. $post_data = array ( 
  5.     "hyh" => "man"
  6.     "xlp" => "woman"
  7.     "love" => "yes" 
  8. ); 
  9. // 1. 初始化 
  10. $ch = curl_init(); 
  11. // 2. 設置選項 
  12. curl_setopt($ch, CURLOPT_URL, "http://localhost/to.php"); 
  13. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  14. curl_setopt($ch, CURLOPT_POST, 1); // 這里設置為post方式 
  15. curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); // 添加準備post的數據 
  16. // 3. 執行并獲取返回內容 
  17. $output = curl_exec($ch); 
  18. // 4. 錯誤判斷,注意這里是布爾值,而不是空輸出,所以是3個等號 
  19. if ($output === FALSE) { 
  20.     echo "cURL Error: " . curl_error($ch); 
  21. // 5. 釋放curl句柄 
  22. curl_close($ch); 
  23. // 輸出內容 
  24. echo $output
  25. ?> 

新建to.php,代碼如下:

  1. <?php 
  2. header("Content-type: text/html; charset=utf-8"); 
  3. echo "從 from.php POST數據到 to.php 成功!以下為 to.php 返回的數據:<br><br>"
  4. print_r($_POST); 
  5. echo "<br><br>I'm come from http://www.phpfensi.com" 
  6. ?> 

文件上傳

上傳文件和前面的POST十分相似,因為所有的文件上傳表單都是通過POST方法提交的。

新建 from.php,代碼如下:

  1. <?php 
  2. header("Content-type: text/html; charset=utf-8"); 
  3. // 待 post 的數據 
  4. $post_data = array ( 
  5.     "hyh" => "man"
  6.     "upload" => "@C:/test.zip" // 要上傳的本地文件地址 
  7. ); 
  8. // 1. 初始化 
  9. $ch = curl_init(); 
  10. // 2. 設置選項 
  11. curl_setopt($ch, CURLOPT_URL, "http://localhost/to.php"); 
  12. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  13. curl_setopt($ch, CURLOPT_POST, 1); // 這里設置為post方式 
  14. curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); // 添加準備post的數據 
  15. // 3. 執行并獲取返回內容 
  16. $output = curl_exec($ch); 
  17. // 4. 錯誤判斷,注意這里是布爾值,而不是空輸出,所以是3個等號 
  18. if ($output === FALSE) { 
  19.     echo "cURL Error: " . curl_error($ch); 
  20. // 5. 釋放curl資源 
  21. curl_close($ch); 
  22. // 輸出內容 
  23. echo $output
  24. ?> 

新建 to.php,代碼如下:

  1. <?php 
  2. header("Content-type: text/html; charset=utf-8"); 
  3. print_r($_FILES); 
  4. ?> 

如果你需要上傳一個文件,只需要把文件路徑像一個post變量一樣傳過去,不過記得在前面加上@符號。

另一些有用的cURL范例

HTTP認證

如果某個URL請求需要基于 HTTP 的身份驗證,你可以使用下面的代碼:

  1. <?php 
  2. header("Content-type: text/html; charset=utf-8"); 
  3. // 1. 初始化 
  4. $ch = curl_init(); 
  5. // 2. 設置選項 
  6. curl_setopt($ch, CURLOPT_URL, "http://www.111cn.net"); 
  7. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  8. curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); // 發送用戶名和密碼 
  9. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 你可以允許其重定向 
  10. curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); // 讓 cURL 在重定向后,也能發送用戶名和密碼 
  11. // 3. 執行并獲取返回內容 
  12. $output = curl_exec($ch); 
  13. // 4. 錯誤判斷,注意這里是布爾值,而不是空輸出,所以是3個等號 
  14. if ($output === FALSE) { 
  15.     echo "cURL Error: " . curl_error($ch); 
  16. // 5. 釋放curl句柄 
  17. curl_close($ch); 
  18. ?> 

FTP上傳

PHP 自帶有 FTP 類庫,但你也能用 cURL,代碼如下:

  1. <?php 
  2. header("Content-type: text/html; charset=utf-8"); 
  3. // 開一個文件指針 
  4. $file = fopen("/path/to/file""r"); 
  5. // 1. 初始化 
  6. $ch = curl_init(); 
  7. // 2. 設置選項 
  8. curl_setopt($ch, CURLOPT_URL, "ftp://username:password@3aj.cn:21/path/to/new/file"); 
  9. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  10. // 上傳相關的選項 
  11. curl_setopt($ch, CURLOPT_UPLOAD, 1); 
  12. curl_setopt($ch, CURLOPT_INFILE, $fp); 
  13. curl_setopt($ch, CURLOPT_INFILESIZE, filesize("/path/to/file")); 
  14. // 是否開啟ASCII模式 (上傳文本文件時有用) 
  15. curl_setopt($ch, CURLOPT_FTPASCII, 1); 
  16. // 3. 執行并獲取返回內容 
  17. $output = curl_exec($ch); 
  18. // 4. 錯誤判斷,注意這里是布爾值,而不是空輸出,所以是3個等號 
  19. if ($output === FALSE) { 
  20.     echo "cURL Error: " . curl_error($ch); 
  21. // 5. 釋放curl句柄 
  22. curl_close($ch); 
  23. ?> 

你可以用代理發起cURL請求,代碼如下:

  1. <?php 
  2. header("Content-type: text/html; charset=utf-8"); 
  3. // 1. 初始化 
  4. $ch = curl_init(); 
  5. // 2. 設置選項 
  6. curl_setopt($ch, CURLOPT_URL, "http://www.phpfensi.com"); 
  7. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  8. curl_setopt($ch, CURLOPT_PROXY, '11.11.11.11:8080'); // 指定代理地址 
  9. curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:pass'); // 如果需要的話,提供用戶名和密碼 
  10. // 3. 執行并獲取返回內容 
  11. $output = curl_exec($ch); 
  12. // 4. 錯誤判斷,注意這里是布爾值,而不是空輸出,所以是3個等號 
  13. if ($output === FALSE) { 
  14.     echo "cURL Error: " . curl_error($ch); 
  15. // 5. 釋放curl句柄 
  16. curl_close($ch); 
  17. ?> 

回調函數

可以在一個URL請求過程中,讓cURL調用某指定的回調函數,例如,在內容或者響應下載的過程中立刻開始利用數據,而不用等到完全下載完,實例代碼如下:

  1. <?php 
  2. header("Content-type: text/html; charset=utf-8"); 
  3. // 1. 初始化 
  4. $ch = curl_init(); 
  5. // 2. 設置選項 
  6. curl_setopt($ch, CURLOPT_URL, "http://www.111cn.net"); 
  7. curl_setopt($ch, CURLOPT_WRITEFUNCTION, "progress_function"); 
  8. // 3. 執行并獲取返回內容 
  9. curl_exec($ch); 
  10. // 4. 錯誤判斷,注意這里是布爾值,而不是空輸出,所以是3個等號 
  11. if ($output === FALSE) { 
  12.     echo "cURL Error: " . curl_error($ch); 
  13. // 5. 釋放curl句柄 
  14. curl_close($ch); 
  15. // 回調函數 
  16. function progress_function($ch$str) { 
  17.     echo $str
  18.     return strlen($str); 
  19. ?> 

這個回調函數必須返回字串的長度,不然此功能將無法正常使用,在URL響應接收的過程中,只要收到一個數據包,這個函數就會被調用。

講到了半天我們再來一個高級實用點的功能cURL來實現ftp上傳

web服務器的上傳限制:

php的默認上傳限制為2M,如果你要上傳超過2M的文件的話,你必須修改你的PHP配置 或者 用下面的代碼建立一個 .htaceess文件,代碼如下:

php_value upload_max_filesize 16M

php_value post_max_size 20M

這里設置最大的文件上傳限制為16M,post_max_size 的值為20M,因為可能在上傳文件的同時,我們還需要POST表單里的其他表單項的值。

建立的 .htaccess 要放在你的上傳腳本同一個目錄下。

使用 cURL 進行文件上傳

cURL 是一個利用URL語法規定來傳輸文件和數據的工具,支持很多種協議,如HTTP、FTP、TELNET等。它能完成很多高難度任務——如處理coockies、驗證、表單提交、文件上傳、ftp上傳等等。

這里,我們準備通過使用web表單來上傳一個文件到ftp空間上,這里的ftp空間是有密碼保護的,代碼如下:

  1. <form action="curlupload.php" method="post" enctype="multipart/form-data"> 
  2.     <div> 
  3.         <label for="upload">Select file</label> 
  4.         <input name="upload" type="file" /> 
  5.         <input type="submit" name="Submit" value="Upload" /> 
  6.     </div> 
  7. </form> 

這個表單頁面比較簡單,僅僅是擁有一個文件上傳的功能,然后我們需要下面的php代碼來接收上傳過來的文件,使用 cURL 打開一個文件流并傳送到遠程ftp服務器上去,實例代碼如下:

  1. if (isset($_POST['Submit'])) { 
  2.     if (!emptyempty($_FILES['upload']['name'])) { 
  3.         $ch = curl_init(); 
  4.         $localfile = $_FILES['upload']['tmp_name']; 
  5.         $fp = fopen($localfile'r'); 
  6.         curl_setopt($ch, CURLOPT_URL, 'ftp://username:password@3aj.cn/'.$_FILES['upload']['name']); 
  7.         curl_setopt($ch, CURLOPT_UPLOAD, 1); 
  8.         curl_setopt($ch, CURLOPT_INFILE, $fp); 
  9.         curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile)); 
  10.         curl_exec($ch); 
  11.         $error_no = curl_errno($ch); 
  12.         curl_close($ch); 
  13.         if ($error_no == 0) { 
  14.             $error = 'File uploaded succesfully.'
  15.         } else { 
  16.             $error = 'File upload error.'
  17.             echo "i come from "
  18.         } 
  19.     } else { 
  20.         $error = 'Please select a file.'
  21.     } 

當用戶選擇了并上傳了一個文件,文件先保存在web服務器上,我們使用 fopen 打開這個臨時文件并初始一個cURL會話,在發送的url中,把ftp的賬號和密碼填上,然后再設置cURL的其他必備參數即可,如果返回的錯誤數量為0,那么文件就上傳成功了。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日韩美女在线看免费观看 | 久久国产精品一区二区三区 | 日韩精品成人一区二区在线观看 | 国产日韩视频在线 | www久久精品| 精品少妇一区二区三区 | 国产精品综合久久 | 精品一区国产 | 伊人三区 | 嫩草影院官网 | 亚洲欧美激情视频 | 欧美一区二区三区免费看 | 网曝91综合精品门事件在线 | 国产男女av| 久久久毛片| 欧产日产国产精品视频 | 国产在线精品成人免费怡红院 | 亚洲三级免费 | 久久久久久久久国产精品 | 偷拍自拍在线视频 | 国产在线一二三四区 | 亚洲午夜在线观看 | 一区在线观看 | 久久精品国产视频 | 精品视频网站 | 欧美一级黄色片免费观看 | 国产精品xxx在线观看www | 日韩99 | 国产在线高潮 | 欧美日韩电影在线观看 | 国产精品一区二区无线 | 亚洲精品福利电影 | 日韩精品视频中文字幕 | 草碰在线视频 | 国产精品国产三级国产在线观看 | 国产精品久久久久久久久搜平片 | 久久久亚洲国产 | 四季av一区二区三区免费观看 | 麻豆乱码国产一区二区三区 | 深夜影院深a | 国外成人在线视频网站 |