|
|
<?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;
|
|
|
}
|
|
|
}
|