/**
* 2018-08-02
* 发送HTTP请求方法,目前只支持CURL发送请求
* @param string $url 请求URL
* @param array $params 请求参数
* @param string $method 请求方法GET/POST
* @param array $header 请求头参数,
* @param boolean $multi 是否上传文件
* @param string $auth_ip 所请求服务器Ip白名单,限制访问ip时使用
* @return array $data 响应数据
*/
public static function http($url, $params=[], $method='GET', $headers=[], $multi=false, $auth_ip='')
{
set_time_limit(0);
// 默认伪造User-Agent
$header_arr=['User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'];
// 拼接header参数
foreach ($headers as $key => $value) {
$header_arr[]=$key.':'.$value;
}
$opts = [
CURLOPT_TIMEOUT => 300,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HTTPHEADER => $header_arr,
];
// 如果对方需要限制访问ip的话
if(!empty($auth_ip)){
$opts[CURLOPT_HTTPheaders][] = 'CLIENT-IP:'. $auth_ip;
$opts[CURLOPT_HTTPHEADER][] = 'X-FORWARDED-FOR:'. $auth_ip;
$opts[CURLOPT_HTTPHEADER][] = 'X-REAL-IP:'. $auth_ip;
}
/* 根据请求类型设置特定参数 */
switch (strtoupper($method)) {
case 'GET':
$opts[CURLOPT_URL] = $params?$url.'?'.http_build_query($params):$url;
break;
case 'POST':
//判断是否传输文件
//$params = $multi ? $params : http_build_query($params);
$opts[CURLOPT_URL] = $url;
$opts[CURLOPT_POST] = 1;
$opts[CURLOPT_POSTFIELDS] = $params;
break;
case 'PUT':
$opts[CURLOPT_HTTPHEADER][] = 'Content-Type: application/json;';
$opts[CURLOPT_URL] = $url;
$opts[CURLOPT_CUSTOMREQUEST] = 'PUT';
$opts[CURLOPT_POSTFIELDS] = json_encode($params);
break;
case 'DELETE':
$opts[CURLOPT_URL] = $params?$url.'?'.http_build_query($params):$url;
$opts[CURLOPT_CUSTOMREQUEST] = 'DELETE';
case 'JSON_POST':
$opts[CURLOPT_HTTPHEADER][] = 'Content-Type: application/json;';
$opts[CURLOPT_URL] = $url;
$opts[CURLOPT_POST] = 1;
$opts[CURLOPT_POSTFIELDS] = json_encode($params);
break;
default:
throw new \Exception('不支持的请求方式!');
}
/* 初始化并执行curl请求 */
$ch = curl_init();
curl_setopt_array($ch, $opts);
$data = curl_exec($ch);
$error = curl_error($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($error) {
throw new \Exception('请求发生错误:'.$error);
}
if ($httpCode != 200) {
$httpCode = $httpCode == 500 ? 506 : $httpCode;
return response($data, $httpCode);
}
return $data;
}
curl封装方法
最新推荐文章于 2021-03-30 14:02:42 发布