亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php CURL函數入門教程詳解

2024-09-04 11:48:15
字體:
來源:轉載
供稿:網友

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

cURL簡介

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

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

  1. <?php 
  2. // 把整個文件讀入一個字符串中 
  3. $str = file_get_contents("http://www.49028c.com"); 
  4. // 把整個文件讀入一個數組中 
  5. $arr = file("http://www.49028c.com"); 
  6. // 讀入一個文件并寫入到輸出緩沖 
  7. $out = readfile("http://www.49028c.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.49028c.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.49028c.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,那么文件就上傳成功了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久亚洲影视| 在线观看欧美日韩国产| 亚洲一区二区久久| 亚洲国产精品电影在线观看| 97成人精品视频在线观看| 久久久女女女女999久久| 久久视频在线观看免费| 日韩视频免费在线| 日韩av片电影专区| 亚洲黄色免费三级| 欧美疯狂xxxx大交乱88av| 国产精品久久久久aaaa九色| 最近2019好看的中文字幕免费| 日韩精品福利网站| 国产亚洲a∨片在线观看| 精品网站999www| 亚洲国语精品自产拍在线观看| 91在线视频免费| 欧美性猛交xxxx免费看| 91在线播放国产| 国产亚洲精品日韩| 永久免费看mv网站入口亚洲| 91视频-88av| 国产精品丝袜久久久久久高清| 国产高清在线不卡| 欧美精品日韩www.p站| 色综合伊人色综合网站| 日韩中文字幕视频在线观看| 亚洲最大av网站| 国产成人精品999| 日韩成人激情影院| 久久久久国产精品www| 日韩av片永久免费网站| 成人av色在线观看| 992tv成人免费影院| 国产欧美日韩精品专区| 欧美综合一区第一页| 国产精品极品尤物在线观看| 国产日韩精品综合网站| 国产成人亚洲综合| 久久精品电影一区二区| 日韩av三级在线观看| 欧美日韩电影在线观看| 精品国内产的精品视频在线观看| 久久人体大胆视频| 色综合亚洲精品激情狠狠| 国产午夜精品理论片a级探花| 亚洲欧美国产日韩中文字幕| 久久99精品视频一区97| 欧美亚洲国产视频| 欧美激情在线播放| 中文字幕亚洲图片| 日韩av第一页| 久久五月天色综合| 欧美日本亚洲视频| 国产精品一区二区久久国产| 日韩av成人在线| 日韩在线观看你懂的| 精品女厕一区二区三区| 亚洲美女视频网站| 91视频国产精品| 久久夜色精品国产欧美乱| 成人激情综合网| 国产免费一区视频观看免费| 欧美午夜精品久久久久久久| 欧美日韩午夜视频在线观看| 国产精品第三页| 国产日韩在线一区| 成人黄色在线观看| 久久频这里精品99香蕉| 亚洲欧美精品伊人久久| 国产精品三级美女白浆呻吟| 川上优av一区二区线观看| 亚洲人成在线观| 中国日韩欧美久久久久久久久| 日韩在线视频免费观看高清中文| 亚洲天堂日韩电影| 国产欧美精品久久久| 成人国产在线激情| 国产精品极品美女粉嫩高清在线| 欧美激情成人在线视频| 亚洲电影免费观看高清完整版在线观看| 日本在线精品视频| 欧美日韩在线观看视频| 亚洲女人被黑人巨大进入| 欧美午夜宅男影院在线观看| 欧美在线欧美在线| 黄色成人在线免费| 久久影院中文字幕| 国产精品h片在线播放| 亚洲精品视频网上网址在线观看| 亚洲欧洲高清在线| 97久久超碰福利国产精品…| 亚洲精品美女视频| 97视频在线播放| 91精品久久久久久久久久入口| 欧美精品成人91久久久久久久| 国产成人久久久精品一区| 国产精品美女999| 欧美日韩另类视频| 日韩性生活视频| 国产91精品黑色丝袜高跟鞋| 国内成人精品视频| 国产欧美亚洲视频| 欧美性xxxxxxxxx| 国产精品无av码在线观看| 亚洲欧美日韩国产中文专区| 91麻豆国产语对白在线观看| 久99九色视频在线观看| 亚洲一级一级97网| 亚洲视频axxx| 国产一区二区三区在线观看视频| 亚洲天堂视频在线观看| 国产精欧美一区二区三区| 国产精品一区二区av影院萌芽| 精品久久久国产| 日韩美女写真福利在线观看| 精品电影在线观看| 日本午夜精品理论片a级appf发布| 亚洲综合成人婷婷小说| 日韩成人小视频| 国产精品户外野外| 91精品国产一区| 中文日韩电影网站| 欧美日韩在线观看视频| 亚洲人成在线电影| 亚洲精品美女网站| 亚洲字幕一区二区| 亚洲大尺度美女在线| 国产精品 欧美在线| 在线观看亚洲视频| 国产精品日韩久久久久| 国产精品吊钟奶在线| 欧美成人午夜视频| 色妞色视频一区二区三区四区| 国产成人亚洲综合91| 久久久久国色av免费观看性色| 97国产成人精品视频| 欧美日韩亚洲天堂| 中文精品99久久国产香蕉| 亚洲第一色中文字幕| 国产精品青青在线观看爽香蕉| 国产精品福利观看| 欧美视频一二三| 亚洲自拍偷拍第一页| 一本一本久久a久久精品综合小说| 亚洲欧洲国产伦综合| 97久久超碰福利国产精品…| 国产精品久久久久久av福利| 欧美猛交免费看| 国产成人在线视频| 国产精品视频永久免费播放| 国产精品99久久久久久白浆小说| 日韩在线免费av| 欧美日韩亚洲一区二区三区| 午夜精品国产精品大乳美女| 国产精品久久久久一区二区| 成人有码视频在线播放| 综合网中文字幕| 久久久精品视频成人| 久久免费在线观看| 最新的欧美黄色| 国产a∨精品一区二区三区不卡| 国产美女久久精品|