|
资讯缩略图:
资讯发布日期:2025-04-09
资讯发布简介:AIWROK软件常用OKHTTP方法小结汇集
资讯关键词:AIWROK软件常用OKHTTP方法小结汇集
资讯所属分类:IT资讯
联系:
① 本信息收集于网络,如有不对的地方欢迎联系我纠正! ② 本信息免费收录,不存在价格的问题! ③ 如果您的网站也想这样出现在这里,请您加好友情链接,我当天会审核通过!
④友情链接关键字:软件网站分类目录 网址:http://www.postbbs.com/
资讯详细描述
 | |  |  | 1. 模块概述OKHTTP工具模块是一个用于在ES5系统安卓JavaScript引擎Rhino环境下发送HTTP请求的工具集。它提供了多种HTTP请求方法,包括GET请求、JSON请求、表单POST请求、文件上传和下载等。每个方法都包含了参数校验、请求构建、响应处理以及异常捕获等逻辑,以确保请求的稳定性和可靠性。 2. 主要功能2.1 GET请求- 功能:发送HTTP GET请求到指定URL,并返回响应内容。
- 参数:
url :请求地址。key :请求头参数名(可选)。value :请求头参数值(可选)。code :请求编码,默认为'UTF-8'(可选)。
2.2 JSON请求- 功能:发送JSON格式的POST请求到指定URL,并返回响应内容。
- 参数:
url :请求地址。data :JSON格式的请求数据。key :请求头参数名(可选)。value :请求头参数值(可选)。code :请求编码,默认为'UTF-8'(可选)。
2.3 表单POST请求- 功能:发送表单数据的POST请求到指定URL,并返回响应内容。
- 参数:
url :请求地址。map :表单数据,可以是字符串或对象。key :请求头参数名(可选)。value :请求头参数值(可选)。code :请求编码,默认为'UTF-8'(可选)。
2.4 文件上传- 功能:上传文件到指定服务器,并返回响应内容。
- 参数:
url :请求地址。parameter :文件参数名。path :文件路径。map :附加表单数据,可以是字符串或对象(可选)。key :请求头参数名(可选)。value :请求头参数值(可选)。code :请求编码,默认为'UTF-8'(可选)。
2.5 文件下载- 功能:从指定URL下载文件到本地,并返回保存路径。
- 参数:
url :文件URL地址。path :本地保存路径。key :请求头参数名(可选)。value :请求头参数值(可选)。code :请求编码,默认为'UTF-8'(可选)。
2.6 清除所有自定义请求头- 功能:清除存储的全局请求头。
- 返回值:是否成功清除请求头。
3. 示例分析每个方法都提供了详细的测试示例,包括请求参数的设置、请求的发送以及响应的处理。这些示例不仅展示了如何使用这些方法,还提供了调试信息输出的示例,有助于开发者在开发过程中进行问题排查。. //方法1
/** * OKHTTP工具模块 - 完整版 * 适用:ES5系统安卓 JavaScript引擎Rhino * 最后更新:2025-04-09 */
var OKHTTP = { /** * 发送HTTP GET请求 * @param {string} url 请求地址 * @param {string} [key] 请求头参数名 * @param {string} [value] 请求头参数值 * @param {string} [code='UTF-8'] 请求编码 * @returns {string|null} 响应内容或null(错误时) */ get请求: function(url, key, value, code) { try { // 基本参数校验 if (typeof url !== 'string') return null; // 构建请求 var conn = new java.net.URL(url).openConnection(); conn.setRequestMethod("GET"); // 设置请求头 if (key && value) { conn.setRequestProperty(key, value); } // 设置编码 var encoding = code || 'UTF-8'; conn.setRequestProperty("Accept-Charset", encoding); // 获取响应 var responseCode = conn.getResponseCode(); if (responseCode >= 200 && responseCode < 300) { var inStream = new java.io.BufferedReader( new java.io.InputStreamReader(conn.getInputStream(), encoding) ); var inputLine; var response = new java.lang.StringBuffer(); while ((inputLine = inStream.readLine()) != null) { response.append(inputLine); } inStream.close(); return response.toString(); } else { printl("[GET请求错误] 状态码: " + responseCode); return null; } } catch (e) { printl("[GET请求异常] " + e.message); return null; } } };
// 测试示例 printl("=== HTTP GET测试 ==="); var 请求头名 = 'User-Agent'; var 请求头值 = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 QIHU 360SE/13.1.6380.0'; var 请求地址 = 'https://www.baidu.com'; var 请求编码 = 'UTF-8'; var ret = OKHTTP.get请求(请求地址, 请求头名, 请求头值, 请求编码); if (ret) { printl("请求成功,返回内容:"); printl(ret); } else { printl("请求失败"); } //方法2
/** * 字符串工具模块 - 完整版 * 适用:ES5系统安卓 JavaScript引擎Rhino * 最后更新:2025-04-02 */
var OKHTTP = { // 原有方法保持不变...
json请求: function(url, data, key, value, code) { try { // 增强参数校验 if (typeof url !== 'string' || !url.startsWith('http')) { printl("[参数错误] 无效的URL"); return null; } if (typeof data !== 'string') { printl("[参数错误] 数据必须是字符串"); return null; }
// 调试输出请求信息 printl("[请求调试] 目标URL: " + url); printl("[请求调试] 请求数据: " + data.substring(0, Math.min(data.length, 100)) + (data.length > 100 ? "..." : "")); var conn = new java.net.URL(url).openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setConnectTimeout(5000); // 设置编码和头信息 var encoding = code || "UTF-8"; conn.setRequestProperty("Content-Type", "application/json; charset=" + encoding); conn.setRequestProperty("Accept", "application/json; charset=" + encoding); if (key && value) { conn.setRequestProperty(key, value); printl("[请求调试] 设置请求头: " + key + ": " + value); } // 修正:使用Java的String类处理编码 var javaString = new java.lang.String(data); var bytes = javaString.getBytes(encoding); // 发送请求 var outStream = conn.getOutputStream(); outStream.write(bytes); outStream.flush(); outStream.close(); // 处理响应 var responseCode = conn.getResponseCode(); printl("[响应调试] 状态码: " + responseCode); if (responseCode >= 200 && responseCode < 300) { var inStream = new java.io.BufferedReader( new java.io.InputStreamReader(conn.getInputStream(), encoding) ); var response = new java.lang.StringBuffer(); var line; while ((line = inStream.readLine()) != null) { response.append(line); } inStream.close(); var responseText = response.toString(); printl("[响应调试] 响应长度: " + responseText.length); return responseText; } else { var errStream = new java.io.BufferedReader( new java.io.InputStreamReader(conn.getErrorStream(), encoding) ); var errorResponse = new java.lang.StringBuffer(); while ((line = errStream.readLine()) != null) { errorResponse.append(line); } errStream.close(); printl("[响应错误] 状态码: " + responseCode); printl("[响应错误] 错误详情: " + errorResponse.toString()); return null; } } catch (e) { printl("[请求异常] " + e.toString()); return null; } } };
// 测试示例 printl("=== 修复版中文JSON测试 ==="); var 测试数据 = JSON.stringify({ timestamp: new Date().getTime(), test: "中文测试修复版", data: "这里是没有乱码的中文内容" });
var ret = OKHTTP.json请求( 'https://postman-echo.com/post', 测试数据, 'User-Agent', 'Mozilla/5.0' );
if (ret) { printl("测试成功,响应数据:"); printl(ret); } else { printl("测试失败"); } //方法3
/** * 字符串工具模块 - 完整版 * 适用:ES5系统安卓 JavaScript引擎Rhino * 最后更新:2025-04-02 */
var OKHTTP = { // 原有方法保持不变...
/** * 发送表单POST请求 * @param {string} url 请求地址 * @param {string|Object} map 表单数据(map对象或查询字符串) * @param {string} [key] 请求头参数名 * @param {string} [value] 请求头参数值 * @param {string} [code='UTF-8'] 请求编码 * @returns {string|null} 响应内容或null(错误时) */ post请求: function(url, map, key, value, code) { try { // 参数校验 if (typeof url !== 'string' || !url.startsWith('http')) { printl("[参数错误] 无效的URL"); return null; }
// 处理map参数 var formData = ''; if (typeof map === 'string') { formData = map; } else if (typeof map === 'object') { // 将map对象转换为查询字符串 for (var k in map) { if (map.hasOwnProperty(k)) { if (formData) formData += '&'; formData += encodeURIComponent(k) + '=' + encodeURIComponent(map[k]); } } } else { printl("[参数错误] map必须是字符串或对象"); return null; }
// 调试输出 printl("[POST请求调试] 目标URL: " + url); printl("[POST请求调试] 表单数据: " + formData.substring(0, 100) + (formData.length > 100 ? "..." : ""));
var conn = new java.net.URL(url).openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setConnectTimeout(5000);
// 设置编码和头信息 var encoding = code || "UTF-8"; conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=" + encoding); if (key && value) { conn.setRequestProperty(key, value); printl("[POST请求调试] 设置请求头: " + key + ": " + value); }
// 发送请求数据 var outStream = new java.io.DataOutputStream(conn.getOutputStream()); outStream.writeBytes(formData); outStream.flush(); outStream.close();
// 处理响应 var responseCode = conn.getResponseCode(); printl("[POST响应调试] 状态码: " + responseCode);
if (responseCode >= 200 && responseCode < 300) { var inStream = new java.io.BufferedReader( new java.io.InputStreamReader(conn.getInputStream(), encoding) ); var response = new java.lang.StringBuffer(); var line; while ((line = inStream.readLine()) != null) { response.append(line); } inStream.close(); var responseText = response.toString(); printl("[POST响应调试] 响应长度: " + responseText.length); return responseText; } else { var errStream = new java.io.BufferedReader( new java.io.InputStreamReader(conn.getErrorStream(), encoding) ); var errorResponse = new java.lang.StringBuffer(); while ((line = errStream.readLine()) != null) { errorResponse.append(line); } errStream.close(); printl("[POST响应错误] 状态码: " + responseCode); printl("[POST响应错误] 错误详情: " + errorResponse.toString()); return null; } } catch (e) { printl("[POST请求异常] " + e.toString()); return null; } } };
// 测试示例 printl("=== POST请求测试 ==="); var 测试数据 = { a: 1, b: 2, c: "中文测试" };
var ret = OKHTTP.post请求( 'https://postman-echo.com/post', 测试数据, 'User-Agent', 'Mozilla/5.0' );
if (ret) { printl("测试成功,响应数据:"); printl(ret); } else { printl("测试失败"); } //方法4
/** * 字符串工具模块 - 完整版 * 适用:ES5系统安卓 JavaScript引擎Rhino * 最后更新:2025-04-02 */
var OKHTTP = { // 原有方法保持不变...
post请求表单: function(url, map, key, value, code) { try { // 参数校验 if (typeof url !== 'string' || !url.startsWith('http')) { printl("[参数错误] 无效的URL"); return null; }
// 处理map参数 var formData = ''; if (typeof map === 'string') { formData = map; } else if (typeof map === 'object') { var params = []; for (var k in map) { if (map.hasOwnProperty(k)) { var val = map[k]; if (val !== null && val !== undefined) { params.push( encodeURIComponent(k) + '=' + encodeURIComponent(typeof val === 'object' ? JSON.stringify(val) : val) ); } } } formData = params.join('&'); } else { printl("[参数错误] map必须是字符串或对象"); return null; }
// 调试信息 printl("[表单POST调试] 目标URL: " + url); printl("[表单POST调试] 表单数据: " + formData.substring(0, 100) + (formData.length > 100 ? "..." : ""));
var conn = new java.net.URL(url).openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setConnectTimeout(8000); conn.setReadTimeout(10000);
// 设置编码和头信息 var encoding = code || "UTF-8"; conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=" + encoding); if (key && value) { conn.setRequestProperty(key, value); printl("[表单POST调试] 设置请求头: " + key + ": " + value); }
// 修正:使用Java String类处理编码 var javaString = new java.lang.String(formData); var outStream = conn.getOutputStream(); outStream.write(javaString.getBytes(encoding)); outStream.flush(); outStream.close();
// 处理响应 var responseCode = conn.getResponseCode(); printl("[表单POST响应] 状态码: " + responseCode);
if (responseCode >= 200 && responseCode < 300) { var inStream = new java.io.BufferedReader( new java.io.InputStreamReader(conn.getInputStream(), encoding) ); var response = new java.lang.StringBuffer(); var line; while ((line = inStream.readLine()) != null) { response.append(line); } inStream.close(); var responseText = response.toString(); printl("[表单POST响应] 响应长度: " + responseText.length); return responseText; } else { var errStream = new java.io.BufferedReader( new java.io.InputStreamReader(conn.getErrorStream(), encoding) ); var errorResponse = new java.lang.StringBuffer(); while ((line = errStream.readLine()) != null) { errorResponse.append(line); } errStream.close(); printl("[表单POST错误] 错误响应: " + errorResponse.toString()); return null; } } catch (e) { printl("[表单POST异常] " + e.toString()); return null; } } };
// 测试示例 printl("=== 表单POST修复测试 ==="); var 测试数据 = { username: "张三", age: 25, skills: ["编程","测试"], meta: {vip: true} };
var ret = OKHTTP.post请求表单( 'https://postman-echo.com/post', 测试数据, 'User-Agent', 'Mozilla/5.0' );
if (ret) { printl("测试成功,响应数据:"); printl(ret); } else { printl("测试失败"); } //方法5
/** * 字符串工具模块 - 完整版 * 适用:ES5系统安卓 JavaScript引擎Rhino * 最后更新:2025-04-02 */
var OKHTTP = { // 原有方法保持不变...
/** * 上传文件到服务器 * @param {string} url 请求地址 * @param {string} parameter 文件参数名 * @param {string} path 文件路径 * @param {string|Object} map 附加表单数据 * @param {string} [key] 请求头参数名 * @param {string} [value] 请求头参数值 * @param {string} [code='UTF-8'] 请求编码 * @returns {string|null} 响应内容或null(错误时) */ 上传文件: function(url, parameter, path, map, key, value, code) { try { // 参数校验 if (typeof url !== 'string' || !url.startsWith('http')) { printl("[参数错误] 无效的URL"); return null; } if (typeof path !== 'string') { printl("[参数错误] 无效的文件路径"); return null; }
// 准备表单数据 var formData = ''; if (map) { if (typeof map === 'string') { formData = map; } else if (typeof map === 'object') { var params = []; for (var k in map) { if (map.hasOwnProperty(k)) { params.push( encodeURIComponent(k) + '=' + encodeURIComponent(map[k]) ); } } formData = params.join('&'); } }
// 调试信息 printl("[文件上传调试] 目标URL: " + url); printl("[文件上传调试] 文件参数: " + parameter); printl("[文件上传调试] 文件路径: " + path); if (formData) { printl("[文件上传调试] 附加数据: " + formData.substring(0, 50) + (formData.length > 50 ? "..." : "")); }
// 创建多部分请求 var boundary = "----WebKitFormBoundary" + java.lang.System.currentTimeMillis(); var conn = new java.net.URL(url).openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setConnectTimeout(10000); conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); if (key && value) { conn.setRequestProperty(key, value); printl("[文件上传调试] 设置请求头: " + key + ": " + value); }
var outStream = new java.io.DataOutputStream(conn.getOutputStream()); var encoding = code || "UTF-8"; var lineEnd = "\r\n"; var twoHyphens = "--";
// 写入表单数据 if (formData) { var parts = formData.split('&'); for (var i = 0; i < parts.length; i++) { var part = parts.split('='); if (part.length === 2) { outStream.writeBytes(twoHyphens + boundary + lineEnd); outStream.writeBytes('Content-Disposition: form-data; name="' + java.net.URLDecoder.decode(part[0], encoding) + '"' + lineEnd); outStream.writeBytes(lineEnd); outStream.writeBytes(java.net.URLDecoder.decode(part[1], encoding) + lineEnd); } } }
// 写入文件数据 var file = new java.io.File(path); if (file.exists()) { outStream.writeBytes(twoHyphens + boundary + lineEnd); outStream.writeBytes('Content-Disposition: form-data; name="' + parameter + '"; filename="' + file.getName() + '"' + lineEnd); outStream.writeBytes('Content-Type: application/octet-stream' + lineEnd); outStream.writeBytes(lineEnd);
var fileInput = new java.io.FileInputStream(file); var buffer = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 4096); var bytesRead; while ((bytesRead = fileInput.read(buffer)) != -1) { outStream.write(buffer, 0, bytesRead); } fileInput.close(); outStream.writeBytes(lineEnd); } else { printl("[文件错误] 文件不存在: " + path); return null; }
// 结束标记 outStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); outStream.flush(); outStream.close();
// 处理响应 var responseCode = conn.getResponseCode(); printl("[文件上传响应] 状态码: " + responseCode);
if (responseCode >= 200 && responseCode < 300) { var inStream = new java.io.BufferedReader( new java.io.InputStreamReader(conn.getInputStream(), encoding) ); var response = new java.lang.StringBuffer(); var line; while ((line = inStream.readLine()) != null) { response.append(line); } inStream.close(); var responseText = response.toString(); printl("[文件上传成功] 响应长度: " + responseText.length); return responseText; } else { printl("[文件上传错误] 服务器返回错误"); return null; } } catch (e) { printl("[文件上传异常] " + e.toString()); return null; } } };
// 测试示例 printl("=== 文件上传测试 ==="); var ret = OKHTTP.上传文件( 'https://postman-echo.com/post', 'myFile', '/sdcard/test.jpg', {desc: '测试文件', type: 'image/jpeg'}, 'User-Agent', 'Mozilla/5.0' );
if (ret) { printl("上传成功,服务器响应:"); printl(ret); } else { printl("上传失败"); } //方法6
/** * 字符串工具模块 - 完整版 * 适用:ES5系统安卓 JavaScript引擎Rhino * 最后更新:2025-04-02 */
var OKHTTP = { // 原有方法保持不变...
/** * 下载网络文件到本地 * @param {string} url 文件URL地址 * @param {string} path 本地保存路径 * @param {string} [key] 请求头参数名 * @param {string} [value] 请求头参数值 * @param {string} [code='UTF-8'] 请求编码 * @returns {string|null} 下载文件路径或null(失败时) */ 下载文件: function(url, path, key, value, code) { try { // 参数校验 if (typeof url !== 'string' || !url.startsWith('http')) { printl("[参数错误] 无效的URL"); return null; } if (typeof path !== 'string') { printl("[参数错误] 无效的保存路径"); return null; }
// 调试信息 printl("[文件下载调试] 资源URL: " + url); printl("[文件下载调试] 保存路径: " + path); var conn = new java.net.URL(url).openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(10000); conn.setReadTimeout(30000); // 设置请求头 if (key && value) { conn.setRequestProperty(key, value); printl("[文件下载调试] 设置请求头: " + key + ": " + value); }
// 获取文件流 var inStream = conn.getInputStream(); var file = new java.io.File(path); // 确保目录存在 file.getParentFile().mkdirs(); // 写入文件 var outStream = new java.io.FileOutputStream(file); var buffer = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 4096); var bytesRead; var totalBytes = 0; while ((bytesRead = inStream.read(buffer)) != -1) { outStream.write(buffer, 0, bytesRead); totalBytes += bytesRead; } // 关闭流 outStream.flush(); outStream.close(); inStream.close(); printl("[文件下载完成] 文件大小: " + totalBytes + " bytes"); return path; } catch (e) { printl("[文件下载异常] " + e.toString()); return null; } } };
// 测试示例 printl("=== 文件下载测试 ==="); var ret = OKHTTP.下载文件( 'https://example.com/test.zip', '/sdcard/downloads/test.zip', 'User-Agent', 'Mozilla/5.0' );
if (ret) { printl("文件下载成功,保存路径: " + ret); } else { printl("文件下载失败"); } //方法7
/** * 字符串工具模块 - 完整版 * 适用:ES5系统安卓 JavaScript引擎Rhino * 最后更新:2025-04-02 */
var OKHTTP = { // 存储全局请求头 _headers: {}, // 原有方法保持不变...
/** * 清除所有自定义请求头 * @returns {boolean} 是否成功 */ 清除header: function() { try { // 统计被清除的header数量 var count = Object.keys(this._headers).length; // 清空headers对象 this._headers = {}; printl("[header清除] 已移除 " + count + " 个请求头"); return true; } catch (e) { printl("[header清除异常] " + e.toString()); return false; } },
// 修改原有方法,使用_headers存储请求头 get请求: function(url, key, value, code) { try { var conn = new java.net.URL(url).openConnection(); // 应用全局headers for (var h in this._headers) { conn.setRequestProperty(h, this._headers[h]); } // ...其余代码不变 } catch(e) { /* ... */ } }, // 其他方法也做类似修改... };
// 测试示例 printl("=== header清除测试 ==="); OKHTTP._headers = { 'User-Agent': 'TestAgent', 'X-Token': '123456' }; printl("清除前header数: " + Object.keys(OKHTTP._headers).length); var result = OKHTTP.清除header(); printl("清除结果: " + result); printl("清除后header数: " + Object.keys(OKHTTP._headers).length);
| |  | |  |
|
|