cURL可以使用URL的語法模擬瀏覽器來傳輸資料,因為它是模擬瀏覽器,因此它同樣支援多種協議,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP等協議都可以很好的支援,包括一些:HTTPS認證,HTTP POST方法,HTTP PUT方法,FTP上傳,keyberos認證,HTTP上傳,代理伺服器,cookies,使用者名稱/密碼認證,下載檔案斷點續傳,上傳檔案斷點續傳,http代理伺服器管道,甚至它還支援IPv6,scoket5代理伺服器,通過http代理伺服器上傳檔案到FTP伺服器等等。
使用PHP的cURL庫可以簡單和有效地去抓網頁。 你只需要執行一個指令碼,然後分析一下你所抓取的網頁,然後就可以以程式的方式得到你想要的資料了。無論是你想從從一個連結上取部分資料,或是取一個XML檔案並把其匯入資料庫,那怕就是簡單的獲取網頁內容,cURL 是一個功能強大的PHP庫。
1、PHP建立CURL請求的基本步驟
①:初始化
curl_init()
②:設定屬性
curl_setopt()
.有一長串cURL引數可供設定,它們能指定URL請求的各個細節。
③:執行並獲取結果
curl_exec()
④:釋放控制程式碼
curl_close()
2、例項:
php curl 傳送get請求:
//初始化
$curl = curl_init();
//設定抓取的url
curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');
//設定標頭檔案的資訊作為資料流輸出
curl_setopt($curl, CURLOPT_HEADER, 1);
//設定獲取的資訊以檔案流的形式返回,而不是直接輸出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//執行命令
$data = curl_exec($curl);
echo curl_getinfo($curl,CURLINFO_HTTP_CODE); //輸出請求狀態碼
//關閉URL請求
curl_close($curl);
//顯示獲得的資料
print_r($data);
php curl 傳送post請求:
//初始化
$curl = curl_init();
//設定抓取的url
curl_setopt($curl, CURLOPT_URL, 'http://localhost/test/test.php');
//設定標頭檔案的資訊作為資料流輸出
curl_setopt($curl, CURLOPT_HEADER, 1);
//設定獲取的資訊以檔案流的形式返回,而不是直接輸出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//設定post方式提交
curl_setopt($curl, CURLOPT_POST, 1);
//設定post資料
$post_data = array(
"title" => "1290800466",
"content" => "3424243243"
);
//post提交的資料
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
//執行命令
$data = curl_exec($curl);
//關閉URL請求
curl_close($curl);
//顯示獲得的資料
print_r($data);
test.php:
<?php
$title = $_REQUEST['title'];
$content = $_REQUEST['content'];
error_log($title."\n",3,'error.log');
error_log($content."\n",3,'error.log');
echo 'ok';
3、PHP cURL 函式:
以下包含了PHP cURL函式列表:
函式 | 描述 |
---|---|
curl_close() | 關閉一個cURL會話。 |
curl_copy_handle() | 複製一個cURL控制程式碼和它的所有選項。 |
curl_errno() | 返回最後一次的錯誤號。 |
curl_error() | 返回一個保護當前會話最近一次錯誤的字串。 |
curl_escape() | 返回轉義字串,對給定的字串進行URL編碼。 |
curl_file_create() | 建立一個 CURLFile 物件。 |
curl_getinfo() | 獲取一個cURL連線資源控制程式碼的資訊。 |
curl_init() | 初始化一個cURL會話。 |
curl_multi_add_handle() | 向curl批處理會話中新增單獨的curl控制程式碼。 |
curl_multi_close() | 關閉一組cURL控制程式碼。 |
curl_multi_exec() | 執行當前 cURL 控制程式碼的子連線。 |
curl_multi_getcontent() | 如果設定了CURLOPT_RETURNTRANSFER,則返回獲取的輸出的文字流。 |
curl_multi_info_read() | 獲取當前解析的cURL的相關傳輸資訊。 |
curl_multi_init() | 返回一個新cURL批處理控制程式碼。 |
curl_multi_remove_handle() | 移除curl批處理控制程式碼資源中的某個控制程式碼資源。 |
curl_multi_select() | 等待所有cURL批處理中的活動連線。 |
curl_multi_setopt() | 設定一個批處理cURL傳輸選項。 |
curl_multi_strerror() | 返回描述錯誤碼的字串文字。 |
curl_pause() | 暫停及恢復連線。 |
curl_reset() | 重置libcurl的會話控制程式碼的所有選項。 |
curl_setopt_array() | 為cURL傳輸會話批量設定選項。 |
curl_setopt() | 設定一個cURL傳輸選項。 |
curl_share_close() | 關閉cURL共享控制程式碼。 |
curl_share_init() | 初始化cURL共享控制程式碼。 |
curl_share_setopt() | 設定一個共享控制程式碼的cURL傳輸選項。 |
curl_strerror() | 返回錯誤程式碼的字串描述。 |
curl_unescape() | 解碼URL編碼後的字串。 |
curl_version() | 獲取cURL版本資訊。 |
成功時返回 TRUE, 或者在失敗時返回 FALSE。
一些狀態程式碼
1xx:請求收到,繼續處理
2xx:操作成功收到,分析、接受
3xx:完成此請求必須進一步處理
4xx:請求包含一個錯誤語法或不能完成
5xx:伺服器執行一個完全有效請求失敗
100——客戶必須繼續發出請求
101——客戶要求伺服器根據請求轉換HTTP協議版本
200——交易成功
201——提示知道新檔案的URL
202——接受和處理、但處理未完成
203——返回資訊不確定或不完整
204——請求收到,但返回資訊為空
205——伺服器完成了請求,使用者代理必須復位當前已經瀏覽過的檔案
206——伺服器已經完成了部分使用者的GET請求
300——請求的資源可在多處得到
301——刪除請求資料
302——在其他地址發現了請求資料
303——建議客戶訪問其他URL或訪問方式
304——客戶端已經執行了GET,但檔案未變化
305——請求的資源必須從伺服器指定的地址得到
306——前一版本HTTP中使用的程式碼,現行版本中不再使用
307——申明請求的資源臨時性刪除
400——錯誤請求,如語法錯誤
401——請求授權失敗
402——保留有效ChargeTo頭響應
403——請求不允許
404——沒有發現檔案、查詢或URl
405——使用者在Request-Line欄位定義的方法不允許
406——根據使用者傳送的Accept拖,請求資源不可訪問
407——類似401,使用者必須首先在代理伺服器上得到授權
408——客戶端沒有在使用者指定的餓時間內完成請求
409——對當前資源狀態,請求不能完成
410——伺服器上不再有此資源且無進一步的參考地址
411——伺服器拒絕使用者定義的Content-Length屬性請求
412——一個或多個請求頭欄位在當前請求中錯誤
413——請求的資源大於伺服器允許的大小
414——請求的資源URL長於伺服器允許的長度
415——請求資源不支援請求專案格式
416——請求中包含Range請求頭欄位,在當前請求資源範圍內沒有range指示值,請求
也不包含If-Range請求頭欄位
417——伺服器不滿足請求Expect頭欄位指定的期望值,如果是代理伺服器,可能是下一級伺服器不能滿足請求
500——伺服器產生內部錯誤
501——伺服器不支援請求的函式
502——伺服器暫時不可用,有時是為了防止發生系統過載
503——伺服器過載或暫停維修
504——關口過載,伺服器使用另一個關口或服務來響應使用者,等待時間設定值較長
505——伺服器不支援或拒絕支請求頭中指定的HTTP版本