空痕博客 - 编程技术分享
首页
小记
php
python
uniapp
前端
其他
机器人
QQ机器人
项目
功能库
应用
其他页面
友情链接
用户留言
联系空痕
热门文章
PHP搭建QQ机器人(QQ官方)
下载文件到指定文件夹
UTS引用原生jar包进行原生插件开发
欢迎回来 Typecho !
上传文件到夸克网盘python代码
标签搜索
python
uniapp
PHP
VUE
UTS
uniapp-x
模板
夸克网盘
html
APP
KongHen
机器人
QQ
ID3
pyinstaller
redis
Echarts
邮箱
js
lyear
发布
登录
注册
空痕博客 - 编程技术分享
广电飞梨卡
推荐文章
推荐
全新任务管理平台(流量主变现系统)开源
应用
# PHP
# uniapp
# VUE
# 小程序
# 开源
10月9日
14
283
2
推荐
夸克网盘python sdk库
功能库
# python
# 夸克网盘
8月13日
5
434
2
推荐
UTS编写字符串编解码/加密插件(安卓及鸿蒙端)
uniapp
uniapp-x
功能库
uts
# uniapp
# UTS
# uniapp-x
# 鸿蒙
10月24日
0
36
0
最新发布
2025-11-22
解决三个导致 Google Antigravity 无法登录的问题
问题1:网页显示登录成功,IDE无反应 问题描述: 启动IDE后,在使用谷歌登录界面,点击登录按钮,在网页中登录成功后,IDE无反应。 网页登录成功图片 问题原因: 代理未开启TUN模式。 解决方法: 开启TUN模式。 解决教程(以Clash为例): 启动Clash; 进入General页面(默认首页); General页面图片 点击TUN Mode后方的开启按钮; 点击install安装; 等待Clash重启; 重新启动Antigravity即可; 常见问题 修改后依旧不行? 点击登录成功后网页中的Click here,在Antigravity中稍微等待几秒。 切换节点。 点击Click here图片 问题2:卡顿在“Setting up your account” 解决方法: 与问题1的解决方法相同。依旧不可以则切换节点。 问题3:地区不支持 问题描述: 登陆后提示: Your current account is not eligible for Antigravity, because it is not currently available in your location. Your current account is not eligible for Antigravity. Try signing in with another personal Google account. 账户地区不支持图片 问题原因: 谷歌账号地区不在支持的范围内: 常见不支持:中国大陆、香港 常见支持:美国、日本 查看支持的地区:点击查看 查看你的账户所属地区:点击查看 解决方法: 修改账户关联地区为支持的地区,建议修改为美国或日本。使用谷歌账号所在地区的节点。 亲测日本可以。 解决教程: 打开谷歌账号关联地区更改请求:https://policies.google.com/country-association-form 地区选择日本或其他 原因选择我的工作地/学习地和居住地分属不同的地区或其他,不要选择我经常使用虚拟专用网 (VPN) 修改示例图片 点击提交即可 等待几个小时就能修改成功(会收到谷歌邮箱邮件通知)。 重启Antigravity登录即可。 修改关联地区成功邮件通知图片 快捷链接: Google Antigravity下载 参考文章: 解决Google Antigravity 登录不了的问题 Google Antigravity 无法登录问题的解决方法
其他
# Antigravity
# AI IDE
KongHen02
昨天
0
101
1
2025-11-10
移动云盘 Python 库使用文档
1. 配置与初始化 初始化 Yun139 会话: from Yun139 import Yun139Session # token要求为移除Basic 前缀的token Yun139Session = Yun139Session(token="你的Token")2. 刷新 Token # 刷新token status, result = Yun139Session.refresh_token() # 说明: # 1. 刷新token后,实例会自动更新token # 2. token有效期小于15天才可以刷新3. 文件管理 3.1 创建文件管理实例 from Yun139 import Yun139FileManager yun139_file = Yun139FileManager(session=Yun139Session)3.2 移动文件/文件夹 status, result = yun139_file.move_file( src_fids=["文件ID1", "文件ID2"], dst_pdir_fid="目标文件夹ID" ) # 返回示例 # True {"taskId": "1813463306615229568"} # 说明:获取任务ID后,可通过查询任务状态接口查询任务执行结果3.3 重命名文件/文件夹 status, result = yun139_file.rename_file( fid="文件ID", new_name="新文件名.png" ) # 返回示例 # True { # "success": true, # "code": "0000", # "message": "请求成功", # "data": { # "fileId": "FjyKEUGVXXmeU1zaXq1xO1JzHSVgVV0zn", # "parentFileId": "FrtDI1Whq8nNnxiot-7FEOr01Bd0YauDz", # "name": "2.png", # ... # } # }3.4 删除文件/文件夹 status, result = yun139_file.remove_file(fids=["文件ID1", "文件ID2"]) # 返回示例 # True { # "taskId": "1813468597285129984", # "batchFileResults": null # }4. 文件夹管理 4.1 创建文件夹管理实例 from Yun139 import Yun139FolderManager yun139_folder = Yun139FolderManager(session=Yun139Session)4.2 创建文件夹 status, result = yun139_folder.create_folder( folder_name="创建文件夹测试", pdir_fid="/" ) # 返回示例 # True { # "parentFileId": "/", # "fileId": "Fqkd1QUxDEyTTkHUC5mdPNrmiuEk8QwGk", # "type": "folder", # "fileName": "创建文件夹测试", # ... # }4.3 获取文件列表 # 第一页 status, result = yun139_folder.get_lists( pdir_fid="文件夹ID", size=50, cursor=None, sort_by="file_name", sort_order="asc" ) # 第二页 status, result = yun139_folder.get_lists( pdir_fid="文件夹ID", size=50, cursor="0|[57-0-0,12-0-1][JzlYdEZEWk8zMEZ0UjlaRjdIM0ZxLUc3MFpWMzBaZEhfYWUxVU1laUhicHlXYnRWLSc=,J0ZpcUlmVDFyNUlGRHc4MHhSenkxRzVwbEgwa2NxLVRMUSc=]", sort_by="file_name", sort_order="asc" ) # 參數説明 # cursor:首页为None,还有文件的话会返回nextPageCursor # 返回示例 # True { # "items": [ # { # "fileId": "Fiy3GykVcP9lxL8gNU1VJupjIC8I1XC1Z", # "parentFileId": "Fn_WtHq4W6j7l6Vvh1zZI1YwQYBbeFvi-", # "name": "跳转浏览器打开.jpg", # ... # } # ], # "nextPageCursor": null # }5. 分享链接管理 5.1 创建分享链接实例 from Yun139 import Yun139ShareManager yun139_share = Yun139ShareManager(session=Yun139Session)5.2 创建分享链接 status, result = yun139_share.create_share( title="分享7天测试", url_type=0, fid_list=["文件ID1"], fld_list=["文件夹ID1"], expired_time=7 ) # 返回示例 # True { # "result": { # "resultCode": "0", # "resultDesc": "" # }, # "getOutLinkRes": { # "getOutLinkResSet": [ # { # "objID": "aab3b2f8d00e491da36b466052d94a5a", # "passwd": "q9su", # "linkID": "2qidFfUiQDtnx", # "linkUrl": "https://yun.139.com/shareweb/#/w/i/2qidFfUiQDtnx", # "linkUrlMin": null # } # ] # } # }6. 任务管理 6.1 创建任务管理实例 from Yun139 import Yun139TaskManager yun139_task = Yun139TaskManager(session=Yun139Session)6.2 查询任务状态 status, result = yun139_task.get_task_status(task_id="任务ID") # 返回示例 # True { # "taskInfo": { # "taskId": "1813463306615229568", # "status": "Succeed", # "progress": 100, # "createdAt": "2025-11-07T02:27:52.000+08:00", # "startedAt": "2025-11-07T02:27:52.000+08:00", # "finishedAt": "2025-11-07T02:27:52.000+08:00", # "code": null, # "message": null, # "taskType": 2 # }, # "batchFileResults": [...], # "extraData": { # "totalProcess": 0, # "consumedProcess": 3 # } # }7. 文件上传 7.1 创建上传实例 from Yun139 import Yun139UploadManager yun139_upload = Yun139UploadManager(session=Yun139Session)7.2 上传文件 def progress(percent): print(f"上传进度: {percent}%") status, result = yun139_upload.upload_file( file_name="cc.zip", file_path="cc.zip", pdir_fid="目标文件夹ID", progress_callback=progress ) # 返回示例 # 上传进度: 100% # True { # "fileId": "Fvwh5Wdjb6pl8BXzvEgpGhazttFGo2_gZ", # "parentFileId": "FrtDI1Whq8nNnxiot-7FEOr01Bd0YauDz", # "name": "cc.zip", # "description": null, # "type": "file", # "fileExtension": "zip", # "category": "zip", # "createdAt": "2025-11-07T03:58:36.440+08:00", # "updatedAt": "2025-11-07T03:58:37.561+08:00", # ... # }8. 文件下载 8.1 创建下载实例 from Yun139 import Yun139DownManager yun139_download = Yun139DownManager(session=Yun139Session)8.2 获取下载链接 status, result = yun139_download.get_download_url(fid="文件ID") # 返回示例 # True { # "fileId": "FqRfdx22osqO-tU0ZvV1Nb7ryEM8dqKAj", # "errCode": null, # "message": null, # "url": "https://b22-obs-ykj-01.obs.cidc-rp-2006.joint.cmecloud.cn/...", # "expiration": "2025-11-07T03:20:13.396+08:00", # "size": 32029905, # "cdnUrl": "https://yun.mcloud.139.com:443/cdnv1/20241023/FqF8bFyjxCaPMGZCsjbNHSLngJhZUcQMj.pdf?sign=...", # "cdnSwitch": false, # ... # }9. 打印输出 所有接口返回均为 (status, result),可直接打印: import json print(status, json.dumps(result, ensure_ascii=False, indent=2))10. 其他说明 各接口参数请参考注释及返回示例。 任务型操作(如移动、删除等)返回 taskId 后,可用任务管理接口查询进度。 分享链接创建后会返回链接URL和提取码等信息。 代码下载 cloud_driver_sdk 参考文献 openList
功能库
# python
# 移动云盘
KongHen02
11月10日
0
17
0
2025-10-24
UTS编写字符串编解码/加密插件(安卓及鸿蒙端)
全局说明 编写说明 uts在安卓端编译为kotlin,所以,使用可以使用安卓自带库+kotlin的方法来实现 uts在鸿蒙端编译为ArkTs,ArkTs和UTS很相似,包括一些方法都一样,所以可以直接从ArkTs的文档里复制代码,稍微修改即可使用。 使用的库 安卓端 import MessageDigest from 'java.security.MessageDigest'; import BigInteger from 'java.math.BigInteger'; import Base64 from 'java.util.Base64'; 鸿蒙端 import util from '@ohos.util'; import { cryptoFramework } from '@kit.CryptoArchitectureKit';插件接口定义 /** * interface.uts * uts插件接口定义文件,按规范定义接口文件可以在HBuilderX中更好的做到语法提示 */ /** * 哈希算法枚举 */ export type HashAlgorithm = | "MD5" | "SHA1" | "SHA224" | "SHA256" | "SHA384" | "SHA512" /** * 哈希加密返回结果 */ export type HashResult = { hash: string } /** * 哈希加密函数定义 */ export type HashFunction = (input: string, algorithm: HashAlgorithm) => string1. Base64编解码 安卓端 /** * BASE64编码方法 * * @param input 输入字符串 * @return BASE64加密后的字符串 */ export const Base64Encode = function (input: string) : string { try { // 将字符串转换为字节数组 // toByteArray()为kotlin的方法 const inputBytes = input.toByteArray(); // 使用Base64编码器进行编码 const encodedBytes = Base64.getEncoder().encodeToString(inputBytes); // 将编码后的字节数组转换为字符串 return encodedBytes; } catch (e) { console.error("BASE64加密错误:", e); return ""; } } /** * BASE64解码方法 * * @param input 输入字符串 * @return BASE64解密后的字符串 */ export const Base64Decode = function (input: string) : string { try { // 将Base64字符串转换为字节数组 const decodedBytes = Base64.getDecoder().decode(input); // 将Java字节数组转换为UTS字符串 return new String(decodedBytes); } catch (e) { console.error("BASE64解密错误:", e); return ""; } } 鸿蒙端 /** * BASE64编码方法 * * @param input 输入字符串 * @return BASE64加密后的字符串 */ export const Base64Encode = function (input: string) : string { let textEncoder = new util.TextEncoder("utf-8"); let uint8Array = textEncoder.encodeInto(input); let base64Helper = new util.Base64Helper(); return base64Helper.encodeToStringSync(uint8Array); } /** * BASE64解码方法 * * @param input 输入字符串 * @return BASE64解密后的字符串 */ export const Base64Decode = function (input: string) : string { let Base64Helper = new util.Base64Helper(); let arr = Base64Helper.decodeSync(input) let textDecoder = util.TextDecoder.create('utf-8'); return textDecoder.decodeToString(arr); } 消息摘要计算 HASH加密使用统一方法,包含MD5、SHA1、SHA224、SHA256、SHA384、SHA512 安卓端 /** * 统一哈希加密方法 * * @param input 输入字符串 * @param algorithm 哈希算法枚举 * @return 哈希加密后的十六进制字符串 */ export const hash : HashFunction = function (input : string, algorithm: HashAlgorithm) : string { try { // 创建MessageDigest实例 const md = MessageDigest.getInstance(algorithm); // 输入数据转化为字节数组 const dataArray = input.toByteArray() // 计算哈希值 const hashBytes = md.digest(dataArray); // 转换为十六进制字符串 const result = BigInteger(1, hashBytes).toString(16) return result; } catch (e) { // 方法出错时返回空字符串 console.error(`${algorithm}加密错误:`, e); return ""; } }鸿蒙端 /** * 统一哈希加密方法 * * @param input 输入字符串 * @param algorithm 哈希算法枚举 * @return 哈希加密后的十六进制字符串 */ export const hash : HashFunction = function (input : string, algorithm: HashAlgorithm) : string { try { // 创建哈希实例 let md = cryptoFramework.createMd(algorithm); // 使用同步方法更新数据 let textEncoder = util.TextEncoder.create('utf-8'); let dataBlob : cryptoFramework.DataBlob = { data: textEncoder.encodeInto(input); }; md.updateSync(dataBlob); // 使用同步方法计算摘要 let mdResult : cryptoFramework.DataBlob = md.digestSync(); // 转换为十六进制字符串 let result = Array.from(mdResult.data).map(byte => byte.toString(16).padStart(2, '0')).join(''); return result; } catch (e) { // 方法出错时返回空字符串 // console.error(`${algorithm}加密错误:`, e); return ""; } }规范调用方法 这里安卓端和鸿蒙端相同 // MD5加密 export const MD5 = function (input: string) : string { return hash(input, 'MD5') } // SHA1加密 export const SHA1 = function (input: string) : string { return hash(input, 'SHA1') } // SHA224加密 export const SHA224 = function (input: string) : string { return hash(input, 'SHA224') } // SHA256加密 export const SHA256 = function (input: string) : string { return hash(input, 'SHA256') } // SHA384加密 export const SHA384 = function (input: string) : string { return hash(input, 'SHA384') } // SHA512加密 export const SHA512 = function (input: string) : string { return hash(input, 'SHA512') }使用方法 import * as KhCrypto from '@/uni_modules/kh-crypto' const input = ref<string>('待加密字符串'); const output = ref<string>('') // base64编码 output.value = KhCrypto.Base64Encode(inputText.value) // base64解码 output.value = KhCrypto.Base64Decode(inputText.value) // MD5加密 output.value = KhCrypto.MD5(inputText.value) // SHA1加密 output.value = KhCrypto.SHA1(inputText.value) // SHA224加密 output.value = KhCrypto.SHA224(inputText.value) // SHA256加密 output.value = KhCrypto.SHA256(inputText.value) // SHA384加密 output.value = KhCrypto.SHA384(inputText.value) // SHA512加密 output.value = KhCrypto.SHA512(inputText.value)插件源码 kh-crypto - DCloud插件市场 参考文档 在uts中如何将字符串转换为ByteArray Base64Helper - 鸿蒙开发API参考 消息摘要计算介绍及算法规格 - 鸿蒙开发指南
uniapp
uniapp-x
功能库
uts
# uniapp
# UTS
# uniapp-x
# 鸿蒙
KongHen02
10月24日
0
36
0
2025-10-16
Android Studio最新版汉化教程(2025年10月17日)
下载语言包插件 Android Studio没有官方的中文语言包,使用IntelliJ的代替 点击下载 修改插件信息 解压压缩包 打开文件夹,向下寻找,找到lib文件夹下的jar包 lib文件夾图片 解压jar包 找到META-INFO文件夹并打开 META-INFO文件夾图片 打开plugin.xml文件 修改版本号为你的Android Studio版本号 修改版本号图片 保存文件,并将解压出来的所有文件重新打包为zip 重新打包为zip图片 修改压缩包zip后缀为jar 修改后缀名图片 安装插件 打开Android Studio,选择从磁盘安装语言包插件 安装语言包图片 打开设置,搜索lang,找到Language and Region,修改语言为中文 修改语言图片 重启Android Studio即可 修改完成图片 参考内容 Android Studio 中文汉化教程 android studio导入中文包
安卓
KongHen02
10月16日
0
121
0
2025-10-13
完美解决请求跨域问题
问题说明 1. 什么是跨域问题? 跨域问题是由浏览器的同源策略(Same-Origin Policy)引起的一种安全限制。当网页尝试访问不同源(协议、域名、端口任一不同)的资源时,浏览器会阻止这种请求。 2. 同源策略定义 两个URL在以下三个方面完全相同时才属于同源: 协议(Protocol):http、https等 域名(Domain):www.example.com 端口(Port):80、443等 3. 常见的跨域场景 // 同源示例 http://example.com/app1 --> http://example.com/app2 // 同源 // 跨域示例 http://example.com --> https://example.com // 协议不同 http://test.example.com --> http://api.example.com // 域名不同 http://example.com:80 --> http://example.com:8080 // 端口不同4. 浏览器端表现 // 预检请求 Access to XMLHttpRequest at 'http://api.example.com' from origin 'http://test.example.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. // 正式请求 Access to XMLHttpRequest at 'http://api.example.com' from origin 'http://test.example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.跨域问题.png图片 跨域检测 跨域检测工具:跨域测试工具 解决方法 1. 服务端配置允许跨域(后端属于自己) 基于宝塔面板配置 最新版宝塔面板(11.0.0+) 最新版宝塔配置非常简单,直接在站点设置里开启允许跨域即可。 配置步骤: 打开宝塔面板“网站”,点击对应的站点 点击“其他设置” - “跨域访问CORS配置” - “状态” - 开启 - “保存” 即可 步骤演示图片 低版本宝塔面板(< 11.0.0) 低版本需要修改站点的配置文件,略微麻烦。 配置步骤: 打开宝塔面板“网站”,点击对应的站点 点击“配置文件”,添加以下内容即可 # 解决跨域问题--START add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET,POST,OPTIONS,PUT,DELETE; add_header Access-Control-Allow-Headers DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization; add_header Access-Control-Expose-Headers Content-Length,Content-Range; location / { # 处理 OPTIONS 预检请求 if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET,POST,OPTIONS,PUT,DELETE; add_header Access-Control-Allow-Headers DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization; add_header Access-Control-Expose-Headers Content-Length,Content-Range; add_header Access-Control-Max-Age 1728000; add_header Content-Type text/plain; add_header Content-Length 0; return 204; } } # 解决跨域问题--END步骤演示图片 存在的问题 需要删除自己代码里的允许跨域配置,否则会出现跨域冲突,出现错误。 // 配置冲突 Access to XMLHttpRequest at 'https://test.khkj6.com/' from origin 'https://tool.khkj.xyz' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed.配置冲突图片 2. 使用代理(服务端不属于自己) 跨域是浏览器端检测请求不同源,对请求进行拦截,所以,只要不使用浏览器发送请求就可以解决。 使用自己同源的域名或配置了允许跨域的域名进行代理 以下提供最基础的php演示 $ch = curl_init(); // POST 数据 $postData = [ 'name' => '张三', 'email' => 'zhangsan@example.com', 'age' => 25 ]; curl_setopt_array($ch, [ CURLOPT_URL => "https://api.example.com/users", CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($postData), // 表单格式 CURLOPT_HTTPHEADER => [ 'Content-Type: application/x-www-form-urlencoded', ] ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo "状态码: " . $httpCode . "\n"; echo "响应: " . $response;使用非浏览器发送请求 在app、小程序等环境中,不会出现跨域问题。 3. 浏览器禁用安全策略(仅开发环境) --disable-web-security --user-data-dir=文件夹路径配置步骤: 以chrome浏览器为例 在任意位置创建一个文件夹(用于存储禁用安全策略的浏览器数据) 示例路径:C:\MyChromeDevUserData 完整代码:--disable-web-security --user-data-dir=C:\MyChromeDevUserData 复制文件夹路径 找到chrome的安装目录 为chrome.exe创建快捷方式 打开创建的快捷方式的属性 打开属性图片 在属性 - 目标后方添加代码 f0ad4e 修改目标路径图片 使用新建的快捷方式进入,不会触发跨域问题
其他
# PHP
# 跨域
# 浏览器
KongHen02
10月13日
0
84
0
1
2
...
6
下一页
易航博客
易航博客
免费API
笒鬼鬼
安排博客
易航博客
小柚博客