微信企业号请求数据基类封装:

本文介绍了一个用于发送HTTPS请求并处理响应的Java工具类。该工具支持GET和POST两种请求方式,能够处理JSON响应数据和字节数组类型的响应。文中详细展示了如何配置SSL连接、发送请求及读取响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.SecureRandom;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;

import xxx.Enum.EnumMethod;
import net.sf.json.JSONObject;

public class HttpRequestUtil {
 
 /**
  * 发起https请求并获取结果
  *
  * @param requestUrl 请求地址
  * @param requestMethod 请求方式(GET、POST)
  * @param outputStr 提交的数据
  * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
  */
 public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) {
  
  System.err.println(requestMethod+"\toutputStr="+outputStr);
  
  JSONObject jsonObject = null;
  StringBuffer buffer = new StringBuffer();
  try {
   // 创建SSLContext对象,并使用我们指定的信任管理器初始化
   TrustManager[] tm = { new MyX509TrustManager() };
   SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
   sslContext.init(null, tm, new java.security.SecureRandom());
   // 从上述SSLContext对象中得到SSLSocketFactory对象
   SSLSocketFactory ssf = sslContext.getSocketFactory();

   URL url = new URL(requestUrl);
   HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
   httpUrlConn.setSSLSocketFactory(ssf);

   httpUrlConn.setDoOutput(true);
   httpUrlConn.setDoInput(true);
   httpUrlConn.setUseCaches(false);
   // 设置请求方式(GET/POST)
   httpUrlConn.setRequestMethod(requestMethod);

   if ("GET".equalsIgnoreCase(requestMethod))
    httpUrlConn.connect();

   // 当有数据需要提交时
   if (null != outputStr) {
    OutputStream outputStream = httpUrlConn.getOutputStream();
    // 注意编码格式,防止中文乱码
    outputStream.write(outputStr.getBytes("UTF-8"));
    outputStream.close();
   }

   // 将返回的输入流转换成字符串
   InputStream inputStream = httpUrlConn.getInputStream();
   InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
   BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

   String str = null;
   while ((str = bufferedReader.readLine()) != null) {
    buffer.append(str);
   }
   bufferedReader.close();
   inputStreamReader.close();
   // 释放资源
   inputStream.close();
   inputStream = null;
   httpUrlConn.disconnect();
   jsonObject = JSONObject.fromObject(buffer.toString());
   //System.out.println("jsonObject="+jsonObject);
  } catch (ConnectException ce) {
   ce.printStackTrace();
   System.out.println("网络链接失败!");
  } catch (Exception e) {
   e.printStackTrace();
  }
  return jsonObject;
 }
 
 /**
  * 发起https请求并获取字节数组结果
  * @param requestUrl
  * @param requestMethod
  * @param data
  * @return
  */
 public static byte[] httpRequest_byte(String requestUrl, String requestMethod, byte[] data) {
  ByteArrayOutputStream out = new ByteArrayOutputStream();
  try {
   if (requestMethod == EnumMethod.GET.name() && data != null && data.length > 0) {
    if (requestUrl.indexOf('?') > 0) {
     requestUrl += '&';
    } else {
     requestUrl += '?';
    }
    requestUrl += new String(data);
   }
   URL url = new URL(requestUrl);
   HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
   if (httpUrlConn instanceof HttpsURLConnection) {
    // 创建SSLContext对象,并使用我们指定的信任管理器初始化
    TrustManager[] tm = { new MyX509TrustManager() };
    SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
    sslContext.init(null, tm, new SecureRandom());
    // 从上述SSLContext对象中得到SSLSocketFactory对象
    SSLSocketFactory ssf = sslContext.getSocketFactory();
    ((HttpsURLConnection) httpUrlConn).setSSLSocketFactory(ssf);
   }
   boolean truePost = requestMethod == EnumMethod.POST.name() && data != null && data.length > 0;
   httpUrlConn.setDoOutput(truePost);
   httpUrlConn.setDoInput(true);
   httpUrlConn.setUseCaches(false);
   // 设置请求方式(GET/POST)
   httpUrlConn.setRequestMethod(requestMethod);

   if (requestMethod == EnumMethod.GET.name()) {
    httpUrlConn.connect();
   } else if (truePost) {
    // 提交数据
    OutputStream outputStream = httpUrlConn.getOutputStream();
    outputStream.write(data);
    outputStream.close();
   }

   // 读取返回数据
   InputStream inputStream = httpUrlConn.getInputStream();
   byte[] buf = new byte[1024 * 2];
   int len;
   while ((len = inputStream.read(buf)) != -1) {
    out.write(buf, 0, len);
   }
   // 释放资源
   out.close();
   inputStream.close();
   inputStream = null;
   httpUrlConn.disconnect();
  } catch (ConnectException ce) {
  } catch (Exception e) {
  }
  return out.toByteArray();
 }
}

 

