123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- <?php
-
- namespace qcloudcos;
-
- function my_curl_reset($handler) {
- curl_setopt($handler, CURLOPT_URL, '');
- curl_setopt($handler, CURLOPT_HTTPHEADER, array());
- curl_setopt($handler, CURLOPT_POSTFIELDS, array());
- curl_setopt($handler, CURLOPT_TIMEOUT, 0);
- curl_setopt($handler, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($handler, CURLOPT_SSL_VERIFYHOST, 0);
- }
-
- class HttpClient {
- private static $httpInfo = '';
- private static $curlHandler;
-
- /**
- * send http request
- * @param array $request http请求信息
- * url : 请求的url地址
- * method : 请求方法,'get', 'post', 'put', 'delete', 'head'
- * data : 请求数据,如有设置,则method为post
- * header : 需要设置的http头部
- * host : 请求头部host
- * timeout : 请求超时时间
- * cert : ca文件路径
- * ssl_version: SSL版本号
- * @return string http请求响应
- */
- public static function sendRequest($request) {
- if (self::$curlHandler) {
- if (function_exists('curl_reset')) {
- curl_reset(self::$curlHandler);
- } else {
- my_curl_reset(self::$curlHandler);
- }
- } else {
- self::$curlHandler = curl_init();
- }
-
- curl_setopt(self::$curlHandler, CURLOPT_URL, $request['url']);
-
- $method = 'GET';
- if (isset($request['method']) &&
- in_array(strtolower($request['method']), array('get', 'post', 'put', 'delete', 'head'))) {
- $method = strtoupper($request['method']);
- } else if (isset($request['data'])) {
- $method = 'POST';
- }
-
- $header = isset($request['header']) ? $request['header'] : array();
- $header[] = 'Method:'.$method;
- $header[] = 'User-Agent:'.Conf::getUserAgent();
- $header[] = 'Connection: keep-alive';
-
- isset($request['host']) && $header[] = 'Host:' . $request['host'];
- curl_setopt(self::$curlHandler, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt(self::$curlHandler, CURLOPT_CUSTOMREQUEST, $method);
- isset($request['timeout']) && curl_setopt(self::$curlHandler, CURLOPT_TIMEOUT, $request['timeout']);
-
- if (isset($request['data']) && in_array($method, array('POST', 'PUT'))) {
- if (defined('CURLOPT_SAFE_UPLOAD')) {
- curl_setopt(self::$curlHandler, CURLOPT_SAFE_UPLOAD, true);
- }
-
- curl_setopt(self::$curlHandler, CURLOPT_POST, true);
- array_push($header, 'Expect: 100-continue');
-
- if (is_array($request['data'])) {
- $arr = buildCustomPostFields($request['data']);
- array_push($header, 'Content-Type: multipart/form-data; boundary=' . $arr[0]);
- curl_setopt(self::$curlHandler, CURLOPT_POSTFIELDS, $arr[1]);
- } else {
- curl_setopt(self::$curlHandler, CURLOPT_POSTFIELDS, $request['data']);
- }
- }
- curl_setopt(self::$curlHandler, CURLOPT_HTTPHEADER, $header);
-
- $ssl = substr($request['url'], 0, 8) == "https://" ? true : false;
- if( isset($request['cert'])){
- curl_setopt(self::$curlHandler, CURLOPT_SSL_VERIFYPEER,true);
- curl_setopt(self::$curlHandler, CURLOPT_CAINFO, $request['cert']);
- curl_setopt(self::$curlHandler, CURLOPT_SSL_VERIFYHOST,2);
- if (isset($request['ssl_version'])) {
- curl_setopt(self::$curlHandler, CURLOPT_SSLVERSION, $request['ssl_version']);
- } else {
- curl_setopt(self::$curlHandler, CURLOPT_SSLVERSION, 4);
- }
- }else if( $ssl ){
- curl_setopt(self::$curlHandler, CURLOPT_SSL_VERIFYPEER,false); //true any ca
- curl_setopt(self::$curlHandler, CURLOPT_SSL_VERIFYHOST,1); //check only host
- if (isset($request['ssl_version'])) {
- curl_setopt(self::$curlHandler, CURLOPT_SSLVERSION, $request['ssl_version']);
- } else {
- curl_setopt(self::$curlHandler, CURLOPT_SSLVERSION, 4);
- }
- }
- $ret = curl_exec(self::$curlHandler);
- self::$httpInfo = curl_getinfo(self::$curlHandler);
- return $ret;
- }
-
- public static function info() {
- return self::$httpInfo;
- }
- }
|