1. 程式人生 > >php7實現http和https請求web服務-通用工具類

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代表同一個東西