请求类型合并
function httpAsk($url = '',$method = 'GET',$params = [],$headers = ["Content-type:application/json","Accept:application/json"],$configs = ['sslVerifyPeer'=>false,'sslVerifyHost'=>false])
{
if(!$url){
return error();
}
$curlInit = curl_init();
if(!empty($headers)){
curl_setopt($curlInit, CURLOPT_HTTPHEADER, $headers);
}
curl_setopt($curlInit, CURLOPT_RETURNTRANSFER, true);//是直接显示结果(echo)还是将结果返回(return)
curl_setopt($curlInit, CURLOPT_TIMEOUT, 500);//是以秒为单位的最大时间量,单个cURL扩展函数调用的执行将受到限制
curl_setopt($curlInit, CURLOPT_SSL_VERIFYPEER, $configs['sslVerifyPeer']);//是否检查服务器SSL证书中是否存在一个公用名
curl_setopt($curlInit, CURLOPT_SSL_VERIFYHOST, $configs['sslVerifyHost']);//是否检查证书中是否有CN(common name)字段
$method = strtoupper($method);
switch ($method){
case 'GET':
$url = empty($params) ? $url : $url . http_build_query($params);
break;
case 'POST':
curl_setopt($curlInit, CURLOPT_POST, true);
if (!empty($params)) {
curl_setopt($curlInit, CURLOPT_POSTFIELDS, is_array($params) ? http_build_query($params) : $params);
}
break;
case 'PUT':
case 'DELETE':
case 'PATCH':
curl_setopt($curlInit, CURLOPT_CUSTOMREQUEST, $method);
if (!empty($params)) {
curl_setopt($curlInit, CURLOPT_POSTFIELDS, is_array($params) ? http_build_query($params) : $params);
}
break;
default:
}
// 设置URL
curl_setopt($curlInit, CURLOPT_URL, $url);
// 执行请求
$res = curl_exec($curlInit);
// 检查错误
if ($res === false) {
$error = curl_error($curlInit);
curl_close($curlInit);
return error("cURL错误: " . $error);
}
curl_close($curlInit);
return success(data:$res);
}
GET请求
public function httpGet($url)
{
$header = array("Content-type:application/json;","Accept:application/json");
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//是直接显示结果(echo)还是将结果返回(return)
curl_setopt($curl, CURLOPT_TIMEOUT, 500);//是以秒为单位的最大时间量,单个cURL扩展函数调用的执行将受到限制
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//是否检查服务器SSL证书中是否存在一个公用名
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);//是否检查证书中是否有CN(common name)字段
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl,CURLOPT_HTTPHEADER,$header);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
POST请求
public function httpPost($url, $data = [])
{
$data = json_encode($data);
$header = array("Content-type:application/json;charset='utf-8'","Accept:application/json");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
$return = curl_exec($ch);
curl_close($ch);
return $return;
}
PUT请求
public function httpPut($url, $data = [])
{
$data = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,"PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
DEL请求
public function httpDel($url, $data = [])
{
$data = json_encode($data);
$ch = curl_init();
curl_setopt ($ch,CURLOPT_URL,$put_url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
$output = curl_exec($ch);
curl_close($ch);
$output = $output;
}
PATCH请求
public function httpPatch($url, $data = [])
{
$data = json_encode($data);
$ch = curl_init();
curl_setopt ($ch,CURLOPT_URL,$url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
参数解释
curl_init()
初始化一个cURL会话。
curl_setopt()
设置一个cURL传输选项。
CURLOPT_TIMEOUT
告诉成功 PHP 从服务器接收缓冲完成前需要等待多长时间
CURLOPT_SSL_VERIFYPEER
设置为FALSE 禁止 cURL 验证对等证书(peer’s certificate)
CURLOPT_SSL_VERIFYHOST的值
设为0表示不检查证书
设为1表示检查证书中是否有CN(common name)字段
设为2表示在1的基础上校验当前的域名是否与CN匹配
CURLOPT_URL
需要获取的URL地址
CURLOPT_HTTPHEADER
一个用来设置HTTP头字段的数组。使用如下的形式的数组进行设置: array('Content-type: text/plain', 'Content-length: 100')
curl_exec()
执行一个cURL会话。
curl_close()
关闭一个cURL会话。
CURLOPT_POST
启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。
CURLOPT_HEADER
启用时会将头文件的信息作为数据流输出。
CURLOPT_RETURNTRANSFER
为true将curl_exec()获取的信息以文件流的形式返回,而不是直接输出
CURLOPT_POSTFIELDS
全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似'para1=val1¶2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data。
CURLOPT_CUSTOMREQUEST
使用一个自定义的请求信息来代替"GET"或"HEAD"作为HTTP请求。这对于执行"DELETE" 或者其他更隐蔽的HTTP请求。有效值如"GET","POST","CONNECT"等等。也就是说,不要在这里输入整个HTTP请求。例如输入"GET /index.html HTTP/1.0\r\n\r\n"是不正确的。