java外部接口图解_java代码实现访问网络外部接口并获取数据的工具类详解

java代码实现访问网络外部接口并获取数据的工具类

工具类代码,可以直接copy使用

package com.yqzj.util;

import org.apache.log4j.LogManager;

import org.apache.log4j.Logger;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.URL;

import java.net.URLConnection;

public class HttpRequestUtil {

/** 日志 */

private static Logger log = LogManager.getLogger(HttpRequestUtil.class);

/**

* 向指定URL发送GET方法的请求

* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。

* @param url

* 发送请求的URL

* @return URL 所代表远程资源的响应结果

*/

public static String sendGet(String url) {

StringBuilder result = new StringBuilder();

BufferedReader in = null;

try {

URL realUrl = new URL(url);

// 打开和URL之间的连接

URLConnection connection = realUrl.openConnection();

// 设置通用的请求属性

connection.setRequestProperty("accept", "*/*");

connection.setRequestProperty("connection", "Keep-Alive");

connection.setRequestProperty("user-agent",

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

connection.setRequestProperty("Accept-Charset", "UTF-8");

connection.setRequestProperty("contentType", "UTF-8");

// 建立实际的连接

connection.connect();

// 遍历所有的响应头字段

// for (String key : map.keySet()) {

// System.out.println(key + "--->" + map.get(key));

// }

// 定义 BufferedReader输入流来读取URL的响应

in = new BufferedReader(new InputStreamReader(

connection.getInputStream(), "utf-8"));

String line;

while ((line = in.readLine()) != null) {

result.append(line);

}

} catch (Exception e) {

//System.out.println("发送GET请求出现异常!" + e);

result = new StringBuilder("{\"resCode\":\"1\",\"errCode\":\"1001\",\"resData\":\"\"}");

e.printStackTrace();

log.error("远程服务未开启", e);

}

// 使用finally块来关闭输入流

finally {

try {

if (in != null) {

in.close();

}

} catch (Exception e2) {

e2.printStackTrace();

}

}

return result.toString();

}

/**

* 向指定 URL 发送POST方法的请求

*

* @param url

* 发送请求的 URL

* @param param

* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。

* @return 所代表远程资源的响应结果

*/

public static String sendPost(String url, String param) {

PrintWriter out = null;

BufferedReader in = null;

StringBuilder result = new StringBuilder();

try {

URL realUrl = new URL(url);

// 打开和URL之间的连接

URLConnection conn = realUrl.openConnection();

// 设置通用的请求属性

conn.setRequestProperty("accept", "*/*");

conn.setRequestProperty("connection", "Keep-Alive");

conn.setRequestProperty("user-agent",

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

conn.setRequestProperty("Accept-Charset", "UTF-8");

conn.setRequestProperty("contentType", "UTF-8");

// 发送POST请求必须设置如下两行

conn.setDoOutput(true);

conn.setDoInput(true);

// 获取URLConnection对象对应的输出流

out = new PrintWriter(conn.getOutputStream());

// 发送请求参数

out.print(param);

// flush输出流的缓冲

out.flush();

// 定义BufferedReader输入流来读取URL的响应

in = new BufferedReader(

new InputStreamReader(conn.getInputStream()));

String line;

while ((line = in.readLine()) != null) {

result.append(line);

}

} catch (Exception e) {

//System.out.println("发送 POST 请求出现异常!" + e);

result = new StringBuilder("{\"resCode\":\"1\",\"errCode\":\"1001\",\"resData\":\"\"}");

e.printStackTrace();

log.error("远程服务未开启", e);

}

// 使用finally块来关闭输出流、输入流

finally {

try {

if (out != null) {

out.close();

}

if (in != null) {

in.close();

}

} catch (IOException ex) {

ex.printStackTrace();

}

}

return result.toString();

}

/**

* 向指定 URL 发送POST方法的请求

*

* @param url

* 发送请求的 URL

* @param param

* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。

* @return 所代表远程资源的响应结果

*/

public static String sendFile(String url, String param,

BufferedInputStream bInputStream) {

BufferedOutputStream out = null;

BufferedReader in = null;

StringBuilder result = new StringBuilder();

try {

URL realUrl = new URL(url);

// 打开和URL之间的连接

URLConnection conn = realUrl.openConnection();

// 设置通用的请求属性

conn.setRequestProperty("accept", "*/*");

conn.setRequestProperty("connection", "Keep-Alive");

conn.setRequestProperty("user-agent",

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

conn.setRequestProperty("Accept-Charset", "UTF-8");

conn.setRequestProperty("contentType", "multipart/form-data");

// 发送POST请求必须设置如下两行

conn.setDoOutput(true);

conn.setDoInput(true);

// 发送参数

StringBuffer sb = new StringBuffer();

sb = sb.append(param);

byte[] paramData = sb.toString().getBytes();

//System.out.println(paramData.length);

out = new BufferedOutputStream(conn.getOutputStream());

out.write(paramData);

if (bInputStream != null) {

byte[] data = new byte[2048];

while (bInputStream.read(data) != -1) {

out.write(data);

}

}

out.flush();

// flush输出流的缓冲

// 定义BufferedReader输入流来读取URL的响应

in = new BufferedReader(

new InputStreamReader(conn.getInputStream()));

String line;

while ((line = in.readLine()) != null) {

result.append(line);

}

} catch (Exception e) {

//System.out.println("发送 POST 请求出现异常!" + e);

result = new StringBuilder("{\"resCode\":\"1\",\"errCode\":\"1001\",\"resData\":\"\"}");

e.printStackTrace();

}

// 使用finally块来关闭输出流、输入流

finally {

try {

if (out != null) {

out.close();

}

if (in != null) {

in.close();

}

if (bInputStream != null) {

bInputStream.close();

}

} catch (IOException ex) {

ex.printStackTrace();

}

}

return result.toString();

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「技术人生」第2篇:学会分析事物的本质

简介: 对于研发同学而言,探究事物的本质,是最基础最核心最先需要被掌握的技能,没有之一。 作者:贺科学 技术一号位不是岗位,更多的是技术人员在公司中做事的一种心态,这个系列的文章适合所有想…

低代码能做什么?这家服务商用钉钉宜搭打造了智慧医院管理应用

简介: 谷瞰在医疗信息化领域积累的专业解决方案,如果能加持宜搭轻量级、高度灵活、极高效的开发支撑能力,可能是找到智慧医院快速落地的最优解。 “疫情作为催化剂,加速了医疗信息化的发展”,浙江谷瞰信息有限公司董事…

python socket能做什么_[python]初探socket

1.什么是socket?Socket中文译作:套接字,但是大家一般约定俗称的都用:socket。我想在解释socket是什么之前,先说它是用来干嘛的:socket是来建立‘通信’的基础,建立连接,传输数据——…

mysql sysdate本周_oracle 、mysql 取昨天 前天 本周 数据

查询今天数据:SELECT COUNT(1) FROM T_CALL_RECORDS WHERE TO_CHAR(T_RKSJ,‘YYYY-MM-DD‘)TO_CHAR(SYSDATE,‘YYYY-MM-DD‘)查询昨天数据:SELECT COUNT(1) FROM T_CALL_RECORDS WHERE TO_CHAR(T_RKSJ,‘YYYY-MM-DD‘)TO_CHAR(SYSDATE-1,‘YYYY-MM-DD‘)…

Fortinet:行走在网络和安全融合领域的最前列

近日,Fortinet 核心操作系统的演进暨 Fortinet SD-WAN 在2021年度Gartner 广域网边缘基础设施魔力象限的位置及其关键能力与场景宣讲成功举办。会议指出,在数字化转型过程中,攻击平面成倍增长、边缘无处不在,没有“安全”的“网络…

如何通过Graph+AI的方法打造高精度风控模型

简介: 阿里云图智能平台在金融行业已经帮助银行、保险等领域客户构建了金融风控、商品推荐、循环担保检测、异常指标监控、违规团伙挖掘等场景,通过穿透行业应用场景,帮助客户基于多维数据做出精准决策。 >>发布会传送门:h…

python虚拟环境安装的包在哪_如何使用virtualenv引导脚本在虚拟环境中安装python包?...

我想创建一个引导脚本来设置本地环境并在其中安装所有要求.我一直在尝试使用virtualenv.create_bootstrap_script,如docs所述.import virtualenvs virtualenv.create_bootstrap_script(import subprocessdef after_install(options, home_dir):subprocess.call([pip, install,…

实操指南 | Resource Queue如何实现对AnalyticDB PostgreSQL的资源管理?

简介: 作者:阿里云数据库OLAP产品部 - 子华 一 背景 AnalyticDB PostgreSQL版(简称ADB PG)是阿里云数据库团队基于PostgreSQL内核(简称PG)打造的一款云原生数据仓库产品。在数据实时交互式分析、HTAP、ETL…

python均分纸牌_Python实现比较扑克牌大小程序代码示例

是Udacity课程的第一个项目。先从宏观把握一下思路,目的是做一个比较德州扑克大小的问题首先,先抽象出一个处理的函数,它根据返回值的大小给出结果。之后我们在定义如何比较两个或者多个手牌的大小,为方便比较大小,我们…

底层基础软件崛起,达梦数据库的选择与收获

作者 | 宋慧 出品 | CSDN 作为基础软件三驾马车之一,数据库一直是 IT 系统的核心。中国 IT 应用发展迅速,创新的应用场景为操作系统、数据库这样的底层基础软件提供了新的发展机会。基础数据成为“十四五”的重点关注方向,中国数据库正在快…

Apache Flink在 bilibili 的多元化探索与实践

简介: bilibili 万亿级传输分发架构的落地,以及 AI 领域如何基于 Flink 打造一套完善的预处理实时 Pipeline。 本文由 bilibili 大数据实时平台负责人郑志升分享,本次分享核心讲解万亿级传输分发架构的落地,以及 AI 领域如何基于 …

【开通指南】 实时计算 Flink 全托管版本

简介: 【开通指南】实时计算 Flink 全托管版本 1、试用的实时计算 Flink 版产品是后付费还是预付费?是否有额外费用产生? 预付费,有额外的SLB费用,一天2元封顶。(开通 Flink 全托管产品,需使用…

tomcat启动成功 未加载项目_喜讯!济宁医学院附属医院SPD项目成功启动

济宁医学院附属医院(简称济医附院)始建于1951年,医院拥有79个临床科室,9个重症监护病区,开放床位3028张,是山东省首家通过JCI认证的大型综合医院,作为山东省区域医疗中心,早在2016年,医院就通过…

java like a_如何在Java中实现类似“ LIKE”运算符的SQL?

我需要Java中的比较器,该比较器的语义与sql"赞"运算符相同。例如:myComparator.like("digital","%ital%");myComparator.like("digital","%gi?a%");myComparator.like("digital","di…

Mendix发布全球低代码报告,中国软件与低代码发展远超全球

调查显示: 1、86%的受访者表示,企业对于开发人员的需求已经达到了白热化的程度。另外,78%的受访企业表示会依靠非技术人员来缓解IT部门的压力。 2、低代码开发用于标准化数据安全、数据建模和可视化、现有工作流程自动化等应用。 3、受访的IT…

Vineyard 加入 CNCF Sandbox,将继续瞄准云原生大数据分析领域

简介: Vineyard 是一个专为云原生环境下大数据分析场景中端到端工作流提供内存数据共享的分布式引擎,我们很高兴宣布 Vineyard 在 2021 年 4 月 27 日被云原生基金会(CNCF)TOC 接受为沙箱(Sandbox)项目。 作…

java 电子编号生成器_业务编号生成器

在我们实际做项目的过程中,时常需要生成一些跟业务相关的一些唯一的业务编号,这些编号又需要一定的规则,一般是每生成一个新的编号是在前一个编号的集成上尾号递增1个单位,下面是我业余时间写的一个编号生成器,直接贴代…

殷浩详解DDD:领域层设计规范

简介: 在一个DDD架构设计中,领域层的设计合理性会直接影响整个架构的代码结构以及应用层、基础设施层的设计。但是领域层设计又是有挑战的任务,特别是在一个业务逻辑相对复杂应用中,每一个业务规则是应该放在Entity、ValueObject …

arcgis怎么用python重新排序_python - 根据排序数据添加新的顺序ID号(ArcGIS) - 堆栈内存溢出...

我需要一行代码,它将根据我为数据规定的顺序发出新的顺序ID。 基本上,在按照我的喜好对数据进行排序后,原始的Object_Id对我来说不再是有意义的顺序。 在我的表中,我创建了一个新字段(短整数)。 在现场计算器的预逻辑脚本框中&…

融资 6 亿元后,端点科技将致力于类SaaS化软件服务

据艾瑞咨询最新发布《2021 中国企业级 SaaS 行业研究报告》显示,在疫情催化下,2020 年 SaaS 市场增速飞快,市场规模达538亿元,同比增长48.7%。 随着数字化转型步伐加快,企业对 SaaS 接受度提升,应用场景从…