利用curl实现get、post、put、delete、patch请求
<?php
/**
* Class Curl
* 利用curl实现get、post、put、delete、patch请求
*/
class Curl
{
/**
* 发送post请求
* @param $url
* @param $data
* @param $header
* @param string $method
* @param string $type
* @return array
*/
public function curlData($url, $data, $header, $method = 'get', $type = 'json')
{
$ch = curl_init();
if ($type == 'json') {
$headers = ['Content-Type:application/json'];
} elseif ($type == 'form') {
$headers = ['Content-Type:multipart/form-data'];
}else{
$headers = ['Content-Type:application/x-www-form-urlencoded'];
}
$headers = array_merge($headers, $header);
if ($method == 'GET' && !empty($data)) {
if ($type != 'json') {
$querystring = http_build_query($data);
$url = $url . '?' . $querystring;
} else {
$url = $url . '?' . $this->arrToStr($data);
}
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 执行后不直接打印出来
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
switch ($method) {
case 'post':
curl_setopt($ch, CURLOPT_POST, 1); // post提交
if ($type == 'json') {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); // 请求方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // post的变量
} elseif($type == 'form') {
//$new_data['data'] = $data;
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // post的变量
}else{
$querystring = http_build_query($data);
curl_setopt($ch, CURLOPT_POSTFIELDS, $querystring); // post的变量
}
break;
case 'put':
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
break;
case 'delete':
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
break;
default:
curl_setopt($ch, CURLOPT_HTTPGET, true);
break;
}
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
//curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
if (!empty($cookie)) {
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
}
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 不从证书中检查SSL加密算法是否存在
$output = curl_exec($ch);
$return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
//echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
curl_close($ch);
return array('err_code' => $return_code, 'data' => $output);
}
public function arrToStr($data = [])
{
ksort($data);
$str = '';
foreach ($data as $key => $item) {
$str .= $key . '=' . $item . '&';
}
$str = substr($str, 0, strlen($str) - 1);
return $str;
}
}