admin/app/common/services/qcloud/HttpClient.php

109 lines
4.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\common\services\qcloud;
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 = yz_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;
}
}