|
|
<?php
|
|
|
// 请求类
|
|
|
use think\facade\Request;
|
|
|
|
|
|
/**
|
|
|
* 获取当前http协议
|
|
|
* @date 2018-04-18
|
|
|
*/
|
|
|
function getProtocol()
|
|
|
{
|
|
|
if (!input('?server.REQUEST_SCHEME')) {
|
|
|
$protocol = input('server.SERVER_PORT') == 443 ? "https" : "http";
|
|
|
} else {
|
|
|
$protocol = input('server.REQUEST_SCHEME');
|
|
|
}
|
|
|
return $protocol;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取当前的网址
|
|
|
* @date 2018-11-27
|
|
|
*/
|
|
|
function getDomain()
|
|
|
{
|
|
|
return Request::domain();
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* HTTP POST请求
|
|
|
* @param string $url 请求地址
|
|
|
* @param string|array $data 请求数据
|
|
|
* @param string $data_handle 1--json格式 2-- 3--生成URL编码的查询字符串 ''--data不作出任何处理
|
|
|
* @param string $result_handle 1--转为数组格式 ''--不作出任何处理
|
|
|
* @param array $header 定义HEADER
|
|
|
* @date 2021-01-25
|
|
|
*/
|
|
|
function http_data_post($url, $data, $data_handle = 1, $result_handle = 1, $header = [])
|
|
|
{
|
|
|
// 默认header
|
|
|
if (empty($header)) {
|
|
|
$header = [
|
|
|
'Content-Type: application/json'
|
|
|
];
|
|
|
}
|
|
|
|
|
|
//输入参数处理
|
|
|
if ($data_handle == 1) {
|
|
|
// 中文不转为unicode ,对应的数字 256
|
|
|
$data = json_encode($data, JSON_UNESCAPED_UNICODE);
|
|
|
} else if ($data_handle == 2) {
|
|
|
// 编码 URL 字符串
|
|
|
$data = urldecode(json_encode($data, JSON_UNESCAPED_UNICODE));
|
|
|
} else if ($data_handle == 3) {
|
|
|
// 生成 URL 编码的查询字符串
|
|
|
$data = http_build_query($data);
|
|
|
}
|
|
|
|
|
|
// 初始化一个cURL会话
|
|
|
$ch = curl_init();
|
|
|
|
|
|
// 设置cURL传输选项
|
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
|
|
|
// 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
|
|
|
|
|
// 执行一个cURL会话
|
|
|
$result = curl_exec($ch);
|
|
|
|
|
|
// 关闭一个cURL会话
|
|
|
curl_close($ch);
|
|
|
|
|
|
//返回结果处理
|
|
|
if ($result_handle == 1) {
|
|
|
$result = json_decode($result, true);
|
|
|
}
|
|
|
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* HTTP GET 请求
|
|
|
* @param string $url 请求地址
|
|
|
* @param int $result_handle 结果返回格式 1--array 其他--json
|
|
|
* @date 2021-01-22
|
|
|
*/
|
|
|
function http_data_get($url, $result_handle = 1)
|
|
|
{
|
|
|
// 初始化一个cURL会话
|
|
|
$ch = curl_init();
|
|
|
|
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
|
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); //检查服务器SSL证书中是否存在一个公用名
|
|
|
|
|
|
// 执行一个cURL会话
|
|
|
$result = curl_exec($ch);
|
|
|
|
|
|
// 关闭一个cURL会话
|
|
|
curl_close($ch);
|
|
|
|
|
|
if ($result_handle == 1) {
|
|
|
$result = json_decode($result, true);
|
|
|
}
|
|
|
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* HTTP POST批量请求
|
|
|
* @param array $url 请求地址
|
|
|
* @param array $data 请求数据
|
|
|
* @param string $data_handle 1--json格式 2-- 3--生成URL编码的查询字符串 ''--data不作出任何处理
|
|
|
* @param string|int $result_handle 1--转为数组格式 ''--不作出任何处理
|
|
|
* @param array $header 定义HEADER
|
|
|
* @date 2022-08-30
|
|
|
*/
|
|
|
function http_data_multi_post($url, $data, $data_handle = 1, $result_handle = 1, $header = [])
|
|
|
{
|
|
|
// 默认header
|
|
|
if (empty($header)) {
|
|
|
$header = [
|
|
|
'Content-Type: application/json'
|
|
|
];
|
|
|
}
|
|
|
|
|
|
/* 第一步:调用curl_multi_init
|
|
|
第二步:循环调用curl_multi_add_handle
|
|
|
这一步需要注意的是,curl_multi_add_handle的第二个参数是由curl_init而来的子handle。
|
|
|
第三步:持续调用curl_multi_exec
|
|
|
第四步:根据需要循环调用curl_multi_getcontent获取结果
|
|
|
第五步:调用curl_multi_remove_handle,并为每个字handle调用curl_close
|
|
|
第六步:调用curl_multi_close */
|
|
|
|
|
|
// 返回一个新cURL批处理句柄
|
|
|
$mh = curl_multi_init();
|
|
|
|
|
|
foreach ($url as $k => $v) {
|
|
|
//输入参数处理
|
|
|
$post_data = $data[$k];
|
|
|
if ($data_handle == 1) {
|
|
|
// 中文不转为unicode ,对应的数字 256
|
|
|
$post_data = json_encode($post_data, JSON_UNESCAPED_UNICODE);
|
|
|
} else if ($data_handle == 2) {
|
|
|
// 编码 URL 字符串
|
|
|
$post_data = urldecode(json_encode($post_data, JSON_UNESCAPED_UNICODE));
|
|
|
} else if ($data_handle == 3) {
|
|
|
// 生成 URL 编码的查询字符串
|
|
|
$post_data = http_build_query($post_data);
|
|
|
}
|
|
|
|
|
|
// 初始化一个cURL会话
|
|
|
$ch[$k] = curl_init();
|
|
|
|
|
|
// 设置cURL传输选项
|
|
|
curl_setopt($ch[$k], CURLOPT_URL, $url[$k]);
|
|
|
curl_setopt($ch[$k], CURLOPT_POST, true);
|
|
|
curl_setopt($ch[$k], CURLOPT_POSTFIELDS, $post_data);
|
|
|
curl_setopt($ch[$k], CURLOPT_HTTPHEADER, $header);
|
|
|
// 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出
|
|
|
curl_setopt($ch[$k], CURLOPT_RETURNTRANSFER, true);
|
|
|
curl_setopt($ch[$k], CURLOPT_SSL_VERIFYPEER, false);
|
|
|
curl_setopt($ch[$k], CURLOPT_SSL_VERIFYHOST, false);
|
|
|
|
|
|
// 向curl批处理会话中添加单独的curl句柄
|
|
|
curl_multi_add_handle($mh, $ch[$k]);
|
|
|
}
|
|
|
|
|
|
$running = null;
|
|
|
do {
|
|
|
// 延迟执行当前脚本 10 毫秒 (10000微秒)
|
|
|
usleep(10000);
|
|
|
// 运行当前 cURL 句柄的子连接
|
|
|
curl_multi_exec($mh, $running);
|
|
|
} while ($running > 0);
|
|
|
|
|
|
// 定义返回结果
|
|
|
$result = [];
|
|
|
foreach ($url as $k => $v) {
|
|
|
// 则返回获取的输出的文本流
|
|
|
$result[$k] = curl_multi_getcontent($ch[$k]);
|
|
|
|
|
|
// 处理返回值
|
|
|
if ($result_handle == 1) {
|
|
|
$result[$k] = json_decode($result[$k], true);
|
|
|
}
|
|
|
|
|
|
// 移除curl批处理句柄资源中的某个句柄资源
|
|
|
curl_multi_remove_handle($mh, $ch[$k]);
|
|
|
}
|
|
|
|
|
|
// 关闭一组cURL句柄
|
|
|
curl_multi_close($mh);
|
|
|
|
|
|
return $result;
|
|
|
}
|