1、cURL庫
cURL庫是一個非常強大的開源庫,支持很多協議,包括HTTP、FTP、TELNET等,在微信開發中,我們使用它來發送HTTP請求。它給我們帶來的好處是可以通過靈活的選項設置不同的HTTP協議參數,並且支持HTTPS。
要使用cURL庫那麼你的php版本里面必須包含該庫的擴展(就如你使用gd庫一樣)
請求原理(權威PHP指南):
2、cURL四步走
第一步:創建curl,使用curl_init()函數
第二步:設置curl,使用curl_setopt()函數
第三步:執行curl,使用curl_exec()函數
第四步:關閉curl,使用curl_close()函數
-
cURL最重要的幾個選項
#安全上傳(主要是爲了兼容php5.6在微信中的應用)
CURLOPT_SAFE_UPLOAD
#需要獲取的 URL 地址
CURLOPT_URL
#SSL證書中是否存在一個公用名,證書和主機名(認證的域名)
CURLOPT_SSL_VERIFYHOST
#服務器端校檢SSL證書
CURLOPT_SSL_VERIFYPEER
#是否以字符串形式進行返回
CURLOPT_RETURNTRANSFER
#是否使用post方式進行請求
CURLOPT_POST
#POST請求時需要post的數據包
CURLOPT_POSTFIELDS
-
使用cURL庫請求百度的例子
在學習curl的時候,必須要確定環境當中就有curl庫的php擴展
如果沒有curl擴展就需要補充這個擴展的安裝,執行以下命令
yum -y install --enablerepo=remi --enablerepo=remi-php56 php-curl
如果成功安裝過curl,那麼在phpinfo當中就會返回curl的擴展
第1個例子:使用curl請求百度,然後把百度返回(使用http方式進行請求)
參考代碼:php/http_baidu.php,上傳到/var/www/html下進行測試
執行結果如下:
由於curl它可以把頁面返回,所以有些不法分子利用其做釣魚網站.
第2個例子:使用curl請求百度,然後把百度返回(使用https方式進行請求)
首先我們把代碼修改成以下形式:
參考代碼:php/https_baidu.php,上傳到/var/www/html下進行測試
執行測試的結果,返回如下:
如果你有提交過百度的安全認證那麼纔可以正常的訪問,但是難道如果我們對網站發出https請求我們就需要每一個網站都提交一次安全認證嗎?如果不想每一次通過https訪問一個網站,你都提交一次安全認證那麼我們就需要在curl端禁止百度訪問ssl安全認證證書
由於https請求有一個安全套件存在,所以必須要使用ssl證書(安全認證)進行提交訪問過程。
問題來了:
curl初始化的瀏覽器是一個存在與編譯器當中的虛擬瀏覽器,那麼何來ssl證書呢?
答:如果需要解決這個問題,我們就需要禁止請求的服務器對瀏覽器的ssl證書進行驗證。
我們需要使用以下兩個重要的參數進行設置:
#SSL證書中是否存在一個公用名,證書和主機名
CURLOPT_SSL_VERIFYHOST
#服務器端校檢SSL證書
CURLOPT_SSL_VERIFYPEER
因此我們需要把curl的代碼修改爲如下結果:
再次測試就可以得到正常的結果:
-
Post請求snk147.duapp.com測試接口
接口地址:http://snk147.duapp.com/postApi.php
參數:data
不設置任何選項的情況下,直接就請求了地址,會返回以下結果:
由於curl在默認的情況下是get請求,而接口要求是post的請求,並且要附帶post的相關請求參數data過去才能請求成功,因此我們需要把curl代碼修改爲post的,修改代碼如下:
重新測試,效果如下:
這時就代表請求成功,雖然你Post了3個參數,然後api接口只關心data這個字段,因此其他它忽略了。至此其實curl庫對於微信開發來說我們就完成了,然而有一個這樣的問題產生,需要我們注意的,它也是你在面試微信開發職位的時候需要的一個經驗值:
在微信開發誕生的時候,微信的開發者其實對微信的安全機制設置都不夠,因此在上傳的時候就會被黑客注入木馬,後來微信發展成熟了,那麼微信就開啓了木馬安全機制,因此curl上傳的數據就會被嚴格的認證,除了ssl證書以爲,還有微信內部的token認證,關鍵的還有微信要求你上傳的時候要設置安全認證上傳才能夠調用微信的媒體上傳接口,否則你就會失敗,然而微信開發者的文檔很坑爹,它是在以前會告訴你這小細節,但微信每天更新文檔是看心情的,所以這個小細節它就已經去除了,那麼只有你遇到媒體上傳接口才能驗證這一點,如果沒有經驗的人會很鬱悶,因此我們就需要在學習之處就瞭解這點:
參考代碼:php/wx.php
就算你開啓了安全認證的上傳機制對post請求是不會產生影響的,但對於微信來說就算完美對接形式: