主题
Php
php
<?php
// 定义常量:AK、SK、域名地址
define('AK','你的ak值');
define('SK','你的sk值');
define('HOST','https://api.niulinkcloud.com');
// get方法执行入口
get();
// post方法执行入口
post();
// get请求:用/v1/vendorclaimablebw作为demo
function get(){
// 1、构建http url
$api = HOST."/v1/vendorclaimablebw";
$contentType = 'application/form';
$query = [
'province' => '河南',
'isp' => '移动',
'usbw' => '1024',
'bwNum' => '5',
'natType' => 'public',
'dialType' => 'serverDial'
];
$url = $api.'?'.http_build_query($query);
// 2、构建http header
$token = get_token($url,"GET");
$header = array(
"Authorization: $token",
"Content-Type: $contentType"
);
// 3、发起http请求
$res = do_curl($url, $header, "GET", NULL);
print_r($res);
}
// post请求:用/v1/nodes/stats接口作为demo
function post(){
// 1、组装htt url
$api = HOST."/v1/nodes/stats";
// 2、构建http request body
$nodeIDs = [
'你的节点ID值'
];
$body = [
'nodeIDs' => json_encode($nodeIDs),
'start' => '2024-12-12',
'end' => '2024-12-13',
];
// 3、构建http header
$contentType = 'application/json';
$token = get_token($api,"POST", $contentType, $body);
$header = array(
"Authorization: $token",
"Content-Type: $contentType"
);
// 4、发起http请求
$res = do_curl($api, $header, "POST", $body);
print_r($res);
}
function do_curl($url, $header, $method, $data = NULL) {
// 创建curl会话的句柄
$curl = curl_init();
// 设置 http url
curl_setopt($curl, CURLOPT_URL, $url);
// 设置 http timeout,单位为秒
curl_setopt($curl, CURLOPT_TIMEOUT, 300);
if ($method == "POST") {
curl_setopt($curl, CURLOPT_POST, 1);
} else if ($method == "PUT" || $method == "DELETE") {
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
}
// 如果$data存在且非空的情况下,设置请求的body数据
if ($data) {
if (is_array($data)) {
$data = json_encode($data);
}
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
// 设置 http header
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
// 当设置为 true 或 1 时,curl_exec() 将返回请求的响应数据,而不是直接输出
// 当设置为 false 或 0 时,curl_exec() 将直接输出响应数据,而不返回
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 发起http请求
$res = curl_exec($curl);
// 获取http status code
$http_code = curl_getinfo($curl)['http_code'];
switch ($http_code){
case 200:
return ['code'=>1,'msg'=>'操作成功','data'=>json_decode($res,true)];
break;
case 400:
case 500:
return json_decode($res,true);
break;
}
curl_close($curl);
return ['code'=>0,'msg'=>'未知错误','data'=>[]];
}
// 获取签名token
function get_token($url, $method, $contentType='', $body=[]) {
// 解析url:url通常由域名、path、queryParam组成
$urlItems = parse_url($url);
// 获取path
$path = '';
if (array_key_exists('path', $urlItems)) {
$path = $urlItems['path'];
}
// 获取查询参数
$query = '';
if (array_key_exists('query', $urlItems)) {
$query = '?' . $urlItems['query'];
}
if ($method == "GET") {
$data = $path;
if ($query) {
$data .= $query;
}
$data .= "\n";
} else {
$host = $urlItems['host'];
if (isset($urlItems['port'])) {
$port = $urlItems['port'];
} else {
$port = '';
}
// 1、拼接请求方法、path
$data = $method . ' ' . $path;
// 2、拼接queryParam
if (!empty($query)) {
$data .= '?' . $query;
}
// 3、拼接host
$data .= "\nHost: " . $host;
// 4、拼接端口
if (!empty($port)) {
$data .= ":" . $port;
}
// 5、拼接contentType
if (!empty($contentType)) {
$data .= "\nContent-Type: " . $contentType;
}
// 6、固定拼接\n\n
$data .= "\n\n";
// 7、最后拼接body
if (!empty($body)) {
$data .= json_encode($body);
}
}
// 使用sha1进行签名
$hmac = hash_hmac('sha1', $data, SK, true);
$prefix = 'Qiniu ';
if ($method == 'GET') {
$prefix = 'QBox ';
}
// str_replace 函数可以用来替换字符串中的字符
// 使用base64_encode进行编码时,得到一个使用 base64字符集的字符串,该字符集包括字母 A-Z、a-z、数字 0-9,以及 '+' 和 '/' 字符。
// 为满足URL安全的要求或避免在URL中出现特殊字符,需要将结果中的'+'和'/'字符替换为其他字符'-' 和'_'
$find = array('+', '/');
$replace = array('-', '_');
return $prefix . AK . ':' . str_replace($find, $replace, base64_encode($hmac));
}