Jython中基于Java 8类设置HTTPS请求头authentication的方法
实现方案
原有代码直接调用URL.openStream()发起HTTPS请求的写法,没有自定义请求头的配置入口,结合Java8原生能力,直接用JDK自带的HttpURLConnection类替换原有流打开逻辑即可,全程不依赖第三方Python库,完全适配厂商定制化的无扩展包的Jython运行时。
操作步骤
- 导入JDK核心包中的
java.net.HttpURLConnection类,该类属于Java 8 标准库内置能力,不存在依赖缺失问题 - 实例化URL对象后,不直接调用
openStream()读取内容,而是通过openConnection()获取通用连接对象,将其转换为HttpURLConnection类型 - 在连接配置阶段,调用
setRequestProperty方法设置authentication认证请求头,字段值直接使用方法入参传入的sessionToken - 配置连接的请求方法为GET、超时阈值等通用参数,避免请求异常挂死
- 连接参数全部配置完成后,再从连接对象获取输入流,后续的JSON解析逻辑和原有代码完全保持一致
- 请求处理完成后调用
disconnect()释放底层TCP连接,避免资源泄漏
修改后的完整代码
def getAllSafes (self, authenticationBaseURL, sessionToken): offset = 0 limit = 10 sort = "asc" # ascending includeAccounts = "true" extendedDetails = "true" get_allSafes_url = "https://" + authenticationBaseURL + "/PasswordVault/api/Safes?" + "includeAccounts=" + includeAccounts + "&offset=" + str(offset) + "&limit=" + str(limit) + "&sort=" + sort + "&extendedDetails=" + extendedDetails vault_url = URL(get_allSafes_url) # 打开通用连接并转为可配置请求头的HttpURLConnection实例 connection = vault_url.openConnection() http_conn = HttpURLConnection(connection) # 配置GET请求方法 http_conn.setRequestMethod("GET") # 核心:设置authentication认证请求头 http_conn.setRequestProperty("authentication", sessionToken) # 可选配置:连接超时5s,读取超时10s http_conn.setConnectTimeout(5000) http_conn.setReadTimeout(10000) # 原有JSON读取逻辑保持不变 isr = InputStreamReader(http_conn.getInputStream()) JsonReader = Json.createReader(isr) print JsonReader.readObject() JsonReader.close() # 关闭连接释放资源 http_conn.disconnect() return "_Determined at run time_"
补充说明
- 原代码中重复创建空JSON对象
wwJO的逻辑为冗余代码,可直接删除,不影响功能运行 - 如果目标接口实际要求的认证头字段名和预期的
authentication不一致,仅需修改setRequestProperty方法的第一个参数为对应字段名即可 - 由于目标请求为HTTPS协议,
openConnection()返回的实际是HttpsURLConnection实例,它是HttpURLConnection的子类,直接强转使用不存在兼容性问题,可正常支持所有请求配置能力 - 该方案完全基于Java 8 标准类库实现,不存在和定制Jython运行时的兼容性问题
内容的提问来源于stack exchange,提问作者paulhr
相关产品推荐
相关产品推荐

