<?php
/**
* @param array $option ['url'=>'请求地址','header'=>'请求头(格式:['Content-type: text/plain', 'Content-length: 100'])','method'=>'请求方法(默认POST)','data'=>'请求数据(格式:[key=>value])','cookies'=>'设定 HTTP 请求中"Cookie(格式:[key=>value])','timeout'=>'超时时间(默认60秒)','userPwd'=>'传递一个连接中需要的用户名和密码,格式为:"[username]:[password]"','sslPath'=>'证书地址','debug'=>'是否启动调试信息(默认false)']
* @return mixed
*/
function curl(array $option = [])
{
if (!isset($option['url'])) {
return false;
}
$url = $option['url'];
$method = isset($option['method']) ? $option['method'] : 'POST';
$data = isset($option['data']) ? $option['data'] : [];
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, isset($option['timeout']) ? (int)$option['timeout'] : 60); //设置超时 默认60秒
if (isset($option['sslPath']) && file_exists($option['sslPath'])) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);//要验证证书
curl_setopt($ch, CURLOPT_CAINFO, $option['sslPath']);//证书地址
} else {
//跳过SSL证书检查。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); //对认证证书来源的检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //从证书中检查SSL加密算法是否存在
}
if (isset($option['userPwd'])) {
curl_setopt($ch, CURLOPT_USERPWD, $option['userPwd']); //传递一个连接中需要的用户名和密码,格式为:"[username]:[password]"
}
if (isset($option['cookies']) && is_array($option['cookies'])) {
$cookieString = '';
foreach ($option['cookies'] as $name => $value) {
$value = trim($value);
$cookieString .= $name . '=' . $value . '; ';
}
curl_setopt($ch, CURLOPT_COOKIE, $cookieString); //设定 HTTP 请求中"Cookie: "部分的内容。多个 cookie 用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")。
}
switch (strtoupper($method)) {
case "GET" :
curl_setopt($ch, CURLOPT_HTTPGET, true);
if (is_array($data)) $data = http_build_query($data);
if (strstr($url, '?') !== false)
$url = $url . '&' . $data;
else
$url = $url . '?' . $data;
break;
case "POST":
curl_setopt($ch, CURLOPT_POST, true);//POST提交
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//POST值
//全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似'para1=val1¶2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-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");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
break;
}
curl_setopt($ch, CURLOPT_URL, $url);//请求URL
if (isset($option['header']) && is_array($option['header'])) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $option['header']);//请求头 格式:['Content-type: text/plain', 'Content-length: 100']
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //将 curl_exec() 获取的信息以文件流的形式返回,而不是直接输出。
if (isset($option['debug']) && $option['debug']) {
echo '<pre>';
curl_setopt($ch, CURLOPT_VERBOSE, 1); //启用时会汇报所有的信息,存放在STDERR或指定的CURLOPT_STDERR中。
curl_setopt($ch, CURLINFO_HEADER_OUT, true); //启用时追踪句柄的请求字符串。
curl_setopt($ch, CURLOPT_HEADER, true); //启用时会将头文件的信息作为数据流输出。
$httpCode = curl_getinfo($ch);
var_export($httpCode);
echo PHP_EOL . PHP_EOL . PHP_EOL;
} else {
curl_setopt($ch, CURLOPT_HEADER, false); //不将头文件的信息作为数据流输出。
}
$response = curl_exec($ch);//CURLOPT_RETURNTRANSFER 不设置 curl_exec返回TRUE 设置 curl_exec返回json(此处) 失败都返回FALSE
curl_close($ch);
return $response;
}
PHP——CURL方法集合
最新推荐文章于 2022-02-10 10:22:16 发布