1.8.0
This commit is contained in:
@@ -18,7 +18,7 @@ class ViewOutput
|
|||||||
{
|
{
|
||||||
View::assign('islogin', $request->islogin);
|
View::assign('islogin', $request->islogin);
|
||||||
View::assign('user', $request->user);
|
View::assign('user', $request->user);
|
||||||
View::assign('cdn_cdnjs', config_get('cdn_cdnjs', '//cdn.staticfile.org/'));
|
View::assign('cdn_cdnjs', config_get('cdn_cdnjs', '//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/'));
|
||||||
View::assign('cdn_npm', config_get('cdn_npm', 'https://unpkg.com/'));
|
View::assign('cdn_npm', config_get('cdn_npm', 'https://unpkg.com/'));
|
||||||
View::config(['view_path' => template_path_get()]);
|
View::config(['view_path' => template_path_get()]);
|
||||||
return $next($request)->header([
|
return $next($request)->header([
|
||||||
|
|||||||
Generated
+60
-57
@@ -8,20 +8,20 @@
|
|||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "cccyun/think-captcha",
|
"name": "cccyun/think-captcha",
|
||||||
"version": "3.0.7",
|
"version": "3.0.9",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/netcccyun/think-captcha.git",
|
"url": "https://github.com/netcccyun/think-captcha.git",
|
||||||
"reference": "ba2997f1c3fbcf2aae3dd5a80c8285a957121523"
|
"reference": "dcbc3f2cc29749c962cc8ad5d12ae59a30d73b24"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/netcccyun/think-captcha/zipball/ba2997f1c3fbcf2aae3dd5a80c8285a957121523",
|
"url": "https://api.github.com/repos/netcccyun/think-captcha/zipball/dcbc3f2cc29749c962cc8ad5d12ae59a30d73b24",
|
||||||
"reference": "ba2997f1c3fbcf2aae3dd5a80c8285a957121523",
|
"reference": "dcbc3f2cc29749c962cc8ad5d12ae59a30d73b24",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"topthink/framework": "^6.0.0"
|
"topthink/framework": "^6.0|^8.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
@@ -54,9 +54,9 @@
|
|||||||
],
|
],
|
||||||
"description": "captcha package for thinkphp",
|
"description": "captcha package for thinkphp",
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/netcccyun/think-captcha/tree/3.0.7"
|
"source": "https://github.com/netcccyun/think-captcha/tree/3.0.9"
|
||||||
},
|
},
|
||||||
"time": "2022-10-21T03:33:53+00:00"
|
"time": "2023-06-02T03:38:07+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "khanamiryan/qrcode-detector-decoder",
|
"name": "khanamiryan/qrcode-detector-decoder",
|
||||||
@@ -163,25 +163,25 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/http-message",
|
"name": "psr/http-message",
|
||||||
"version": "1.0.1",
|
"version": "1.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/http-message.git",
|
"url": "https://github.com/php-fig/http-message.git",
|
||||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
|
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
|
"url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
|
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.0"
|
"php": "^7.2 || ^8.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.0.x-dev"
|
"dev-master": "1.1.x-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -210,9 +210,9 @@
|
|||||||
"response"
|
"response"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/php-fig/http-message/tree/master"
|
"source": "https://github.com/php-fig/http-message/tree/1.1"
|
||||||
},
|
},
|
||||||
"time": "2016-08-06T14:39:51+00:00"
|
"time": "2023-04-04T09:50:52+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/log",
|
"name": "psr/log",
|
||||||
@@ -317,16 +317,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "topthink/framework",
|
"name": "topthink/framework",
|
||||||
"version": "v6.1.2",
|
"version": "v6.1.4",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/top-think/framework.git",
|
"url": "https://github.com/top-think/framework.git",
|
||||||
"reference": "67235be5b919aaaf1de5aed9839f65d8e766aca3"
|
"reference": "66eb9cf4d627df12911344cd328faf9bb596bf2c"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/top-think/framework/zipball/67235be5b919aaaf1de5aed9839f65d8e766aca3",
|
"url": "https://api.github.com/repos/top-think/framework/zipball/66eb9cf4d627df12911344cd328faf9bb596bf2c",
|
||||||
"reference": "67235be5b919aaaf1de5aed9839f65d8e766aca3",
|
"reference": "66eb9cf4d627df12911344cd328faf9bb596bf2c",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -376,9 +376,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/top-think/framework/issues",
|
"issues": "https://github.com/top-think/framework/issues",
|
||||||
"source": "https://github.com/top-think/framework/tree/v6.1.2"
|
"source": "https://github.com/top-think/framework/tree/v6.1.4"
|
||||||
},
|
},
|
||||||
"time": "2023-02-08T02:24:01+00:00"
|
"time": "2023-07-11T15:16:03+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "topthink/think-helper",
|
"name": "topthink/think-helper",
|
||||||
@@ -428,24 +428,27 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "topthink/think-migration",
|
"name": "topthink/think-migration",
|
||||||
"version": "v3.0.5",
|
"version": "v3.1.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/top-think/think-migration.git",
|
"url": "https://github.com/top-think/think-migration.git",
|
||||||
"reference": "7a5ec3952ea97bf1a5d8872e1bd10f2abf6294ca"
|
"reference": "22c44058e1454f3af1d346e7f6524fbe654de7fb"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/top-think/think-migration/zipball/7a5ec3952ea97bf1a5d8872e1bd10f2abf6294ca",
|
"url": "https://api.github.com/repos/top-think/think-migration/zipball/22c44058e1454f3af1d346e7f6524fbe654de7fb",
|
||||||
"reference": "7a5ec3952ea97bf1a5d8872e1bd10f2abf6294ca",
|
"reference": "22c44058e1454f3af1d346e7f6524fbe654de7fb",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"topthink/framework": "^6.0",
|
"php": ">=7.2",
|
||||||
|
"topthink/framework": "^6.0 || ^8.0",
|
||||||
"topthink/think-helper": "^3.0.3"
|
"topthink/think-helper": "^3.0.3"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"fzaninotto/faker": "^1.8"
|
"composer/composer": "^2.5.8",
|
||||||
|
"fzaninotto/faker": "^1.8",
|
||||||
|
"robmorgan/phinx": "^0.13.4"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"fzaninotto/faker": "Required to use the factory builder (^1.8)."
|
"fzaninotto/faker": "Required to use the factory builder (^1.8)."
|
||||||
@@ -460,7 +463,7 @@
|
|||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Phinx\\": "phinx/src/Phinx",
|
"Phinx\\": "phinx",
|
||||||
"think\\migration\\": "src"
|
"think\\migration\\": "src"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -476,22 +479,22 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/top-think/think-migration/issues",
|
"issues": "https://github.com/top-think/think-migration/issues",
|
||||||
"source": "https://github.com/top-think/think-migration/tree/v3.0.5"
|
"source": "https://github.com/top-think/think-migration/tree/v3.1.1"
|
||||||
},
|
},
|
||||||
"time": "2023-02-26T13:16:22+00:00"
|
"time": "2023-09-14T05:51:31+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "topthink/think-orm",
|
"name": "topthink/think-orm",
|
||||||
"version": "v2.0.60",
|
"version": "v2.0.61",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/top-think/think-orm.git",
|
"url": "https://github.com/top-think/think-orm.git",
|
||||||
"reference": "8bc34a4307fa27186c0e96a9b3de3cb23aa1ed46"
|
"reference": "10528ebf4a5106b19c3bac9c6deae7a67ff49de6"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/top-think/think-orm/zipball/8bc34a4307fa27186c0e96a9b3de3cb23aa1ed46",
|
"url": "https://api.github.com/repos/top-think/think-orm/zipball/10528ebf4a5106b19c3bac9c6deae7a67ff49de6",
|
||||||
"reference": "8bc34a4307fa27186c0e96a9b3de3cb23aa1ed46",
|
"reference": "10528ebf4a5106b19c3bac9c6deae7a67ff49de6",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -531,9 +534,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/top-think/think-orm/issues",
|
"issues": "https://github.com/top-think/think-orm/issues",
|
||||||
"source": "https://github.com/top-think/think-orm/tree/v2.0.60"
|
"source": "https://github.com/top-think/think-orm/tree/v2.0.61"
|
||||||
},
|
},
|
||||||
"time": "2023-03-19T04:51:56+00:00"
|
"time": "2023-04-20T14:27:51+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "topthink/think-template",
|
"name": "topthink/think-template",
|
||||||
@@ -621,16 +624,16 @@
|
|||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-mbstring",
|
"name": "symfony/polyfill-mbstring",
|
||||||
"version": "v1.27.0",
|
"version": "v1.28.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||||
"reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
|
"reference": "42292d99c55abe617799667f454222c54c60e229"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
|
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229",
|
||||||
"reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
|
"reference": "42292d99c55abe617799667f454222c54c60e229",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -645,7 +648,7 @@
|
|||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "1.27-dev"
|
"dev-main": "1.28-dev"
|
||||||
},
|
},
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/polyfill",
|
"name": "symfony/polyfill",
|
||||||
@@ -684,7 +687,7 @@
|
|||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
|
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -700,20 +703,20 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-11-03T14:55:06+00:00"
|
"time": "2023-07-28T09:04:16+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-php72",
|
"name": "symfony/polyfill-php72",
|
||||||
"version": "v1.27.0",
|
"version": "v1.28.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-php72.git",
|
"url": "https://github.com/symfony/polyfill-php72.git",
|
||||||
"reference": "869329b1e9894268a8a61dabb69153029b7a8c97"
|
"reference": "70f4aebd92afca2f865444d30a4d2151c13c3179"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97",
|
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179",
|
||||||
"reference": "869329b1e9894268a8a61dabb69153029b7a8c97",
|
"reference": "70f4aebd92afca2f865444d30a4d2151c13c3179",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -722,7 +725,7 @@
|
|||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "1.27-dev"
|
"dev-main": "1.28-dev"
|
||||||
},
|
},
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/polyfill",
|
"name": "symfony/polyfill",
|
||||||
@@ -760,7 +763,7 @@
|
|||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0"
|
"source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -776,20 +779,20 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-11-03T14:55:06+00:00"
|
"time": "2023-01-26T09:26:14+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-php80",
|
"name": "symfony/polyfill-php80",
|
||||||
"version": "v1.27.0",
|
"version": "v1.28.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||||
"reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
|
"reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
|
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
|
||||||
"reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
|
"reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -798,7 +801,7 @@
|
|||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "1.27-dev"
|
"dev-main": "1.28-dev"
|
||||||
},
|
},
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/polyfill",
|
"name": "symfony/polyfill",
|
||||||
@@ -843,7 +846,7 @@
|
|||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0"
|
"source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -859,7 +862,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-11-03T14:55:06+00:00"
|
"time": "2023-01-26T09:26:14+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/var-dumper",
|
"name": "symfony/var-dumper",
|
||||||
|
|||||||
+1
-1
@@ -48,7 +48,7 @@ INSERT INTO `toolbox_config` (`key`, `value`) VALUES
|
|||||||
('captcha_id', ''),
|
('captcha_id', ''),
|
||||||
('captcha_key', ''),
|
('captcha_key', ''),
|
||||||
('ip_type', '0'),
|
('ip_type', '0'),
|
||||||
('cdn_cdnjs', '//cdn.staticfile.org/'),
|
('cdn_cdnjs', '//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/'),
|
||||||
('cdn_npm', 'https://unpkg.com/'),
|
('cdn_npm', 'https://unpkg.com/'),
|
||||||
('description', '这是一个非常Nice的在线工具箱'),
|
('description', '这是一个非常Nice的在线工具箱'),
|
||||||
('foot_code', ''),
|
('foot_code', ''),
|
||||||
|
|||||||
@@ -29,6 +29,36 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="form-label">下载链接</label>
|
<label class="form-label">下载链接</label>
|
||||||
<div class="form-control-wrap">
|
<div class="form-control-wrap">
|
||||||
|
<select v-model="set.nodeurl" type="text" class="form-control">
|
||||||
|
<optgroup label="运营商">
|
||||||
|
<option value="https://freeserver.migufun.com/resource/beta/apk/20231114094513/MiguPlay-V3.69.1.1_miguzsj.apk">
|
||||||
|
咪咕快游①</option>
|
||||||
|
<option value="https://freeserver.migufun.com/resource/beta/video/system/20210924112351666.mp4">
|
||||||
|
咪咕快游②</option>
|
||||||
|
<option value="https://im.zdxlz.com/downloadmi/file-im-sdk/apk/mobile/%E9%87%8F%E5%AD%90%E5%AF%86%E4%BF%A1.apk">
|
||||||
|
量子密信</option>
|
||||||
|
<option value="https://img.mcloud.139.com/material_prod/material_media/20221128/1669626861087.png">
|
||||||
|
和彩云</option>
|
||||||
|
<option value="https://vod-origin-rjzy.gdoss.xstore.ctyun.cn/1de5da90486f42e8939deed107fd64a3.mp4">
|
||||||
|
天翼云</option>
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="其他">
|
||||||
|
<option value="https://vipspeedtest8.wuhan.net.cn:8080/download?size=1073741824" selected>
|
||||||
|
电信测速</option>
|
||||||
|
<option value="https://mirrors.sjtug.sjtu.edu.cn/speedtest/garbage?ckSize=1024">
|
||||||
|
上海交大</option>
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="全球[Global]">
|
||||||
|
<option value="https://speed.cloudflare.com/__down?bytes=104857600">
|
||||||
|
Cloudflare</option>
|
||||||
|
<option value="https://akamtrans-a.akamaihd.net/delivery/2023/08/30/brand-protector-2500k-00004.ts">
|
||||||
|
Akamai</option>
|
||||||
|
<option value="https://gh.con.sh/https://github.com/AaronFeng753/Waifu2x-Extension-GUI/releases/download/v2.21.12/Waifu2x-Extension-GUI-v2.21.12-Portable.7z">
|
||||||
|
Cloudflare Workers</option>
|
||||||
|
<option value="https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RW16Ptm">
|
||||||
|
Microsoft Akamai</option>
|
||||||
|
</optgroup>
|
||||||
|
</select>
|
||||||
<input type="text" v-model="set.input" placeholder="下载链接" class="form-control" autocomplete="off">
|
<input type="text" v-model="set.input" placeholder="下载链接" class="form-control" autocomplete="off">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -91,12 +121,14 @@ new Vue({
|
|||||||
el: '#app',
|
el: '#app',
|
||||||
data: {
|
data: {
|
||||||
set: {
|
set: {
|
||||||
input: 'https://web1.cachefly.net/speedtest/downloading',
|
nodeurl: 'https://vipspeedtest8.wuhan.net.cn:8080/download?size=1073741824',
|
||||||
|
input: '',
|
||||||
output: '',
|
output: '',
|
||||||
infinite: true,
|
infinite: true,
|
||||||
status: false,
|
status: false,
|
||||||
thread: 1,
|
thread: 4,
|
||||||
},
|
},
|
||||||
|
node_list: [],
|
||||||
tasks: [],
|
tasks: [],
|
||||||
speed: '0.00B/s',
|
speed: '0.00B/s',
|
||||||
spend: 0,
|
spend: 0,
|
||||||
@@ -127,8 +159,14 @@ new Vue({
|
|||||||
clearInterval(this.timer)
|
clearInterval(this.timer)
|
||||||
this.cancelSource.cancel()
|
this.cancelSource.cancel()
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
'set.nodeurl'(newVal) {
|
||||||
|
this.set.input = newVal
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
mounted() {
|
||||||
|
this.set.input = this.set.nodeurl
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
run() {
|
run() {
|
||||||
this.set.status = !this.set.status
|
this.set.status = !this.set.status
|
||||||
|
|||||||
@@ -41,6 +41,9 @@ class dianping implements api
|
|||||||
if($url){
|
if($url){
|
||||||
$visitid = getSubstr($url, 'visitId=', '&');
|
$visitid = getSubstr($url, 'visitId=', '&');
|
||||||
if($visitid){
|
if($visitid){
|
||||||
|
$url = 'https://kf.dianping.com/api/portal/message/init?visitId='.$visitid.'&accessToken=undefined';
|
||||||
|
$post = '{"type":"Init","parameters":{"isPreview":true,"build":null}}';
|
||||||
|
get_curl($url, $post);
|
||||||
cache('dianping_visitid', $visitid, 86400);
|
cache('dianping_visitid', $visitid, 86400);
|
||||||
return $visitid;
|
return $visitid;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,87 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* uniCloud文件快传
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace plugin\utility\unicloud;
|
|
||||||
|
|
||||||
use app\Plugin;
|
|
||||||
use think\facade\Db;
|
|
||||||
use plugin\utility\unicloud\UnicloudClient;
|
|
||||||
use Exception;
|
|
||||||
|
|
||||||
class App extends Plugin
|
|
||||||
{
|
|
||||||
|
|
||||||
private $unicloud;
|
|
||||||
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
return $this->view();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function preUpload(){
|
|
||||||
if(!input('?post.filename'))exit('{"code":-1,"msg":"请选择文件"}');
|
|
||||||
|
|
||||||
try{
|
|
||||||
$this->getSession();
|
|
||||||
} catch (Exception $e) {
|
|
||||||
return ['code'=>-1, 'msg'=>'获取AccessToken失败:' . $e->getMessage()];
|
|
||||||
}
|
|
||||||
|
|
||||||
try{
|
|
||||||
$result = $this->unicloud->pre_upload_file(input('post.filename'));
|
|
||||||
$fileurl = 'https://'.$result['cdnDomain'].'/'.$result['ossPath'];
|
|
||||||
session('unicloud_filename', input('post.filename'));
|
|
||||||
session('unicloud_fileurl', $fileurl);
|
|
||||||
return json(['code'=>0, 'data'=>$result]);
|
|
||||||
} catch (Exception $e) {
|
|
||||||
return json(['code'=>-1, 'msg'=>'准备文件上传失败:' . $e->getMessage()]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function completeUpload(){
|
|
||||||
if(!input('?post.id'))exit('{"code":-1,"msg":"no id"}');
|
|
||||||
|
|
||||||
try{
|
|
||||||
$this->getSession();
|
|
||||||
} catch (Exception $e) {
|
|
||||||
return ['code'=>-1, 'msg'=>'获取AccessToken失败:' . $e->getMessage()];
|
|
||||||
}
|
|
||||||
|
|
||||||
try{
|
|
||||||
$result = $this->unicloud->complete_upload_file(input('post.id'));
|
|
||||||
|
|
||||||
Db::name('uploadlog')->insert([
|
|
||||||
'uid' => request()->islogin ? request()->user['id'] : 0,
|
|
||||||
'type' => 'file',
|
|
||||||
'source' => 'unicloud',
|
|
||||||
'filename' => session('unicloud_filename'),
|
|
||||||
'fileurl' => session('unicloud_fileurl'),
|
|
||||||
'ip' => $this->clientip,
|
|
||||||
'addtime' => date("Y-m-d H:i:s")
|
|
||||||
]);
|
|
||||||
session('unicloud_filename', null);
|
|
||||||
session('unicloud_fileurl', null);
|
|
||||||
|
|
||||||
return json(['code'=>0, 'data'=>$result]);
|
|
||||||
} catch (Exception $e) {
|
|
||||||
return json(['code'=>-1, 'msg'=>'完成文件上传失败:' . $e->getMessage()]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getSession(){
|
|
||||||
include dirname(__FILE__).'/config.php';
|
|
||||||
$this->unicloud = new UnicloudClient($spaceId, $clientSecret);
|
|
||||||
if(session('access_token') && session('access_token_expire') && session('access_token_expire')>time()){
|
|
||||||
$access_token = session('access_token');
|
|
||||||
$this->unicloud->set_access_token($access_token);
|
|
||||||
}else{
|
|
||||||
$access_token = $this->unicloud->get_access_token();
|
|
||||||
session('access_token', $access_token);
|
|
||||||
session('access_token_expire', time()+600);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,144 +0,0 @@
|
|||||||
<?php
|
|
||||||
// uniCloud云存储客户端
|
|
||||||
|
|
||||||
namespace plugin\utility\unicloud;
|
|
||||||
|
|
||||||
use Exception;
|
|
||||||
|
|
||||||
class UnicloudClient {
|
|
||||||
private $spaceId;
|
|
||||||
private $clientSecret;
|
|
||||||
private $endpoint = "https://api.bspapp.com";
|
|
||||||
private $accessToken = null;
|
|
||||||
|
|
||||||
function __construct($spaceId, $clientSecret){
|
|
||||||
$this->spaceId = $spaceId;
|
|
||||||
$this->clientSecret = $clientSecret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function set_access_token($accessToken){
|
|
||||||
$this->accessToken = $accessToken;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取AccessToken
|
|
||||||
public function get_access_token(){
|
|
||||||
if(!empty($this->accessToken)) return $this->accessToken;
|
|
||||||
$param = [
|
|
||||||
'method' => 'serverless.auth.user.anonymousAuthorize',
|
|
||||||
'params' => '{}',
|
|
||||||
'spaceId' => $this->spaceId,
|
|
||||||
'timestamp' => $this->msec_time()
|
|
||||||
];
|
|
||||||
$sign = $this->get_sign($param);
|
|
||||||
$payload = json_encode($param);
|
|
||||||
$header = [
|
|
||||||
'x-serverless-sign: '.$sign
|
|
||||||
];
|
|
||||||
$result = $this->curl_post($payload, $header);
|
|
||||||
$this->accessToken = $result['accessToken'];
|
|
||||||
return $this->accessToken;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取文件上传信息
|
|
||||||
public function pre_upload_file($filename){
|
|
||||||
$method = 'serverless.file.resource.generateProximalSign';
|
|
||||||
$params = [
|
|
||||||
'env' => 'public',
|
|
||||||
'filename' => $filename
|
|
||||||
];
|
|
||||||
$result = $this->send_request($method, $params);
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 完成文件上传
|
|
||||||
public function complete_upload_file($id){
|
|
||||||
$method = 'serverless.file.resource.report';
|
|
||||||
$params = [
|
|
||||||
'id' => $id
|
|
||||||
];
|
|
||||||
$this->send_request($method, $params);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 删除文件(不支持阿里云)
|
|
||||||
public function delete_file($id){
|
|
||||||
$method = 'serverless.file.resource.delete';
|
|
||||||
$params = [
|
|
||||||
'id' => $id
|
|
||||||
];
|
|
||||||
$this->send_request($method, $params);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function send_request($method, $params){
|
|
||||||
$access_token = $this->get_access_token();
|
|
||||||
$postparam = [
|
|
||||||
'method' => $method,
|
|
||||||
'params' => json_encode($params),
|
|
||||||
'spaceId' => $this->spaceId,
|
|
||||||
'timestamp' => $this->msec_time(),
|
|
||||||
'token' => $access_token
|
|
||||||
];
|
|
||||||
$sign = $this->get_sign($postparam);
|
|
||||||
$payload = json_encode($postparam);
|
|
||||||
$header = [
|
|
||||||
'x-basement-token: '.$access_token,
|
|
||||||
'x-serverless-sign: '.$sign
|
|
||||||
];
|
|
||||||
$result = $this->curl_post($payload, $header);
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function get_sign($param){
|
|
||||||
$signPars = "";
|
|
||||||
ksort($param);
|
|
||||||
foreach ($param as $k => $v) {
|
|
||||||
if ($v != '') {
|
|
||||||
$signPars .= $k . '=' . $v . '&';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$signPars = substr($signPars, 0, -1);
|
|
||||||
$sign = hash_hmac('md5', $signPars, $this->clientSecret);
|
|
||||||
return $sign;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function msec_time() {
|
|
||||||
list($msec, $sec) = explode(' ', microtime());
|
|
||||||
$msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
|
|
||||||
return $msectime;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function curl_post($payload, $header){
|
|
||||||
$url = $this->endpoint.'/client';
|
|
||||||
$httpheader[] = "accept: */*";
|
|
||||||
$httpheader[] = "accept-encoding: gzip,deflate,sdch";
|
|
||||||
$httpheader[] = "accept-language: zh-CN,zh;q=0.8";
|
|
||||||
$httpheader[] = "cache-control: no-cache";
|
|
||||||
$httpheader[] = "content-type: application/json";
|
|
||||||
$httpheader[] = "pragma: no-cache";
|
|
||||||
$httpheader[] = "connection: close";
|
|
||||||
$httpheader = array_merge($httpheader, $header);
|
|
||||||
$ch=curl_init($url);
|
|
||||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
||||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
|
||||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
|
|
||||||
curl_setopt($ch, CURLOPT_POST, 1);
|
|
||||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
|
|
||||||
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36');
|
|
||||||
$json=curl_exec($ch);
|
|
||||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
||||||
curl_close($ch);
|
|
||||||
if($httpCode==200){
|
|
||||||
$arr=json_decode($json,true);
|
|
||||||
if($arr['success'] == true){
|
|
||||||
return $arr['data'];
|
|
||||||
}else{
|
|
||||||
throw new Exception($arr['error']['message'] ? $arr['error']['message'] : '未知错误');
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
throw new Exception('curl error! httpcode='.$httpCode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
$spaceId = '10b3891b-be67-4103-a60f-9da1d057470c';
|
|
||||||
|
|
||||||
$clientSecret = '6H2YuHYH4Cju+/5K8YIJjA==';
|
|
||||||
@@ -1,312 +0,0 @@
|
|||||||
{extend name="common/plugin_layout" /}
|
|
||||||
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
|
|
||||||
{block name="main"}
|
|
||||||
<style>
|
|
||||||
.btn-block {
|
|
||||||
white-space:normal;
|
|
||||||
}
|
|
||||||
.btn-active {background-color: #1c2b46;color: #fff;}
|
|
||||||
</style>
|
|
||||||
<div class="container-xl" id="app">
|
|
||||||
<div class="col-sm-12 col-md-10 col-xl-9 center-block">
|
|
||||||
<div class="card card-preview">
|
|
||||||
<div class="card-inner mt-3">
|
|
||||||
<div class="nya-title nk-ibx-action-item progress-rating">
|
|
||||||
<span class="nk-menu-text font-weight-bold">uniCloud文件快传</span>
|
|
||||||
</div>
|
|
||||||
<div class="progress progress-lg mt-1 mb-1">
|
|
||||||
<div class="progress-bar progress-bar-striped progress-bar-animated" v-bind:style="{ width: progress + '%' }">{{progress}}%</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="text-center pt-5 pb-5 btn btn-lg btn-block btn-outline-light mb-4 d-block" id="fileInput">
|
|
||||||
<div class="preview-icon-wrap"><em class="ni ni-upload"></em></div><span>点击选择文件/Ctrl+V粘贴/拖拽到此处</span>
|
|
||||||
<input type="file" id="file" style="opacity: 0;position: absolute;cursor: pointer;width: 100%;height: 100%;left: 0;top: 0;" @change="selectFile">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="btn-group">
|
|
||||||
<button v-for="v in set.output_types.items" class="btn btn-outline-dark btn-sm"
|
|
||||||
:class="{'btn-active':set.output_types.current===v.key}"
|
|
||||||
@click="set.output_types.current=v.key"
|
|
||||||
>
|
|
||||||
{{v.title}}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="form-control-wrap">
|
|
||||||
<textarea class="form-control" id="output" v-model="result" rows="8" placeholder="这里显示上传的结果"></textarea>
|
|
||||||
</div>
|
|
||||||
<div class="text-center"><button class="btn btn-sm btn-outline-light" @click="copy"><em class="icon ni ni-copy"></em>点此复制</button> <button class="btn btn-sm btn-outline-light" @click="reset"><em class="icon ni ni-reload"></em>清空</button></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="card card-preview">
|
|
||||||
<div class="card-inner">
|
|
||||||
<h6><em class="icon ni ni-info"></em> 工具说明</h6>
|
|
||||||
<div class="accordion-inner">
|
|
||||||
<p>uniCloud文件快传底层使用阿里云OSS存储,支持任何格式的文件,也可以当图床使用。</p>
|
|
||||||
<p>一次只能上传1个文件,文件大小限制100M。一经上传,将无法删除,本站也不会保存。</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{/block}
|
|
||||||
{block name="script"}
|
|
||||||
<script src="{$cdn_cdnjs}vue/2.6.14/vue.min.js"></script>
|
|
||||||
<script>
|
|
||||||
new Vue({
|
|
||||||
el: '#app',
|
|
||||||
data: {
|
|
||||||
set: {
|
|
||||||
output_types: {
|
|
||||||
current: 'URL',
|
|
||||||
items: [
|
|
||||||
{
|
|
||||||
title: 'URL',
|
|
||||||
key: 'URL',
|
|
||||||
template: '#url#',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'HTML',
|
|
||||||
key: 'HTML',
|
|
||||||
template: '<a href="#url#" target="_blank">#name#</a>',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'BBCode',
|
|
||||||
key: 'BBCode',
|
|
||||||
template: '[url=#url#]#name#[/url]',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Markdown',
|
|
||||||
key: 'Markdown',
|
|
||||||
template: '[#name#](#url#)',
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
output: [],
|
|
||||||
},
|
|
||||||
progress: 0,
|
|
||||||
urls: {},
|
|
||||||
result: '',
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
var that=this;
|
|
||||||
document.addEventListener('paste', function(e) {
|
|
||||||
var items = ((e.clipboardData || window.clipboardData).items) || [];
|
|
||||||
var file = null;
|
|
||||||
|
|
||||||
if (items && items.length) {
|
|
||||||
for (var i = 0; i < items.length; i++) {
|
|
||||||
if (items[i].type.indexOf('text/') === -1) {
|
|
||||||
file = items[i].getAsFile();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!file) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
that.pasteFile(file)
|
|
||||||
|
|
||||||
});
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
'set.output'(newVal) {
|
|
||||||
let list = {}
|
|
||||||
for (item of this.set.output_types.items) {
|
|
||||||
let arr = []
|
|
||||||
for (const v of newVal) {
|
|
||||||
arr.push(item.template.replaceAll('#url#', v.url).replaceAll('#name#', v.name))
|
|
||||||
}
|
|
||||||
list[item.key] = arr;
|
|
||||||
}
|
|
||||||
this.urls = list
|
|
||||||
},
|
|
||||||
'urls'(newVal) {
|
|
||||||
this.result = newVal[this.set.output_types.current].join('\n')
|
|
||||||
},
|
|
||||||
'set.output_types.current'(newVal) {
|
|
||||||
this.result = this.urls[newVal] ? this.urls[newVal].join('\n') : '';
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
async preUpload(filename){
|
|
||||||
var that = this;
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
$.ajax({
|
|
||||||
type : "POST",
|
|
||||||
url : "/api/{$plugin.alias}/preUpload",
|
|
||||||
data : {filename: filename},
|
|
||||||
dataType : 'json',
|
|
||||||
success : function(data) {
|
|
||||||
if(data.code == 0){
|
|
||||||
resolve(data.data);
|
|
||||||
}else{
|
|
||||||
reject(data.msg);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error : function(){
|
|
||||||
reject('准备文件上传失败:接口错误');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})
|
|
||||||
},
|
|
||||||
async completeUpload(id){
|
|
||||||
var that = this;
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
$.ajax({
|
|
||||||
type : "POST",
|
|
||||||
url : "/api/{$plugin.alias}/completeUpload",
|
|
||||||
data : {id: id},
|
|
||||||
dataType : 'json',
|
|
||||||
success : function(data) {
|
|
||||||
if(data.code == 0){
|
|
||||||
resolve(data.data);
|
|
||||||
}else{
|
|
||||||
reject(data.msg);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error : function(){
|
|
||||||
reject('完成文件上传失败:接口错误');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})
|
|
||||||
},
|
|
||||||
async uploadFile(url, postdata, file){
|
|
||||||
var that = this;
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
var data = new FormData();
|
|
||||||
for(key in postdata){
|
|
||||||
data.append(key, postdata[key]);
|
|
||||||
}
|
|
||||||
data.append('file', file);
|
|
||||||
$.ajax({
|
|
||||||
type : "POST",
|
|
||||||
url : url,
|
|
||||||
data : data,
|
|
||||||
processData: false,
|
|
||||||
contentType: false,
|
|
||||||
dataType : 'html',
|
|
||||||
success : function(data) {
|
|
||||||
resolve();
|
|
||||||
},
|
|
||||||
error : function(){
|
|
||||||
reject('文件上传失败!');
|
|
||||||
},
|
|
||||||
xhr: function() {
|
|
||||||
var xhr = new XMLHttpRequest();
|
|
||||||
xhr.upload.addEventListener('progress', function (e) {
|
|
||||||
//console.log(e);
|
|
||||||
progressRate = Math.round(e.loaded / e.total * 100);
|
|
||||||
that.progress = progressRate;
|
|
||||||
})
|
|
||||||
return xhr;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})
|
|
||||||
},
|
|
||||||
async selectFile(e) {
|
|
||||||
var total = e.target.files.length;
|
|
||||||
if(total == 0) return;
|
|
||||||
var file = e.target.files[0];
|
|
||||||
if(file.size > 104857600){
|
|
||||||
layer.alert('文件大小限制100M');return;
|
|
||||||
}
|
|
||||||
this.progress = 0;
|
|
||||||
|
|
||||||
var url,postdata,fileid,fileurl;
|
|
||||||
|
|
||||||
var loading = layer.msg('正在准备文件上传', {icon: 16,shade: 0.3,time: 0});
|
|
||||||
await this.preUpload(file.name).then(data => {
|
|
||||||
fileid = data.id;
|
|
||||||
postdata = {'Cache-Control':'max-age=2592000', 'Content-Disposition':'attachment', 'OSSAccessKeyId':data.accessKeyId, 'Signature':data.signature, 'host':data.host, 'id':data.id, 'key':data.ossPath, 'policy':data.policy, 'success_action_status':'200'};
|
|
||||||
url = 'https://' + data.host + '/';
|
|
||||||
fileurl = 'https://' + data.cdnDomain + '/' + data.ossPath;
|
|
||||||
}, error => {
|
|
||||||
layer.close(loading);
|
|
||||||
layer.alert(error, {icon: 2});
|
|
||||||
$("#file").val('');
|
|
||||||
throw Error();
|
|
||||||
});
|
|
||||||
|
|
||||||
loading = layer.msg('正在上传文件,请稍候...', {icon: 16,shade: 0.3,time: 0});
|
|
||||||
await this.uploadFile(url, postdata, file).then(() => {
|
|
||||||
}, error => {
|
|
||||||
layer.close(loading);
|
|
||||||
layer.alert(error, {icon: 2});
|
|
||||||
$("#file").val('');
|
|
||||||
throw Error();
|
|
||||||
});
|
|
||||||
|
|
||||||
loading = layer.msg('上传成功,正在保存', {icon: 16,shade: 0.3,time: 0});
|
|
||||||
await this.completeUpload(fileid).then(data => {
|
|
||||||
layer.close(loading);
|
|
||||||
}, error => {
|
|
||||||
layer.close(loading);
|
|
||||||
layer.alert(error, {icon: 2});
|
|
||||||
$("#file").val('');
|
|
||||||
throw Error();
|
|
||||||
});
|
|
||||||
|
|
||||||
var res = { url: fileurl, name: file.name };
|
|
||||||
this.set.output.push(res)
|
|
||||||
},
|
|
||||||
async pasteFile(file) {
|
|
||||||
if(file.size > 104857600){
|
|
||||||
layer.alert('文件大小限制100M');return;
|
|
||||||
}
|
|
||||||
this.progress = 0;
|
|
||||||
|
|
||||||
var url,postdata,fileid,fileurl;
|
|
||||||
|
|
||||||
var loading = layer.msg('正在准备文件上传', {icon: 16,shade: 0.3,time: 0});
|
|
||||||
await this.preUpload(file.name).then(data => {
|
|
||||||
fileid = data.id;
|
|
||||||
postdata = {'Cache-Control':'max-age=2592000', 'Content-Disposition':'attachment', 'OSSAccessKeyId':data.accessKeyId, 'Signature':data.signature, 'host':data.host, 'id':data.id, 'key':data.ossPath, 'policy':data.policy, 'success_action_status':'200'};
|
|
||||||
url = 'https://' + data.host + '/';
|
|
||||||
fileurl = 'https://' + data.cdnDomain + '/' + data.ossPath;
|
|
||||||
}, error => {
|
|
||||||
layer.close(loading);
|
|
||||||
layer.alert(error, {icon: 2});
|
|
||||||
$("#file").val('');
|
|
||||||
throw Error();
|
|
||||||
});
|
|
||||||
|
|
||||||
loading = layer.msg('正在上传文件,请稍候...', {icon: 16,shade: 0.3,time: 0});
|
|
||||||
await this.uploadFile(url, postdata, file).then(() => {
|
|
||||||
}, error => {
|
|
||||||
layer.close(loading);
|
|
||||||
layer.alert(error, {icon: 2});
|
|
||||||
$("#file").val('');
|
|
||||||
throw Error();
|
|
||||||
});
|
|
||||||
|
|
||||||
loading = layer.msg('上传成功,正在保存', {icon: 16,shade: 0.3,time: 0});
|
|
||||||
await this.completeUpload(fileid).then(data => {
|
|
||||||
layer.close(loading);
|
|
||||||
}, error => {
|
|
||||||
layer.close(loading);
|
|
||||||
layer.alert(error, {icon: 2});
|
|
||||||
$("#file").val('');
|
|
||||||
throw Error();
|
|
||||||
});
|
|
||||||
|
|
||||||
var res = { url: fileurl, name: file.name };
|
|
||||||
this.set.output.push(res)
|
|
||||||
},
|
|
||||||
copy(){
|
|
||||||
if(!this.result) return;
|
|
||||||
$("#output").select();
|
|
||||||
document.execCommand("Copy");
|
|
||||||
layer.msg('复制成功', {icon:1, time:600})
|
|
||||||
},
|
|
||||||
reset(){
|
|
||||||
this.set.output = [];
|
|
||||||
this.progress = 0;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
{/block}
|
|
||||||
@@ -28,7 +28,7 @@ class App extends Plugin
|
|||||||
|
|
||||||
try{
|
try{
|
||||||
if($type == 'wx'){
|
if($type == 'wx'){
|
||||||
$msg = $this->query_wx($link);
|
$msg = $this->query_wx2($link);
|
||||||
}else{
|
}else{
|
||||||
$msg = $this->query_qq($link);
|
$msg = $this->query_qq($link);
|
||||||
}
|
}
|
||||||
@@ -39,6 +39,21 @@ class App extends Plugin
|
|||||||
return msg('ok','success',$msg);
|
return msg('ok','success',$msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function queryqq(){
|
||||||
|
$link = input('post.url', null, 'trim');
|
||||||
|
$randstr = input('post.randstr', null, 'trim');
|
||||||
|
$ticket = input('post.ticket', null, 'trim');
|
||||||
|
if(!$link) return msg('error','no url');
|
||||||
|
|
||||||
|
try{
|
||||||
|
$msg = $this->query_qq_new($link, $ticket, $randstr);
|
||||||
|
}catch(Exception $e){
|
||||||
|
return msg('error', $e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return msg('ok','success',$msg);
|
||||||
|
}
|
||||||
|
|
||||||
private function query_qq_old($link){
|
private function query_qq_old($link){
|
||||||
$url = 'https://cgi.urlsec.qq.com/index.php?m=gwComplainMergeIntoWechat&a=checkBlackStatus&callback=url_query&url='.urlencode($link);
|
$url = 'https://cgi.urlsec.qq.com/index.php?m=gwComplainMergeIntoWechat&a=checkBlackStatus&callback=url_query&url='.urlencode($link);
|
||||||
$data=$this->guanjia_curl($url);
|
$data=$this->guanjia_curl($url);
|
||||||
@@ -97,7 +112,53 @@ class App extends Plugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
|
$msg['检测URL'] = $link;
|
||||||
|
$msg['查询失败'] = $arr['data'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function query_qq_new($link, $ticket, $randstr){
|
||||||
|
$url='https://cgi.urlsec.qq.com/index.php?m=check&a=gw_check&callback=url_query&url='.urlencode($link).'&ticket='.$ticket.'&randstr='.urlencode($randstr).'&_='.time().'123';
|
||||||
|
$data=$this->guanjia_curl($url);
|
||||||
|
$arr = jsonp_decode($data, true);
|
||||||
|
if(!$arr) throw new Exception('查询接口返回数据解析失败');
|
||||||
|
if(isset($arr['reCode']) && $arr['reCode']==0) {
|
||||||
|
$arr = $arr['data']['results'];
|
||||||
|
//print_r($arr);
|
||||||
$msg['检测URL'] = $arr['url'];
|
$msg['检测URL'] = $arr['url'];
|
||||||
|
|
||||||
|
if($arr['whitetype']==3||$arr['whitetype']==4){
|
||||||
|
$msg['域名状态'] = '<font color="green">白名单</font>';
|
||||||
|
}elseif($arr['whitetype']==2){
|
||||||
|
$msg['域名状态'] = '<font color="red">已拦截</font>';
|
||||||
|
$msg['拦截原因'] = $arr['WordingTitle'];
|
||||||
|
$msg['拦截详情'] = $arr['Wording'];
|
||||||
|
}elseif($arr['whitetype']==1){
|
||||||
|
if($arr['eviltype']!=0){
|
||||||
|
if($arr['eviltype']==2800 || $arr['eviltype']==2804)
|
||||||
|
$msg['域名状态'] = '<font color="orange">QQ内拦截</font>';
|
||||||
|
else
|
||||||
|
$msg['域名状态'] = '<font color="orange">其他拦截('.$arr['eviltype'].')</font>';
|
||||||
|
}else{
|
||||||
|
$msg['域名状态'] = '<font color="green">未拦截</font><br/>';
|
||||||
|
}
|
||||||
|
$msg['安全联盟认证'] = ($arr['certify']==1?'是':'否');
|
||||||
|
}
|
||||||
|
if($arr['detect_time']!=0){
|
||||||
|
$msg['记录时间'] = date("Y-m-d H:i:s", $arr['detect_time']);
|
||||||
|
}
|
||||||
|
if($arr['isDomainICPOk']==1){
|
||||||
|
$msg['是否已备案'] = '是';
|
||||||
|
$msg['备案主体'] = $arr['Orgnization'];
|
||||||
|
$msg['备案号'] = $arr['ICPSerial'];
|
||||||
|
}else{
|
||||||
|
$msg['是否已备案'] = '否';
|
||||||
|
}
|
||||||
|
|
||||||
|
}else{
|
||||||
|
$msg['检测URL'] = $link;
|
||||||
$msg['查询失败'] = $arr['data'];
|
$msg['查询失败'] = $arr['data'];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,6 +190,20 @@ class App extends Plugin
|
|||||||
return $msg;
|
return $msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function query_wx2($link){
|
||||||
|
$url = 'https://cgi.urlsec.qq.com/index.php?m=url&a=validUrl&url='.urlencode($link);
|
||||||
|
$data = get_curl($url);
|
||||||
|
$arr = json_decode($data, true);
|
||||||
|
if(!$arr) throw new Exception('查询接口返回数据解析失败');
|
||||||
|
$msg['检测URL'] = $link;
|
||||||
|
if(isset($arr['data']) && $arr['data']=='ok'){
|
||||||
|
$msg['微信拦截状态'] = '<font color="red">已拦截</font>';
|
||||||
|
}else{
|
||||||
|
$msg['微信拦截状态'] = '<font color="green">未拦截</font>';
|
||||||
|
}
|
||||||
|
return $msg;
|
||||||
|
}
|
||||||
|
|
||||||
private function guanjia_curl($url)
|
private function guanjia_curl($url)
|
||||||
{
|
{
|
||||||
$ch = curl_init();
|
$ch = curl_init();
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<button class="btn btn-dim btn-outline-info btn-block btn-lg card-link" @click="query('qq')" :disabled="query_disabled">
|
<button class="btn btn-dim btn-outline-info btn-block btn-lg card-link" @click="queryqq()" :disabled="query_disabled">
|
||||||
查询管家&QQ拦截
|
查询管家&QQ拦截
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -44,6 +44,7 @@
|
|||||||
{block name="script"}
|
{block name="script"}
|
||||||
<script src="{$cdn_cdnjs}vue/2.6.14/vue.min.js"></script>
|
<script src="{$cdn_cdnjs}vue/2.6.14/vue.min.js"></script>
|
||||||
<script src="https://static.geetest.com/v4/gt4.js"></script>
|
<script src="https://static.geetest.com/v4/gt4.js"></script>
|
||||||
|
<script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
|
||||||
<script>
|
<script>
|
||||||
new Vue({
|
new Vue({
|
||||||
el: '#app',
|
el: '#app',
|
||||||
@@ -53,7 +54,8 @@ new Vue({
|
|||||||
type: '',
|
type: '',
|
||||||
showresult: false,
|
showresult: false,
|
||||||
result_info: [],
|
result_info: [],
|
||||||
captcha: null
|
captcha: null,
|
||||||
|
captcha1: null,
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.$refs.input.focus();
|
this.$refs.input.focus();
|
||||||
@@ -101,6 +103,36 @@ new Vue({
|
|||||||
alert('验证码加载失败,请刷新页面重试');
|
alert('验证码加载失败,请刷新页面重试');
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var tcaptchaCallback = function(res){
|
||||||
|
if (res.ret === 0) {
|
||||||
|
layer.load(0, {shade:0.1});
|
||||||
|
var data = { url: that.input, ticket: res.ticket, randstr: res.randstr};
|
||||||
|
$.ajax({
|
||||||
|
url: '/api/{$plugin.alias}/queryqq',
|
||||||
|
type: 'post',
|
||||||
|
dataType: 'json',
|
||||||
|
data: data,
|
||||||
|
cache: false,
|
||||||
|
success: function (data) {
|
||||||
|
layer.closeAll();
|
||||||
|
if(data.status=='ok'){
|
||||||
|
that.showresult = true;
|
||||||
|
that.result_info = data.data;
|
||||||
|
}else{
|
||||||
|
layer.alert(data.message, {icon: 5});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function () {
|
||||||
|
layer.closeAll();
|
||||||
|
layer.msg('服务器错误', {icon: 5});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.msg('请先完成验证',{time:800,icon:2});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.captcha1 = new TencentCaptcha('2046626881', tcaptchaCallback);
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
checkURL()
|
checkURL()
|
||||||
@@ -123,6 +155,13 @@ new Vue({
|
|||||||
this.type = type;
|
this.type = type;
|
||||||
this.captcha.showCaptcha();
|
this.captcha.showCaptcha();
|
||||||
},
|
},
|
||||||
|
queryqq(){
|
||||||
|
if(this.input.trim() == ''){
|
||||||
|
layer.alert('要查询的网址不能为空');return;
|
||||||
|
}
|
||||||
|
this.checkURL();
|
||||||
|
this.captcha1.show();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
+28
-109
@@ -22,7 +22,7 @@ class App extends Plugin
|
|||||||
public function query(){
|
public function query(){
|
||||||
$domain = input('post.domain', null, 'trim');
|
$domain = input('post.domain', null, 'trim');
|
||||||
if(!$domain) return msg('error','no domain');
|
if(!$domain) return msg('error','no domain');
|
||||||
if(strpos($domain,'.') && !checkdomain($domain)){
|
if(!checkdomain($domain)){
|
||||||
return msg('error', '域名格式不正确!');
|
return msg('error', '域名格式不正确!');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,129 +31,48 @@ class App extends Plugin
|
|||||||
return msg('error', '验证失败,请重新验证');
|
return msg('error', '验证失败,请重新验证');
|
||||||
}
|
}
|
||||||
|
|
||||||
$cache = Db::name('querycache')->where('type', 'icplist')->where('key|subkey', $domain)->find();
|
$cache = Db::name('querycache')->where('type', 'icp')->where('key', $domain)->find();
|
||||||
if($cache && time() - strtotime($cache['uptime']) <= self::CACHE_TIME){
|
if($cache && time() - strtotime($cache['uptime']) <= self::CACHE_TIME){
|
||||||
$array = json_decode($cache['content'], true);
|
$array = json_decode($cache['content'], true);
|
||||||
$data = Db::name('querycache')->where('type', 'icpitem')->whereIn('id', implode(',',$array['list']))->select();
|
return msg('ok','success',$array);
|
||||||
$list = [];
|
|
||||||
foreach($data as $row){
|
|
||||||
$list[] = json_decode($row['content'], true);
|
|
||||||
}
|
|
||||||
return msg('ok','success',['total'=>$array['total'], 'list'=>$list]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$cache = Db::name('querycache')->where('type', 'icpitem')->where('key|subkey', $domain)->find();
|
|
||||||
if($cache && time() - strtotime($cache['uptime']) <= self::CACHE_TIME){
|
|
||||||
$array = json_decode($cache['content'], true);
|
|
||||||
return msg('ok','success',['total'=>1, 'list'=>[$array]]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try{
|
try{
|
||||||
$result = $this->execapi($domain);
|
$result = $this->queryapi($domain);
|
||||||
|
if(!$result){
|
||||||
|
return msg('ok','success',null);
|
||||||
|
}
|
||||||
}catch(Exception $e){
|
}catch(Exception $e){
|
||||||
return msg('error', $e->getMessage());
|
return msg('error', $e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
if($result['total'] > 1 && count($result['data']) > 1){
|
Db::name('querycache')->duplicate([
|
||||||
$i = 0;
|
'type' => 'icp',
|
||||||
foreach($result['data'] as $row){
|
'key' => $result['Domain'],
|
||||||
$id = Db::name('querycache')->duplicate([
|
'content' => json_encode($result),
|
||||||
'subkey' => $row['webLicence'],
|
'uptime' => date('Y-m-d H:i:s')
|
||||||
'content' => json_encode($row),
|
])->insert([
|
||||||
'uptime' => date('Y-m-d H:i:s')
|
'type' => 'icp',
|
||||||
])->insertGetId([
|
'key' => $result['Domain'],
|
||||||
'type' => 'icpitem',
|
'content' => json_encode($result),
|
||||||
'key' => $row['domain'],
|
'uptime' => date('Y-m-d H:i:s')
|
||||||
'subkey' => $row['webLicence'],
|
]);
|
||||||
'content' => json_encode($row),
|
|
||||||
'uptime' => date('Y-m-d H:i:s')
|
|
||||||
]);
|
|
||||||
$result['data'][$i++]['id'] = $id;
|
|
||||||
$ids[] = $id;
|
|
||||||
}
|
|
||||||
Db::name('querycache')->duplicate([
|
|
||||||
'subkey' => $result['data'][0]['mainLicence'],
|
|
||||||
'content' => json_encode(['total'=>$result['total'], 'list'=>$ids]),
|
|
||||||
'uptime' => date('Y-m-d H:i:s')
|
|
||||||
])->insert([
|
|
||||||
'type' => 'icplist',
|
|
||||||
'key' => $result['data'][0]['unitName'],
|
|
||||||
'subkey' => $result['data'][0]['mainLicence'],
|
|
||||||
'content' => json_encode(['total'=>$result['total'], 'list'=>$ids]),
|
|
||||||
'uptime' => date('Y-m-d H:i:s')
|
|
||||||
]);
|
|
||||||
}elseif($result['total'] == 1 && count($result['data']) > 0){
|
|
||||||
$id = Db::name('querycache')->duplicate([
|
|
||||||
'subkey' => $result['data'][0]['webLicence'],
|
|
||||||
'content' => json_encode($result['data'][0]),
|
|
||||||
'uptime' => date('Y-m-d H:i:s')
|
|
||||||
])->insertGetId([
|
|
||||||
'type' => 'icpitem',
|
|
||||||
'key' => $result['data'][0]['domain'],
|
|
||||||
'subkey' => $result['data'][0]['webLicence'],
|
|
||||||
'content' => json_encode($result['data'][0]),
|
|
||||||
'uptime' => date('Y-m-d H:i:s')
|
|
||||||
]);
|
|
||||||
$result['data'][0]['id'] = $id;
|
|
||||||
}
|
|
||||||
|
|
||||||
return msg('ok','success',['total'=>$result['total'], 'list'=>$result['data']]);
|
return msg('ok','success',$result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function item(){
|
private function queryapi($domain){
|
||||||
$id = input('post.id');
|
$url = config_get('qqapi_url').'api.php?act=icpquery';
|
||||||
if(!$id) return msg('error','no id');
|
$post = 'key='.config_get('qqapi_key').'&domain='.$domain;
|
||||||
$cache = Db::name('querycache')->where('id', $id)->find();
|
$data = get_curl($url, $post);
|
||||||
if($cache){
|
$arr = json_decode($data, true);
|
||||||
$array = json_decode($cache['content'], true);
|
if(isset($arr['code']) && $arr['code']==0){
|
||||||
return msg('ok','success',['total'=>1, 'list'=>[$array]]);
|
return $arr['data'];
|
||||||
}else{
|
|
||||||
return msg('ok','success',['total'=>0, 'list'=>[]]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function execapi($domain){
|
|
||||||
$timeStamp = time();
|
|
||||||
$authKey = md5("testtest" . $timeStamp);
|
|
||||||
$referer = 'https://beian.miit.gov.cn/';
|
|
||||||
$headers = ['Origin: https://beian.miit.gov.cn'];
|
|
||||||
$url = 'https://hlwicpfwc.miit.gov.cn/icpproject_query/api/auth';
|
|
||||||
$post = 'authKey='.$authKey.'&timeStamp='.$timeStamp;
|
|
||||||
$response = get_curl($url, $post, $referer, 0, 1, 0, 0, $headers);
|
|
||||||
$body = substr($response, strpos($response, '{"'));
|
|
||||||
$arr = json_decode($body, true);
|
|
||||||
if(isset($arr['code']) && $arr['code']==200){
|
|
||||||
$cookie = '';
|
|
||||||
preg_match_all('/set-cookie: (.*?);/i', $response, $matchs);
|
|
||||||
foreach ($matchs[1] as $val) {
|
|
||||||
if(substr($val,-1)=='=')continue;
|
|
||||||
$cookie.=$val.'; ';
|
|
||||||
}
|
|
||||||
|
|
||||||
$token = $arr['params']['bussiness'];
|
|
||||||
|
|
||||||
$url = 'https://hlwicpfwc.miit.gov.cn/icpproject_query/api/icpAbbreviateInfo/queryByCondition';
|
|
||||||
$post = json_encode(['pageNum'=>'','pageSize'=>'','unitName'=>$domain,'serviceType'=>1]);
|
|
||||||
$headers[] = 'Content-Type: application/json; charset=UTF-8';
|
|
||||||
$headers[] = 'token: '.$token;
|
|
||||||
$response = get_curl($url, $post, $referer, $cookie, 0, 0, 0, $headers);
|
|
||||||
$arr = json_decode($response, true);
|
|
||||||
if(isset($arr['code']) && $arr['code']==200){
|
|
||||||
$list = [];
|
|
||||||
foreach($arr['params']['list'] as $row){
|
|
||||||
$list[] = ['domain'=>$row['domain'], 'mainLicence'=>$row['mainLicence'], 'webLicence'=>$row['serviceLicence'], 'unitName'=>$row['unitName'], 'unitType'=>$row['natureName'], 'updateTime'=>$row['updateRecordTime'], 'limitAccess'=>$row['limitAccess'], 'contentTypeName'=>$row['contentTypeName']];
|
|
||||||
}
|
|
||||||
return ['code'=>0, 'total'=>$arr['params']['total'], 'data'=>$list];
|
|
||||||
}elseif(isset($arr['msg'])){
|
|
||||||
throw new Exception($arr['msg']);
|
|
||||||
}else{
|
|
||||||
throw new Exception('查询接口(query)请求失败');
|
|
||||||
}
|
|
||||||
|
|
||||||
}elseif(isset($arr['msg'])){
|
}elseif(isset($arr['msg'])){
|
||||||
throw new Exception($arr['msg']);
|
throw new Exception($arr['msg']);
|
||||||
}else{
|
}else{
|
||||||
throw new Exception('查询接口(auth)请求失败');
|
throw new Exception('接口请求失败');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+23
-71
@@ -2,22 +2,19 @@
|
|||||||
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
|
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
|
||||||
{block name="main"}
|
{block name="main"}
|
||||||
<style>
|
<style>
|
||||||
.query-title {
|
td{text-align: center;}
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
.table-title th{word-break: keep-all;}
|
|
||||||
</style>
|
</style>
|
||||||
<div class="container-xl" id="app">
|
<div class="container-xl" id="app">
|
||||||
<div class="col-md-12 col-xl-10 center-block">
|
<div class="col-sm-12 col-md-10 col-xl-8 center-block">
|
||||||
<div class="card card-preview">
|
<div class="card card-preview">
|
||||||
<div class="card-inner mt-3">
|
<div class="card-inner mt-3">
|
||||||
<div class="nya-title nk-ibx-action-item progress-rating">
|
<div class="nya-title nk-ibx-action-item progress-rating">
|
||||||
<span class="nk-menu-text font-weight-bold">ICP备案查询</span>
|
<span class="nk-menu-text font-weight-bold">ICP备案查询</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="form-label">输入域名/备案号/单位名称:</label>
|
<label class="form-label">输入域名:</label>
|
||||||
<div class="form-control-wrap">
|
<div class="form-control-wrap">
|
||||||
<input type="text" v-model="input" placeholder="请输入域名或备案号或单位名称查询,请勿使用子域名或者带http://www等字符的网址查询" class="form-control form-control-lg" @keyup.enter="query" ref="input" autocomplete="off">
|
<input type="text" v-model="input" placeholder="请输入域名查询,请勿使用子域名或者带http://www等字符的网址查询" class="form-control form-control-lg" @keyup.enter="query" ref="input" autocomplete="off">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button class="btn btn-dim btn-outline-primary btn-block card-link mb-3" @click="query" :disabled="query_disabled">
|
<button class="btn btn-dim btn-outline-primary btn-block card-link mb-3" @click="query" :disabled="query_disabled">
|
||||||
@@ -30,48 +27,20 @@
|
|||||||
<div class="nya-title nk-ibx-action-item progress-rating">
|
<div class="nya-title nk-ibx-action-item progress-rating">
|
||||||
<span class="nk-menu-text font-weight-bold">查询结果</span>
|
<span class="nk-menu-text font-weight-bold">查询结果</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="alert alert-warning text-center" v-if="result_total==0"><h6><em class="icon ni ni-info"></em> 没有查询到备案记录</h6></div>
|
<div class="alert alert-warning text-center" v-if="result_code==0"><h6><em class="icon ni ni-info"></em> 没有查询到备案信息</h6></div>
|
||||||
<div v-if="result_total==1">
|
<div class="col-sm-12 col-md-10 col-xl-8 center-block" v-if="result_code==1">
|
||||||
<h6>域名 <span class="text-primary">{{result_info.domain}}</span> 的信息:</h6>
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-hover table-bordered">
|
<table class="table table-hover table-bordered">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr><td class="query-title">网站域名</td><td>{{result_info.domain}}</td></tr>
|
<tr><td class="query-title">域名</td><td>{{result_info.Domain}}</td></tr>
|
||||||
<tr><td class="query-title">ICP备案/许可证号</td><td>{{result_info.webLicence}}</td></tr>
|
<tr><td class="query-title">备案号</td><td>{{result_info.DomainIcpNum}}</td></tr>
|
||||||
<tr><td class="query-title">主办单位名称</td><td>{{result_info.unitName}}</td></tr>
|
<tr><td class="query-title">主办单位名称</td><td>{{result_info.CompanyName}}</td></tr>
|
||||||
<tr><td class="query-title">主办单位性质</td><td>{{result_info.unitType}}</td></tr>
|
<tr><td class="query-title">主办单位性质</td><td>{{result_info.CompanyType}}</td></tr>
|
||||||
<tr><td class="query-title">审核日期</td><td>{{result_info.updateTime}}</td></tr>
|
<tr><td class="query-title">审核日期</td><td>{{result_info.AuditTime}}</td></tr>
|
||||||
<tr><td class="query-title">是否限制接入</td><td>{{result_info.limitAccess}}</td></tr>
|
</tbody>
|
||||||
<tr><td class="query-title">网站前置审批项</td><td>{{result_info.contentTypeName}}</td></tr>
|
</table>
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="result_total>1">
|
|
||||||
<h6><span class="text-primary">{{result_input}}</span> 共查询到 <span class="text-primary">{{result_total}}</span> 条备案信息:</h6>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-hover table-bordered">
|
|
||||||
<thead class="table-title">
|
|
||||||
<th>网站域名</th><th>网站备案号</th><th>主办单位名称</th><th>审核日期</th><th>操作</th>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr v-for="(item,index) in result_list" :key="index">
|
|
||||||
<td>{{item.domain}}</td><td>{{item.webLicence}}</td><td>{{item.unitName}}</td><td>{{item.updateTime}}</td><td><button class="btn btn-dim btn-outline-info btn-xs" @click="show_item(index)">详情</button></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<p v-if="result_total>10" class="text-info">当前只支持查询最新10条记录,剩余记录请使用域名或网站备案号进行精确查询。</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="card card-preview">
|
|
||||||
<div class="card-inner">
|
|
||||||
<h6><em class="icon ni ni-info"></em> 简介</h6>
|
|
||||||
<div class="accordion-inner">
|
|
||||||
<p>支持输入域名、网站备案号、主体备案号、单位名称(个人姓名、企业名称)进行查询</p>
|
|
||||||
<p>此ICP查询工具直接对接工信部官网,非第三方接口。<a href="https://blog.cccyun.cn/post-445.html" target="_blank">查询源码下载</a>,请勿对本站进行恶意抓取</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -86,21 +55,9 @@ new Vue({
|
|||||||
data: {
|
data: {
|
||||||
query_disabled: true,
|
query_disabled: true,
|
||||||
input: '',
|
input: '',
|
||||||
result_input: '',
|
|
||||||
showresult: false,
|
showresult: false,
|
||||||
result_info: {
|
result_info: [],
|
||||||
id: '',
|
result_code: 0,
|
||||||
domain: '',
|
|
||||||
mainLicence: '',
|
|
||||||
webLicence: '',
|
|
||||||
unitName: '',
|
|
||||||
unitType: '',
|
|
||||||
updateTime: '',
|
|
||||||
limitAccess: '',
|
|
||||||
contentTypeName: '',
|
|
||||||
},
|
|
||||||
result_list: [],
|
|
||||||
result_total: 0,
|
|
||||||
captcha: null
|
captcha: null
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -136,13 +93,12 @@ new Vue({
|
|||||||
success: function (data) {
|
success: function (data) {
|
||||||
layer.closeAll();
|
layer.closeAll();
|
||||||
if(data.status=='ok'){
|
if(data.status=='ok'){
|
||||||
var data = data.data;
|
|
||||||
that.result_input = that.input;
|
|
||||||
that.showresult = true;
|
that.showresult = true;
|
||||||
that.result_total = data.total;
|
if(data.data == null){
|
||||||
that.result_list = data.list;
|
that.result_code = 0;
|
||||||
if(data.list.length > 0){
|
}else{
|
||||||
that.result_info = data.list[0];
|
that.result_code = 1;
|
||||||
|
that.result_info = data.data;
|
||||||
}
|
}
|
||||||
captcha.reset();
|
captcha.reset();
|
||||||
}else{
|
}else{
|
||||||
@@ -184,15 +140,11 @@ new Vue({
|
|||||||
},
|
},
|
||||||
query() {
|
query() {
|
||||||
this.checkURL();
|
this.checkURL();
|
||||||
if(this.input == ''){
|
if(this.input.trim() == ''){
|
||||||
alert('查询内容不能为空');return;
|
alert('查询内容不能为空');return;
|
||||||
}
|
}
|
||||||
layer.load(0, {shade:0.1});
|
layer.load(0, {shade:0.1});
|
||||||
this.captcha.showCaptcha();
|
this.captcha.showCaptcha();
|
||||||
},
|
|
||||||
show_item(index){
|
|
||||||
this.result_info = this.result_list[index];
|
|
||||||
this.result_total = 1;
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
yum -y install python3
|
|
||||||
yum -y install mesa-libGL
|
|
||||||
|
|
||||||
python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
|
|
||||||
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
|
|
||||||
|
|
||||||
pip3 install opencv-python==4.3.0.38
|
|
||||||
pip3 install requests
|
|
||||||
pip3 install flask
|
|
||||||
pip3 install gevent
|
|
||||||
|
|
||||||
nohup python3 ./server.py >> ./server.log 2>&1 &
|
|
||||||
@@ -1,165 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
import requests,hashlib,time,base64,cv2,os
|
|
||||||
def icpquery(info):
|
|
||||||
if(info == None or len(info) == 0):
|
|
||||||
return {'code':-1,'msg':'no domain'}
|
|
||||||
info_data = {
|
|
||||||
'pageNum':'',
|
|
||||||
'pageSize':'',
|
|
||||||
'unitName':info,
|
|
||||||
'serviceType':1
|
|
||||||
}
|
|
||||||
|
|
||||||
#构造AuthKey
|
|
||||||
timeStamp = int(round(time.time()*1000))
|
|
||||||
authSecret = 'testtest' + str(timeStamp)
|
|
||||||
authKey = hashlib.md5(authSecret.encode(encoding='UTF-8')).hexdigest()
|
|
||||||
#获取Cookie
|
|
||||||
cookie_headers = {
|
|
||||||
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
|
|
||||||
'accept-encoding': 'gzip, deflate, br',
|
|
||||||
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
|
|
||||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.42'
|
|
||||||
}
|
|
||||||
cookie = requests.utils.dict_from_cookiejar(requests.get('https://beian.miit.gov.cn/',headers=cookie_headers,verify=False).cookies)['__jsluid_s']
|
|
||||||
#请求获取Token
|
|
||||||
t_url = 'https://hlwicpfwc.miit.gov.cn/icpproject_query/api/auth'
|
|
||||||
t_headers = {
|
|
||||||
'Host': 'hlwicpfwc.miit.gov.cn',
|
|
||||||
'Connection': 'keep-alive',
|
|
||||||
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="90", "Microsoft Edge";v="90"',
|
|
||||||
'Accept': '*/*',
|
|
||||||
'DNT': '1',
|
|
||||||
'sec-ch-ua-mobile': '?0',
|
|
||||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.46',
|
|
||||||
'Origin': 'https://beian.miit.gov.cn',
|
|
||||||
'Sec-Fetch-Site': 'same-site',
|
|
||||||
'Sec-Fetch-Mode': 'cors',
|
|
||||||
'Sec-Fetch-Dest': 'empty',
|
|
||||||
'Referer': 'https://beian.miit.gov.cn/',
|
|
||||||
'Accept-Encoding': 'gzip, deflate, br',
|
|
||||||
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
|
|
||||||
'Cookie': '__jsluid_s=' + cookie
|
|
||||||
}
|
|
||||||
data = {
|
|
||||||
'authKey': authKey,
|
|
||||||
'timeStamp': timeStamp
|
|
||||||
}
|
|
||||||
t_response = requests.post(t_url,data=data,headers=t_headers,verify=False)
|
|
||||||
try:
|
|
||||||
get_token = t_response.json()['params']['bussiness']
|
|
||||||
except:
|
|
||||||
return {'code':-1,'msg':'请求被禁止,请稍后或更换头部与IP后再试('+t_response.status_code+')'}
|
|
||||||
|
|
||||||
#获取验证图像、UUID
|
|
||||||
p_url = 'https://hlwicpfwc.miit.gov.cn/icpproject_query/api/image/getCheckImage'
|
|
||||||
p_headers = {
|
|
||||||
'Host': 'hlwicpfwc.miit.gov.cn',
|
|
||||||
'Connection': 'keep-alive',
|
|
||||||
'Content-Length': '0',
|
|
||||||
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="90", "Microsoft Edge";v="90"',
|
|
||||||
'Accept': 'application/json, text/plain, */*',
|
|
||||||
'DNT': '1',
|
|
||||||
'sec-ch-ua-mobile': '?0',
|
|
||||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.46',
|
|
||||||
'token': get_token,
|
|
||||||
'Origin': 'https://beian.miit.gov.cn',
|
|
||||||
'Sec-Fetch-Site': 'same-site',
|
|
||||||
'Sec-Fetch-Mode': 'cors',
|
|
||||||
'Sec-Fetch-Dest': 'empty',
|
|
||||||
'Referer': 'https://beian.miit.gov.cn/',
|
|
||||||
'Accept-Encoding': 'gzip, deflate, br',
|
|
||||||
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
|
|
||||||
'Cookie': '__jsluid_s=' + cookie
|
|
||||||
}
|
|
||||||
p_request = requests.post(p_url,data='',headers=p_headers,verify=False)
|
|
||||||
try:
|
|
||||||
p_uuid = p_request.json()['params']['uuid']
|
|
||||||
big_image = p_request.json()['params']['bigImage']
|
|
||||||
small_image = p_request.json()['params']['smallImage']
|
|
||||||
except KeyError:
|
|
||||||
return {'code':-1,'msg':'获取验证图像失败,请重试('+p_request.status_code+')'}
|
|
||||||
|
|
||||||
#解码图片,写入并计算图片缺口位置
|
|
||||||
with open('bigImage.jpg','wb') as f:
|
|
||||||
f.write(base64.b64decode(big_image))
|
|
||||||
f.close()
|
|
||||||
with open('smallImage.jpg','wb') as f:
|
|
||||||
f.write(base64.b64decode(small_image))
|
|
||||||
f.close()
|
|
||||||
background_image = cv2.imread('bigImage.jpg',cv2.COLOR_GRAY2RGB)
|
|
||||||
fill_image = cv2.imread('smallImage.jpg',cv2.COLOR_GRAY2RGB)
|
|
||||||
background_image_canny = cv2.Canny(background_image, 100, 200)
|
|
||||||
fill_image_canny = cv2.Canny(fill_image, 100, 300)
|
|
||||||
position_match = cv2.matchTemplate(background_image, fill_image, cv2.TM_CCOEFF_NORMED)
|
|
||||||
min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(position_match)
|
|
||||||
position = max_loc
|
|
||||||
mouse_length = position[0]+1
|
|
||||||
os.remove('bigImage.jpg')
|
|
||||||
os.remove('smallImage.jpg')
|
|
||||||
|
|
||||||
#通过拼图验证,获取sign
|
|
||||||
check_url = 'https://hlwicpfwc.miit.gov.cn/icpproject_query/api/image/checkImage'
|
|
||||||
check_headers = {
|
|
||||||
'Host': 'hlwicpfwc.miit.gov.cn',
|
|
||||||
'Accept': 'application/json, text/plain, */*',
|
|
||||||
'Connection': 'keep-alive',
|
|
||||||
'Content-Length': '60',
|
|
||||||
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="90", "Microsoft Edge";v="90"',
|
|
||||||
'DNT': '1',
|
|
||||||
'sec-ch-ua-mobile': '?0',
|
|
||||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.42',
|
|
||||||
'token': get_token,
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
'Origin': 'https://beian.miit.gov.cn',
|
|
||||||
'Sec-Fetch-Site': 'same-site',
|
|
||||||
'Sec-Fetch-Mode': 'cors',
|
|
||||||
'Sec-Fetch-Dest': 'empty',
|
|
||||||
'Referer': 'https://beian.miit.gov.cn/',
|
|
||||||
'Accept-Encoding': 'gzip, deflate, br',
|
|
||||||
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
|
|
||||||
'Cookie': '__jsluid_s=' + cookie
|
|
||||||
}
|
|
||||||
check_data = {
|
|
||||||
'key':p_uuid,
|
|
||||||
'value':mouse_length
|
|
||||||
}
|
|
||||||
check_request = requests.post(check_url,json=check_data,headers=check_headers,verify=False)
|
|
||||||
try:
|
|
||||||
sign = check_request.json()['params']
|
|
||||||
except Exception:
|
|
||||||
return {'code':-1,'msg':'校验图片信息失败,请重试('+check_request.status_code+')'}
|
|
||||||
|
|
||||||
|
|
||||||
#获取备案信息
|
|
||||||
info_url = 'https://hlwicpfwc.miit.gov.cn/icpproject_query/api/icpAbbreviateInfo/queryByCondition'
|
|
||||||
info_headers = {
|
|
||||||
'Host': 'hlwicpfwc.miit.gov.cn',
|
|
||||||
'Connection': 'keep-alive',
|
|
||||||
'Content-Length': '78',
|
|
||||||
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="90", "Microsoft Edge";v="90"',
|
|
||||||
'DNT': '1',
|
|
||||||
'sec-ch-ua-mobile': '?0',
|
|
||||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.42',
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
'Accept': 'application/json, text/plain, */*',
|
|
||||||
'uuid': p_uuid,
|
|
||||||
'token': get_token,
|
|
||||||
'sign': sign,
|
|
||||||
'Origin': 'https://beian.miit.gov.cn',
|
|
||||||
'Sec-Fetch-Site': 'same-site',
|
|
||||||
'Sec-Fetch-Mode': 'cors',
|
|
||||||
'Sec-Fetch-Dest': 'empty',
|
|
||||||
'Referer': 'https://beian.miit.gov.cn/',
|
|
||||||
'Accept-Encoding': 'gzip, deflate, br',
|
|
||||||
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
|
|
||||||
'Cookie': '__jsluid_s=' + cookie
|
|
||||||
}
|
|
||||||
info_request = requests.post(info_url,json=info_data,headers=info_headers,verify=False)
|
|
||||||
domain_total = info_request.json()['params']['total']
|
|
||||||
result_list = []
|
|
||||||
|
|
||||||
for info_base in info_request.json()['params']['list']:
|
|
||||||
result_list.append({'domain':info_base['domain'], 'mainLicence':info_base['mainLicence'], 'webLicence':info_base['serviceLicence'], 'unitName':info_base['unitName'], 'unitType':info_base['natureName'], 'updateTime':info_base['updateRecordTime'], 'limitAccess':info_base['limitAccess'], 'contentTypeName':info_base['contentTypeName']})
|
|
||||||
|
|
||||||
return {'code':0,'msg':'success','data':result_list, 'total':domain_total}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
import icp,json,flask
|
|
||||||
|
|
||||||
HOST='127.0.0.1'
|
|
||||||
PORT=9088
|
|
||||||
|
|
||||||
app = flask.Flask(__name__)
|
|
||||||
json_header = {'Content-Type':'application/json; charset=utf-8'}
|
|
||||||
|
|
||||||
@app.route('/',methods=['GET'])
|
|
||||||
def home():
|
|
||||||
domain = flask.request.args.get('domain')
|
|
||||||
result = icp.icpquery(domain)
|
|
||||||
return flask.Response(json.dumps(result),headers=json_header)
|
|
||||||
|
|
||||||
@app.errorhandler(404)
|
|
||||||
def notfound(e):
|
|
||||||
errorStr = '''<html>
|
|
||||||
<head><title>404 Not Found</title></head>
|
|
||||||
<body>
|
|
||||||
<center><h1>404 Not Found</h1></center>
|
|
||||||
<hr><center>server</center>
|
|
||||||
</body>
|
|
||||||
</html>'''
|
|
||||||
headers = {
|
|
||||||
"Content-Type":"text/html"
|
|
||||||
}
|
|
||||||
return flask.Response(errorStr,status=404,headers=headers)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
from gevent.pywsgi import WSGIServer
|
|
||||||
http_server = WSGIServer((HOST, PORT), app)
|
|
||||||
http_server.serve_forever()
|
|
||||||
#app.run(port=PORT,host=HOST)
|
|
||||||
@@ -49,9 +49,8 @@ class App extends Plugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function queryapi($uin){
|
private function queryapi($uin){
|
||||||
//此处需填写QQAPI的接口地址(https://github.com/netcccyun/qqapi)
|
$url = config_get('qqapi_url').'api.php?act=getqqlevel';
|
||||||
$url = 'http://qqapiurl/api.php?act=getqqlevel';
|
$post = 'key='.config_get('qqapi_key').'&uin='.$uin;
|
||||||
$post = 'key=查询密钥&uin='.$uin;
|
|
||||||
$data = get_curl($url, $post);
|
$data = get_curl($url, $post);
|
||||||
$arr = json_decode($data, true);
|
$arr = json_decode($data, true);
|
||||||
if(isset($arr['code']) && $arr['code']==0){
|
if(isset($arr['code']) && $arr['code']==0){
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
|
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
|
||||||
<meta name="renderer" content="webkit"/>
|
<meta name="renderer" content="webkit"/>
|
||||||
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,500,600,700,800">
|
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,500,600,700,800">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/normalize/5.0.0/normalize.min.css">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/normalize/5.0.0/normalize.min.css">
|
||||||
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
@@ -10,13 +10,13 @@
|
|||||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<meta name="format-detection" content="telephone=no">
|
<meta name="format-detection" content="telephone=no">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="css/layuimini.css?v=2.0.4.2" media="all">
|
<link rel="stylesheet" href="css/layuimini.css?v=2.0.4.2" media="all">
|
||||||
<link rel="stylesheet" href="css/themes/default.css" media="all">
|
<link rel="stylesheet" href="css/themes/default.css" media="all">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.min.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/font-awesome/4.7.0/css/font-awesome.min.css" media="all">
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
<script src="//cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/html5shiv/r29/html5.min.js"></script>
|
||||||
<script src="//cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/respond.js/1.4.2/respond.min.js"></script>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
<style id="layuimini-bg-color">
|
<style id="layuimini-bg-color">
|
||||||
</style>
|
</style>
|
||||||
@@ -123,7 +123,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="js/lay-config.js?v=2.0.0" charset="utf-8"></script>
|
<script src="js/lay-config.js?v=2.0.0" charset="utf-8"></script>
|
||||||
<script src="js/common.js" charset="utf-8"></script>
|
<script src="js/common.js" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -9,10 +9,10 @@
|
|||||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<meta name="format-detection" content="telephone=no">
|
<meta name="format-detection" content="telephone=no">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
<script src="//cdn.staticfile.org/html5shiv/3.7.3/html5shiv.min.js"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||||
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
|
<script src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/respond.js/1.4.2/respond.min.js"></script>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
<style>
|
<style>
|
||||||
html, body {width: 100%;height: 100%;overflow: hidden}
|
html, body {width: 100%;height: 100%;overflow: hidden}
|
||||||
@@ -61,8 +61,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="//cdn.staticfile.org/jquery/3.6.0/jquery.min.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.min.js" charset="utf-8"></script>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="./lib/jq-module/jquery.particleground.min.js" charset="utf-8"></script>
|
<script src="./lib/jq-module/jquery.particleground.min.js" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
layui.use(['form'], function () {
|
layui.use(['form'], function () {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<meta name="format-detection" content="telephone=no">
|
<meta name="format-detection" content="telephone=no">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<style>
|
<style>
|
||||||
.error .clip .shadow {height:180px;}
|
.error .clip .shadow {height:180px;}
|
||||||
.error .clip:nth-of-type(2) .shadow {width:130px;}
|
.error .clip:nth-of-type(2) .shadow {width:130px;}
|
||||||
@@ -71,7 +71,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
function randomNum() {
|
function randomNum() {
|
||||||
return Math.floor(Math.random() * 9) + 1;
|
return Math.floor(Math.random() * 9) + 1;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../css/public.css" media="all">
|
<link rel="stylesheet" href="../css/public.css" media="all">
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
<option value="{{item}}">{{item}}</option>
|
<option value="{{item}}">{{item}}</option>
|
||||||
{{# }}}
|
{{# }}}
|
||||||
</script>
|
</script>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../js/common.js" charset="utf-8"></script>
|
<script src="../js/common.js" charset="utf-8"></script>
|
||||||
<script src="../js/api.js" charset="utf-8"></script>
|
<script src="../js/api.js" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../css/public.css" media="all">
|
<link rel="stylesheet" href="../css/public.css" media="all">
|
||||||
<script src="../js/common.js" charset="utf-8"></script>
|
<script src="../js/common.js" charset="utf-8"></script>
|
||||||
</head>
|
</head>
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../js/api.js" charset="utf-8"></script>
|
<script src="../js/api.js" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
layui.use(['form', 'table'], function () {
|
layui.use(['form', 'table'], function () {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../../css/public.css" media="all">
|
<link rel="stylesheet" href="../../css/public.css" media="all">
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
|
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
|
||||||
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
|
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../../css/public.css" media="all">
|
<link rel="stylesheet" href="../../css/public.css" media="all">
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
|
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
|
||||||
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
|
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../css/public.css" media="all">
|
<link rel="stylesheet" href="../css/public.css" media="all">
|
||||||
<script src="../js/common.js" charset="utf-8"></script>
|
<script src="../js/common.js" charset="utf-8"></script>
|
||||||
</head>
|
</head>
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../js/lay-config.js?v=2.0.0" charset="utf-8"></script>
|
<script src="../js/lay-config.js?v=2.0.0" charset="utf-8"></script>
|
||||||
<script src="../js/api.js" charset="utf-8"></script>
|
<script src="../js/api.js" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../../css/public.css" media="all">
|
<link rel="stylesheet" href="../../css/public.css" media="all">
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
|
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
|
||||||
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
|
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../lib/font-awesome-4.7.0/css/font-awesome.min.css" media="all">
|
<link rel="stylesheet" href="../lib/font-awesome-4.7.0/css/font-awesome.min.css" media="all">
|
||||||
<link rel="stylesheet" href="../css/public.css" media="all">
|
<link rel="stylesheet" href="../css/public.css" media="all">
|
||||||
<style>
|
<style>
|
||||||
@@ -186,7 +186,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!--</div>-->
|
<!--</div>-->
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
|
<script src="../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
|
||||||
<script src="../js/common.js" charset="utf-8"></script>
|
<script src="../js/common.js" charset="utf-8"></script>
|
||||||
<script src="../js/api.js" charset="utf-8"></script>
|
<script src="../js/api.js" charset="utf-8"></script>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../css/public.css" media="all">
|
<link rel="stylesheet" href="../css/public.css" media="all">
|
||||||
<script src="../js/common.js" charset="utf-8"></script>
|
<script src="../js/common.js" charset="utf-8"></script>
|
||||||
</head>
|
</head>
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../js/api.js" charset="utf-8"></script>
|
<script src="../js/api.js" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
layui.use(['form', 'table'], function () {
|
layui.use(['form', 'table'], function () {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../../css/public.css" media="all">
|
<link rel="stylesheet" href="../../css/public.css" media="all">
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
|
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
|
||||||
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
|
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../../css/public.css" media="all">
|
<link rel="stylesheet" href="../../css/public.css" media="all">
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
|
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
|
||||||
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
|
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../css/public.css" media="all">
|
<link rel="stylesheet" href="../css/public.css" media="all">
|
||||||
<script src="../js/common.js" charset="utf-8"></script>
|
<script src="../js/common.js" charset="utf-8"></script>
|
||||||
<style>
|
<style>
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../js/api.js" charset="utf-8"></script>
|
<script src="../js/api.js" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../../css/public.css" media="all">
|
<link rel="stylesheet" href="../../css/public.css" media="all">
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
@@ -117,7 +117,7 @@
|
|||||||
{{# }); }}
|
{{# }); }}
|
||||||
</select>
|
</select>
|
||||||
</script>
|
</script>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
|
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
|
||||||
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
|
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../../css/public.css" media="all">
|
<link rel="stylesheet" href="../../css/public.css" media="all">
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
@@ -124,7 +124,7 @@
|
|||||||
{{# }); }}
|
{{# }); }}
|
||||||
</select>
|
</select>
|
||||||
</script>
|
</script>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
|
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
|
||||||
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
|
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../../css/public.css" media="all">
|
<link rel="stylesheet" href="../../css/public.css" media="all">
|
||||||
<link rel="stylesheet" href="../../js/lay-module/step-lay/step.css" media="all">
|
<link rel="stylesheet" href="../../js/lay-module/step-lay/step.css" media="all">
|
||||||
</head>
|
</head>
|
||||||
@@ -123,7 +123,7 @@
|
|||||||
{{# }); }}
|
{{# }); }}
|
||||||
</select>
|
</select>
|
||||||
</script>
|
</script>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
|
<script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
|
||||||
<script src="../../js/api.js" charset="utf-8"></script>
|
<script src="../../js/api.js" charset="utf-8"></script>
|
||||||
<script src="../../js/common.js" charset="utf-8"></script>
|
<script src="../../js/common.js" charset="utf-8"></script>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../css/public.css" media="all">
|
<link rel="stylesheet" href="../css/public.css" media="all">
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
@@ -125,6 +125,19 @@
|
|||||||
<input type="text" name="captcha_key" placeholder="请输入极验KEY" class="layui-input">
|
<input type="text" name="captcha_key" placeholder="请输入极验KEY" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<blockquote class="layui-elem-quote"><a href="https://github.com/netcccyun/qqapi" target="_blank">QQ-API</a>接口配置(ICP备案查询、QQ等级查询等工具使用)</blockquote>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">接口地址:</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" name="qqapi_url" placeholder="必须以http://或https://开头,以/结尾" class="layui-input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">接口密钥:</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" name="qqapi_key" placeholder="请输入API接口密钥" class="layui-input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<blockquote class="layui-elem-quote">CDN地址配置
|
<blockquote class="layui-elem-quote">CDN地址配置
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
@@ -159,7 +172,7 @@
|
|||||||
<option value="{{item}}">{{item}}</option>
|
<option value="{{item}}">{{item}}</option>
|
||||||
{{# }}}
|
{{# }}}
|
||||||
</script>
|
</script>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../js/common.js" charset="utf-8"></script>
|
<script src="../js/common.js" charset="utf-8"></script>
|
||||||
<script src="../js/api.js" charset="utf-8"></script>
|
<script src="../js/api.js" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../css/public.css" media="all">
|
<link rel="stylesheet" href="../css/public.css" media="all">
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../js/common.js" charset="utf-8"></script>
|
<script src="../js/common.js" charset="utf-8"></script>
|
||||||
<script src="../js/api.js" charset="utf-8"></script>
|
<script src="../js/api.js" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../css/public.css" media="all">
|
<link rel="stylesheet" href="../css/public.css" media="all">
|
||||||
<script src="../js/common.js" charset="utf-8"></script>
|
<script src="../js/common.js" charset="utf-8"></script>
|
||||||
</head>
|
</head>
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../js/lay-config.js?v=2.0.0" charset="utf-8"></script>
|
<script src="../js/lay-config.js?v=2.0.0" charset="utf-8"></script>
|
||||||
<script src="../js/api.js" charset="utf-8"></script>
|
<script src="../js/api.js" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
|
<link rel="stylesheet" href="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/css/layui.css" media="all">
|
||||||
<link rel="stylesheet" href="../css/public.css" media="all">
|
<link rel="stylesheet" href="../css/public.css" media="all">
|
||||||
<script src="../js/common.js" charset="utf-8"></script>
|
<script src="../js/common.js" charset="utf-8"></script>
|
||||||
</head>
|
</head>
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
|
<script src="//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.3/layui.js" charset="utf-8"></script>
|
||||||
<script src="../js/api.js" charset="utf-8"></script>
|
<script src="../js/api.js" charset="utf-8"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
|||||||
@@ -5,11 +5,11 @@
|
|||||||
<link rel="icon" href="/favicon.ico"/>
|
<link rel="icon" href="/favicon.ico"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||||
|
|
||||||
<link href="https://cdn.staticfile.org/daisyui/2.2.2/full.min.css" rel="stylesheet" type="text/css"/>
|
<link href="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/daisyui/2.2.2/full.min.css" rel="stylesheet" type="text/css"/>
|
||||||
<link href="https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css" rel="stylesheet" type="text/css"/>
|
<link href="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/tailwindcss/2.2.19/tailwind.min.css" rel="stylesheet" type="text/css"/>
|
||||||
<script src="https://cdn.staticfile.org/limonte-sweetalert2/11.4.4/sweetalert2.all.min.js"></script>
|
<script src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/limonte-sweetalert2/11.4.4/sweetalert2.all.min.js"></script>
|
||||||
<script src="https://cdn.staticfile.org/vue/2.6.14/vue.min.js"></script>
|
<script src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/2.6.14/vue.min.js"></script>
|
||||||
<script src="https://cdn.staticfile.org/axios/0.26.0/axios.min.js"></script>
|
<script src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/axios/0.26.0/axios.min.js"></script>
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
background-image: url("static/images/install_background.jpg");
|
background-image: url("static/images/install_background.jpg");
|
||||||
|
|||||||
Reference in New Issue
Block a user