php7實現http和https請求web服務-通用工具類
前段時間做微信開發,因微信有眾多介面呼叫,因此自己整理了一套比較通用的工具類,用以做介面 呼叫,考慮到方便性和簡潔性,這裡選擇使用php的curl擴充套件庫來實現
1 curl啟用和apache的配置
先來看看網友們提供的眾多錯誤方法,本人被這些資料坑的太慘 了
(1)把dll複製到system32(64位的路徑是其他)附帶重啟apache
(2) 直接到php.ini開啟curl擴充套件即可(這個哪有那麼簡單)
正確的做法如下:
首先開啟curl擴充套件,直接去php.ini裡修改:
; Notes for Windows environments :
;
; - Many DLL files are located in the extensions/ (PHP 4) or ext/ (PHP 5+)
; extension folders as well as the separate PECL DLL download (PHP 5+).
; Be sure to appropriately set the extension_dir directive.
;
;extension=bz2
extension=curl
接著修改apache的配置檔案httpd.conf,在最後加上如下配置,路徑按需修改
LoadFile D:/phpenv/php7/php7ts.dll
LoadFile D:/phpenv/php7/libeay32.dll
LoadFile D:/phpenv/php7/ssleay32.dll
LoadFile D:/phpenv/php7/libssh2.dll
2 直接上工具類程式碼
<?php class RequestUtil{ function https_request($url,$data=null){ $curl=curl_init(); curl_setopt($curl, CURLOPT_URL, $url); if(!empty($data)){ curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl,CURLOPT_POST, true); } curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $result=curl_exec($curl); curl_close($curl); return $result; } function http_request($url,$data=null){ $curl=curl_init(); curl_setopt($curl, CURLOPT_URL, $url); if(!empty($data)){ curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl,CURLOPT_POST, true); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $result=curl_exec($curl); curl_close($curl); return $result; } } ?>
工具類沒寫什麼註釋,如果看不明白,查閱下php開發手冊,裡面有詳細說明
3 有關$data的注意事項
大部分post請求,只需要把引數寫到一個數組裡,以微信自定義選單的建立介面做說明,如下:
$data=json_encode($menuJson,JSON_UNESCAPED_UNICODE)
一些情況下,請求的body可能只是一個字串,此時直接拼接引數即可
$postStr=array("api_key"=>"xxx_","api_secret"=>"xxx","image_base64"=>$res,"return_attributes"=>"gender,age,ethnicity"); $o = ""; foreach ( $postStr as $k => $v ) { $o.= "$k=" . urlencode( $v ). "&" ; } $postStr = substr($o,0,-1);
這裡的$postStr和$data代表同一個東西