用PHP封装一个强大且通用的CURL方法
用PHP封装一个强大且通用的CURL方法
支持:get、post、put、delete、patch、options
/**
* @function 强大且通用的cURL请求库
* @param $url string 路径
* @param $method string 请求方式 如:GET/POST/PUT/DELETE
* @param $data array|string 荷载 如:['key1' => 'value1','key2' => 'value2']
* @param $request_header array 请求头 如: ['Content-Type' => 'application/x-www-form-urlencoded','Authorization'=>'Bearer YOUR_ACCESS_TOKEN']
*/
function curlRequest($url, $method = 'GET', $data = [], $headers = [], $options = [])
{
$data = is_array($data) ? http_build_query($data) : $data;
// 初始化cURL会话
$ch = curl_init($url);
// 设置cURL选项
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回原生的(Raw)输出而不是输出
curl_setopt($ch, CURLOPT_HEADER, true); // 将头文件的信息一并输出
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 自动设置HTTP_REFERER并且获得新的URL
// 设置请求方法
switch (strtoupper($method)) {
case 'GET':
curl_setopt($ch, CURLOPT_HTTPGET, true);
break;
case 'POST':
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
break;
case 'PUT':
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
break;
case 'DELETE':
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
if (!empty($data)) {
$url .= '?' . $data;
}
break;
default:
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, strtoupper($method));
if (!empty($data)) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
break;
}
// 添加HTTP头部
if (!empty($headers)) {
$headerArray = [];
foreach ($headers as $key => $value) {
$headerArray[] = "$key: $value";
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
}
// 应用额外的选项
foreach ($options as $key => $value) {
curl_setopt($ch, $key, $value);
}
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// 执行cURL会话
$response = curl_exec($ch);
// 获取HTTP响应码
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// 检查是否有cURL错误发生
if (curl_errno($ch)) {
throw new Exception(curl_error($ch));
}
// 关闭cURL会话
curl_close($ch);
// 分割响应头和响应体
list($header, $body) = explode("\r\n\r\n", $response, 2);
// 检查HTTP响应码
if ($httpCode >= 400) {
throw new Exception("HTTP error: $httpCode");
}
// 返回响应体
return $body;
}
本文来自博客园,作者:Carvers,转载请注明原文链接:https://www.cnblogs.com/carver/articles/18735446

浙公网安备 33010602011771号