package xxx.Enum;

public enum EnumMethod {
 GET,POST;
}

 

 

内容概要:本文介绍了基于Python实现的SSA-GRU(麻雀搜索算法优化门控循环单元)时间序列预测项目。项目旨在通过结合SSA的全局搜索能力和GRU的时序信息处理能力,提升时间序列预测的精度和效率。文中详细描述了项目的背景、目标、挑战及解决方案,涵盖了从数据预处理到模型训练、优化及评估的全流程。SSA用于优化GRU的超参数,如隐藏层单元数、学习率等,以解决传统方法难以捕捉复杂非线性关系的问题。项目还提供了具体的代码示例,包括GRU模型的定义、训练和验证过程,以及SSA的种群初始化、迭代更新策略和适应度评估函数。; 适合人群:具备一定编程基础,特别是对时间序列预测和深度学习有一定了解的研究人员和技术开发者。; 使用场景及目标:①提高时间序列预测的精度和效率,适用于金融市场分析、气象预报、工业设备故障诊断等领域;②解决传统方法难以捕捉复杂非线性关系的问题;③通过自动化参数优化,减少人工干预,提升模型开发效率;④增强模型在不同数据集和未知环境中的泛化能力。; 阅读建议:由于项目涉及深度学习和智能优化算法的结合,建议读者在阅读过程中结合代码示例进行实践,理解SSA和GRU的工作原理及其在时间序列预测中的具体应用。同时,关注数据预处理、模型训练和优化的每个步骤,以确保对整个流程有全面的理解。
内容概要:本文详细介绍了如何使用PyQt5创建一个功能全面的桌面备忘录应用程序,涵盖从环境准备、数据库设计、界面设计到主程序结构及高级功能实现的全过程。首先,介绍了所需安装的Python库,包括PyQt5、sqlite3等。接着,详细描述了SQLite数据库的设计,创建任务表和类别表,并插入默认类别。然后,使用Qt Designer设计UI界面,包括主窗口、任务列表、工具栏、过滤器和日历控件等。主程序结构部分,展示了如何初始化UI、加载数据数据、显示任务列表以及连接信与槽。任务管理功能方面,实现了添加、编辑、删除、标记完成等操作。高级功能包括类别管理、数据导入导出、优先级视觉标识、到期日提醒、状态管理和智能筛选等。最后,提供了应用启动与主函数的代码,并展望了扩展方向,如多用户支持、云同步、提醒通知等。 适合人群:零基础或初学者,对Python和桌面应用程序开发感兴趣的开发者。 使用场景及目标:①学习PyQt5的基本使用方法,包括界面设计、信与槽机制;②掌握SQLite数据库的基本操作,如创建表、插入数据、查询等;③实现一个完整的桌面应用程序,具备增删改查和数据持久化功能;④了解如何为应用程序添加高级特性,如类别管理、数据导入导出、到期日提醒等。 阅读建议:此资源不仅适用于零基础的学习者,也适合有一定编程经验的开发者深入理解PyQt5的应用开发。建议读者跟随教程逐步实践,结合实际操作来理解和掌握每个步骤,同时可以尝试实现扩展功能,进一步提升自己的开发技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值