最近自己在写公司的接口 好久没发内容了
自己写接口用过很多次的curl 把代码封装起来方便调用 直接发代码
/**
* CURL发送请求
* @param type $url 地址
* @param type $method 请求方式
* @param type $data 请求参数
* @param type $header 请求头
* @return 返回参数
*/
function curl($url,$method='GET',$data=null,$header=null)
{
// 启动一个CURL会话
$curl = curl_init();
// 要访问的地址
curl_setopt($curl,CURLOPT_URL,$url);
//返回数据不直接输出
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, true); // 显示返回的Header区域内容
// curl 请求头设置
if(!empty($header))
{
curl_setopt($curl, CURLOPT_HTTPHEADER, $header); // 模拟参数传递
}
else
{
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
}
// https
// https请求 不验证证书和hosts php版本过低需要开启此项 否则会无法访问https的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
// 从证书中检查SSL加密算法是否存在(默认不需要验证 php版本过低需要开启此项 否则会无法访问https的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
//如果是post请求
if($method === 'POST' || $method === 'post')
{
//开启发送post请求选项
curl_setopt($curl,CURLOPT_POST,true);
//发送post的数据
curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
}
//发送请求
$res = curl_exec($curl);
// 返回参数包含请求头 则此条无效
// $data = json_decode($res,JSON_UNESCAPED_UNICODE);
// 获取响应头大小
$headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
// 根据头大小去获取头信息内容
$header = substr($res, 0, $headerSize);
// 根据头大小去获取响应信息内容
$body = substr($res, $headerSize);
// 获取http状态码
$return_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if(substr($body,0,1) != '{')
{
$body = htmlspecialchars($body);
}
//关闭连接
curl_close($curl);
$arr = [
'header' => $header,
'body' => $body,
'return_code' => $return_code,
];
$res = json_encode($arr);
return $res;
}
最后一次更新于2019-10-09 18:11
0 条评论