You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

203 lines
6.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?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;
}