小兔网

GET案例

/**
* curl_get
* @param $url
* @param null $param
* @param null $options
* @return array
*/
function curl_get($url, $param = null, $options = null){
$defaultOptions = array(
'timeout' => 30, // 超时时间(秒)
// header(请求头) Array|String 推荐使用数组
// 参数格式1(数组):
// array('Content-type: text/plain', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36')
// 参数格式2(字符串):
// $header = "Content-type: text/plain \n User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36";
'header' => [],
'get_header' => false, // 是否返回请求头,默认false
// 请求头里的cookie(字符串) String 直接复制浏览器请求头里set-cookie即可
'cookie' => '',
// cookiePath String cookie文件路径,需要可读写权限
'cookie_file' => '',
// 是否启动跟踪,重定向页面是否跟随跳转
'followlocation' => 0,
// 禁止服务器端的验证ssl
'ssl' => 0,
// 伪装请求来源,绕过防盗
'referer' => null
);
// 处理默认值
foreach ($defaultOptions as $key => $item) {
if(!isset($options[$key])){
$options[$key] = $item;
}
}
$result = array(
'code' => 0,
'msg' => 'success',
'body' => ''
);
if (is_array($param)) {
$param = http_build_query($param);
}
$url = strstr($url,'?')? trim($url,'&').'&'.$param: $url.'?'.$param;

$ch = curl_init(); // curl初始化
curl_setopt($ch, CURLOPT_URL, $url); // 设置url
// 判断&设置超时
!empty($options['timeout']) && curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']);
// 判断&设置请求头
if (!empty($options['header'])) {
if (is_string($options['header'])) {
$header = str_replace(array("\r\n", "\r", "\n"), "__SLONG__", $options['header']); // 将换行符转换为特定字符串
$header = explode('__SLONG__', $header); // 通过特定字符串分割成数组
$options['header'] = array_values(array_filter($header)); // 去除空元素,重组数组
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $options['header']);
}
// cookie,如果要保持自动更新cookie的话只能用cookie_file文件路径方式来
//,curl会自己读取cookie_file路径的文件转为cookie在连接时自己带过去
//, 并在有新cookie更新时写入到文件里
if (!empty($options['cookie_file']) && file_exists($options['cookie_file'])) {
// 自动同步更新
curl_setopt($ch, CURLOPT_COOKIEFILE, $options['cookie_file']);
curl_setopt($ch, CURLOPT_COOKIEJAR, $options['cookie_file']);
} elseif (!empty($options['cookie'])) {
// 固定cookie
curl_setopt($ch, CURLOPT_COOKIE, $options['cookie']);
}
// 是否跟踪(重定向页面是否继续抓取)
!empty($options['followlocation']) && curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $options['followlocation']);
// 禁止服务器端的验证ssl
empty($options['ssl']) && curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']);
//伪装请求来源,绕过防盗
!empty($options['referer']) && curl_setopt($ch, CURLOPT_REFERER, $options['referer']);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); //curl解压gzip页面内容
curl_setopt($ch, CURLOPT_HEADER, 0);// 不获取请求头
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 输出转移,不输出页面
// 设置预设之外的参数
if (count($options) != count($defaultOptions)) {
foreach ($options as $key => $item) {
if (!isset($defaultOptions[$key])) {
curl_setopt($ch, $key, $item);
}
}
}
//执行并获取内容
$output = curl_exec($ch);
//对获取到的内容进行操作
if ($output === false) {
$result['code'] = 1; // 错误
$result['msg'] = "CURL Error:".curl_error($ch);
} else {
if ($options['get_header']) {
// 获得响应结果里的:头大小
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
// 根据头大小去获取头信息内容
$result['header'] = substr($output, 0, $headerSize);
$result['body'] = substr($output, $headerSize);
}else{
$result['body'] = $output;
}
}
//释放curl句柄
curl_close($ch);
return $result;
}

POST案例

/**
* curl_post
* @param $url 请求地址
* @param null $param get参数
* @param array $options 配置参数
* @return array
*/
function curl_post($url, $param = null, $options = array()){
$defaultOptions = array(
'timeout' => 30, // 超时时间(秒)
// header(请求头) Array|String 推荐使用数组
// 参数格式1(数组):
// array('Content-type: text/plain', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36')
// 参数格式2(字符串):
// $header = "Content-type: text/plain \n User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36";
'header' => [],
'get_header' => false, // 是否返回请求头,默认false
// 请求头里的cookie(字符串) String 直接复制浏览器请求头里set-cookie即可
'cookie' => '',
// cookiePath String cookie文件路径,需要可读写权限
'cookie_file' => '',
// 是否启动跟踪,重定向页面是否跟随跳转
'followlocation' => 0,
// 禁止服务器端的验证ssl
'ssl' => 0,
// 伪装请求来源,绕过防盗
'referer' => null
);
// 处理默认值
foreach ($defaultOptions as $key => $item) {
if (!isset($options[$key])) {
$options[$key] = $item;
}
}
$result = array(
'code' => 0,
'msg' => 'success',
'body' => ''
);
if (is_array($param)) {
$param = http_build_query($param);
}
$ch = curl_init(); // curl初始化
curl_setopt($ch, CURLOPT_URL, $url); // 设置url
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
// 判断&设置超时
!empty($options['timeout']) && curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']);
// 判断&设置请求头
if (!empty($options['header'])) {
if (is_string($options['header'])) {
$header = str_replace(array("\r\n", "\r", "\n"), "__SLONG__", $options['header']); // 将换行符转换为特定字符串
$header = explode('__SLONG__', $header); // 通过特定字符串分割成数组
$options['header'] = array_values(array_filter($header)); // 去除空元素,重组数组
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $options['header']);
}
// cookie,如果要保持自动更新cookie的话只能用cookie_file文件路径方式来
//,curl会自己读取cookie_file路径的文件转为cookie在连接时自己带过去
//, 并在有新cookie更新时写入到文件里
if (!empty($options['cookie_file']) && file_exists($options['cookie_file'])) {
// 自动同步更新
curl_setopt($ch, CURLOPT_COOKIEFILE, $options['cookie_file']);
curl_setopt($ch, CURLOPT_COOKIEJAR, $options['cookie_file']);
} elseif (!empty($options['cookie'])) {
// 固定cookie
curl_setopt($ch, CURLOPT_COOKIE, $options['cookie']);
}
// 是否跟踪(重定向页面是否继续抓取)
!empty($options['followlocation']) && curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $options['followlocation']);
// 禁止服务器端的验证ssl
empty($options['ssl']) && curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']);
//伪装请求来源,绕过防盗
!empty($options['referer']) && curl_setopt($ch, CURLOPT_REFERER, $options['referer']);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); //curl解压gzip页面内容
curl_setopt($ch, CURLOPT_HEADER, 0);// 不获取请求头
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 输出转移,不输出页面
// 设置预设之外的参数
if (count($options) != count($defaultOptions)) {
foreach ($options as $key => $item) {
if (!isset($defaultOptions[$key])) {
curl_setopt($ch, $key, $item);
}
}
}
//执行并获取内容
$output = curl_exec($ch);
//对获取到的内容进行操作
if ($output === false) {
$result['code'] = 1; // 错误
$result['msg'] = "CURL Error:".curl_error($ch);
} else {
if ($options['get_header']) {
// 获得响应结果里的:头大小
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
// 根据头大小去获取头信息内容
$result['header'] = substr($output, 0, $headerSize);
$result['body'] = substr($output, $headerSize);
} else {
$result['body'] = $output;
}
}
//释放curl句柄
curl_close($ch);
return $result;
}

其他请求类型请自己参考封装处理