PHP curl 請求使用教程

qiaoshuai_job 發表於 2019-08-13
PHP

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版本

qiaoshuai_job


相關文章

在 macOS 下使用 PHP-version 切換 PHP 版本 PHP|macOS

在 macOS 下使用 PHP-version 切換 PHP 版本

本地環境是和公司專案環境保持一致的7.1,可是laravel6.0升級必須要求7.2,(組內有小夥伴的本地環境是7.2,然後push程式碼之後導致專案dev環境無法自動部署),想了想,還是得在本地弄一
PHP 基本校驗 PHP

PHP 基本校驗

&lt;?php class baseValidater { //最大引數個數const MAX_ARGS=3;public static function checkB
Mac 搭建 PHP 開發環境 PHP

Mac 搭建 PHP 開發環境

分享背景由於一直在虛擬機器的狀態下開發PHP,嘗試一下mac本地搭建環境.mac本身是自帶Apache+php的,在低版本的mac系統中,mac中的php版本是5.6的版本.本文分享的是在mac的10
[深圳][11K-18K] 柏斯速眠招聘  PHP 開發工程師  1 名 PHP

[深圳][11K-18K] 柏斯速眠招聘 PHP 開發工程師 1 名

崗位職責1、與產品、設計密切溝通協作,負責後臺業務功能開發;2、擅長分析解決疑難問題,負責後端穩定性與效能優化;3、參與團隊內部技術分享與方案討論。任職要求1、2 - 4年 PHP 開發經驗;2、精通
PHP 單例模式優點意義及如何實現 PHP

PHP 單例模式優點意義及如何實現

設計模式單例模式解決的是如何在整個專案中建立唯一物件例項的問題,工廠模式解決的是如何不通過new建立例項物件的方法。單例模式$_instance必須宣告為靜態的私有變數建構函式和解構函式必須宣告為私有
PHP 基礎 PHP

PHP 基礎

註釋:// 多行註釋.// 單行註釋.變數命規範(1))以$開頭; 如:$a(2)由字母數字下劃線組成,但是不能以數字開頭;(3)可以使用中文,但是不推薦使用;(4)變數名嚴格區分大小寫;(5)
PHP 反射之動態代理 PHP

PHP 反射之動態代理

反射可以探知類的內部結構 可以用它做hook實現外掛功能,或者做動態代理與反射相關類和物件相關的函式get_object_varsget_class_methodsget_class_varsget
🚀 Hyperf 釋出 v1.0.16 版本 | 企業級的 PHP 微服務協程框架 框架|PHP|微服務

🚀 Hyperf 釋出 v1.0.16 版本 | 企業級的 PHP 微服務協程框架

本週更新主要新增了 協程執行控制 的功能,通過 Hyperf\Utils\Coroutine\Concurrent 可以實現一個程式碼塊內限制同時最多執行的協程數量的功能 ,同時還修復了一些元件的 B
JavaScript 和 PHP base64 加密解密 亂碼問題 JavaScript|PHP|加密

JavaScript 和 PHP base64 加密解密 亂碼問題

記錄以下base64加解密base64是通用的加解密方法,JavaScript也有現成的庫可以使用,PHP更是有現成函式可用。1 前端引入一個庫var html_source = base64.enc
PHP 多程式與訊號中斷實現多工常駐記憶體管理【Master/Worker 模型】 PHP

PHP 多程式與訊號中斷實現多工常駐記憶體管理【Master/Worker 模型】

本文章基於pcntl擴充套件做的多程式測試。程式排程策略:父子程式的排程由作業系統來負責,具體先排程子程式還是父程式由系統的排程演算法決定,當然可以在父程式加上延時或是呼叫程式回收函式pcntl_wa
關於 PHP 記憶體溢位的思考 PHP

關於 PHP 記憶體溢位的思考

背景最近做大批量資料匯出和資料匯入的時候,經常會遇到PHP記憶體溢位的問題,在解決了問題之後,總結了一些經驗,整理成文章記錄下。優化點優化SQL語句,避免慢查詢,合理的建立索引,查詢指定的欄位,sql
手把手使用 PHP 實現 LRU 快取淘汰演算法 演算法|PHP

手把手使用 PHP 實現 LRU 快取淘汰演算法

:pencil2:LRU(cache):hourglass:LRU介紹快取是一種提高資料讀取效能的技術。但是對於計算機來說,並不可能快取所有的資料,在達到它的臨界空間時,我們需要通過一些規則用新的資料