//通用curl操作
function _curl($url, $data="", $type="POST", $options=null){
if(empty($url)){
return false;
}
$type = in_array(strtoupper($type), ['POST','GET','PUT','PATCH','DELETE']) ? strtoupper($type) : "POST";
$connect_timeout = isset($options["connect_timeout"]) ? $options["connect_timeout"] : 60;
$curlopt_timeout = isset($options["curlopt_timeout"]) ? $options["curlopt_timeout"] : 30;
$ch = curl_init();
curl_setopt($ch, CURLOPT_ENCODING, ''); //编码格式
curl_setopt($ch, CURLOPT_AUTOREFERER, 1); //自动设置Referer
curl_setopt($ch, CURLOPT_FAILONERROR, false); //不显示400等错误详情
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //获取的信息以字符串返回
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connect_timeout); //尝试连接时等待的秒数,0不限制
curl_setopt($ch, CURLOPT_TIMEOUT, $curlopt_timeout); //允许 cURL 函数执行的最长秒数
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //允许自动进行跳转抓取
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); //最多允许跳转多少次
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); //使用的HTTP协议
// curl_setopt($ch, CURLOPT_HEADER, true); //返回response头部信息
curl_setopt($ch, CURLINFO_HEADER_OUT, true); //TRUE 时追踪句柄的请求字符串,从 PHP 5.1.3 开始可用。这个很关键,就是允许你查看请求header
if(isset($options["ua"])){
curl_setopt( $ch, CURLOPT_USERAGENT, (is_bool($options["ua"]) ? "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" : $options["ua"]) );
}
if(isset($options["curlopt_timeout_ms"])){
curl_setopt($ch, CURLOPT_TIMEOUT_MS, $options["curlopt_timeout_ms"]);//允许 cURL 函数执行的最长毫秒数
}
//https 请求
if(strlen($url)>5 && strtolower(substr($url,0,5))=="https") {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
if(isset($options["headers"]) || isset($options["json"])){
$headers = isset($options["headers"]) ? (is_array($options["headers"]) ? $options["headers"] : [$options["headers"]]) : [];
if(isset($options["json"])){
$headers[] = "Content-Type: application/json";
$headers[] = "cache-control: no-cache";
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
switch(strtoupper($type)){
case "GET" :
curl_setopt($ch, CURLOPT_HTTPGET, true);
$data = empty($data) ? "" : (is_array($data) ? http_build_query($data) : $data);
$url .= strrchr($url,"?")===false ? (empty($data) ? "" : "?".$data) : "&".$data; break;
default :
if($type=="POST"){
curl_setopt($ch, CURLOPT_POST, true);
}else{
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $type);
}
if(isset($options["json"]) && is_array($data)){
$data = json_encode($data);
}
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);//获得返回值
//dump(curl_getinfo($ch));//获取连接资源句柄的信息
curl_close($ch);
return $result;
}
php通用curl操作
于 2020-09-11 14:58:49 首次发布