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