php通用curl操作

//通用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;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值