-
2021-03-16 20:29:33
public static JSONObject httpInterfaceForJson(String requestUrl, String requestMethod, JSONObject fullJson) { String res = ""; StringBuffer buffer = new StringBuffer(); HttpURLConnection httpUrlConn = null; try { URL url = new URL(requestUrl); httpUrlConn = (HttpURLConnection) url.openConnection(); httpUrlConn.setDoOutput(true); httpUrlConn.setDoInput(true); httpUrlConn.setUseCaches(false); // httpUrlConn.setRequestProperty("Accept", "text/plain"); httpUrlConn.setRequestProperty("Content-Type", "application/json"); httpUrlConn.setRequestMethod(requestMethod); httpUrlConn.getOutputStream().write(fullJson.toString().getBytes("UTF-8")); 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(); res = buffer.toString(); } catch (ConnectException var21) { } catch (Exception var22) { } finally { try { httpUrlConn.disconnect(); } catch (Exception var20) { } } return JSONObject.parseObject(res); }
更多相关内容 -
java远程调用接口的原理和范例
2018-05-21 10:17:27Java 远程处理 Java远程方法调用... 创建一个简单的Java分布式远程方法调用程序可以按以下几个步骤操作, 一、定义远程接口: 在 Java 中,远程对象是实现远程接口的类的实例, 远程接口声明每个要远程调用的方法。在...Java 远程处理
Java远程方法调用(RMI)提供了Java程序语言的远程通讯功能,这种特性使客户机上运行的程序可以调用远程服务器上的对象,使Java编程人员能够在网络环境中分布操作。
创建一个简单的Java分布式远程方法调用程序可以按以下几个步骤操作,
一、定义远程接口:
在 Java 中,远程对象是实现远程接口的类的实例, 远程接口声明每个要远程调用的方法。在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节,客户通过接口句柄发送消息即可。
远程接口具有如下特点:
1) 远程接口必须为public属性。如果不这样,除非客户端与远程接口在同一个包内,否则 当试图装入实现该远程接口的远程对象时,调用会得到错误结果。
2) 远程接口必须扩展接口java.rmi.Remote。
3) 除与应用程序本身特定的例外之外,远程接口中的每个方法都必须在自己的throws从句中 声明java.rmi.RemoteException。(或 RemoteException 的父类)。
4) 作为参数或返回值传递的一个远程对象(不管是直接,还是本地对象中嵌入)必须声明为远 程接口,而不应声明为实施类。
下面是远程接口的定义
[java] view plaincopy
package test;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.math.BigInteger;
public interface Fib extends Remote {
public int getFib(int n) throws RemoteException;
// public BigInteger getFib(BigInteger n) throws RemoteException;
}
二、实现远程接口:
远程对象实现类必须扩展远程对象java.rmi.UnicastRemoteObject类,并实现所定义的远程接口。远程对象的实现类中包含实现每个远程接口所指定的远程方法的代码。这个类也可以含有附加的方法,但客户只能使用远程接口中的方法。因为客户是指向接口的一个句柄,而不是它的哪个类。必须为远程对象定义构造函数,即使只准备定义一个默认构造函数,用它调用基础类构造函数。因为基础类构造函数可能会抛出 java.rmi.RemoteException,所以即使别无它用必须抛出java.rmi.RemoteException例外。
以下是远程对象实现类的声明:
[java] view plaincopy
package test;
import java.math.BigInteger;
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
public class FibImp extends UnicastRemoteObject implements Fib {
public FibImp() throws RemoteException {
super();
}
public int getFib(int n) throws RemoteException {
return n+2;
}
}
三、编写服务器类:
包含 main 方法的类可以是实现类自身,也可以完全是另一个类。下面通过RmiSampleServer 来创建一个远程对象的实例,并通过java.rmi.registry.LocateRegistry类的createRegistry 方法从指定端口号启动注册服务程序,也可以通过执行 rmiregistry 命令启动注册服务程序,注册服务程序的缺省运行端口为 1099。必须将远程对象名字绑定到对远程对象的引用上: Naming.rebind("//localhost:8808/SAMPLE-SERVER" , Server);
以下是服务器类的声明:
[java] view plaincopy
package test;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
public class FibonacciServer {
/**
* @param args
*/
public static void main(String[] args) {
try {
LocateRegistry.createRegistry(8804);
FibImp f = new FibImp();
// 注册到 registry 中
Naming.rebind("//localhost:8804/SAMPLE-SERVER", f);
System.out.println("fib server ready");
} catch (RemoteException re) {
System.out.println("Exception in FibonacciImpl.main: " + re);
} catch (MalformedURLException e) {
System.out.println("MalformedURLException " + e);
}
}
}
四、编写使用远程服务的客户机类:
客户机类的主要功能有两个,一是通过Naming.lookup方法来构造注册服务程序 stub 程序实例,二是调用服务器远程对象上的远程方法。
以下是客户端类的声明:
[java] view plaincopy
package testClient;
import test.Fib;
import java.math.BigInteger;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class FibClient {
/**
* @param args
*/
public static void main(String[] args) {
String url = "//localhost:8804/SAMPLE-SERVER";
try {
Fib calc = (Fib) Naming.lookup(url);
for (int i = 0; i < 10; ++i) {
int f = calc.getFib(i);
System.out.println(f);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
} -
Java远程调用对方接口
2020-04-11 14:46:47在实际的项目开发中,经常需要调用远程接口,那java是如何实现调用远程接口的呢?这里猿君主要介绍java调用远程接口的两种方式: 一、调用远程http接口 通过jdk的网络类Java.net.HttpURLConnection调用第三方http...在实际的项目开发中,经常需要调用远程接口,那java是如何实现调用远程接口的呢?这里猿君主要介绍java调用远程接口的两种方式:
一、调用远程http接口
通过jdk的网络类Java.net.HttpURLConnection调用第三方http接口
/** * @Auther kezf * @Date 2020/4/11 * @param urlStr 目标地址 * @param json 请求参数 * @param charset 编码 * @return */ public static String doPost(String urlStr,String json,String charset) { String result = null; System.out.println("请求参数:"+json); try { //获取目标地址 URL url = new URL(urlStr); //创建连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //设置向HttpURLConnection输出、输入(发送数据、接收数据),当请求为post时必须设置这两个参数 connection.setDoOutput(true); connection.setDoInput(true); //设置请求方式 connection.setRequestMethod("POST"); //设置是否开启缓存,post请求时,缓存必须关掉 connection.setUseCaches(false); //设置连接是否自动处理重定向(setFollowRedirects:所用http连接;setInstanceFollowRedirects:本次连接) connection.setInstanceFollowRedirects(true); //设置提交内容类型 connection.setRequestProperty("Content-Type","application/json"); //开始连接 connection.connect(); //发送请求 DataOutputStream out = new DataOutputStream(connection.getOutputStream()); out.write(json.getBytes(charset)); out.flush(); out.close(); //读取响应 BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), charset)); String lines; StringBuffer sb = new StringBuffer(""); while ((lines = reader.readLine()) != null) { lines = new String(lines.getBytes()); sb.append(lines); } result = sb.toString(); System.out.println("请求返回结果:"+result); reader.close(); // 断开连接 connection.disconnect(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; }
二、调用远程Web Service 接口
使用axis的call方式调用
public String signConfirm(TpgDsfxyxx dsfxyqdxx){ String result=null; try { //创建服务 Service service = new Service(); //创建Call对象 Call call = (Call) service.createCall(); //设置服务所在的地址 call.setTargetEndpointAddress(StringUtil.getGzfconfigValueByName("dsfxy_qd_url")); //设置调用方法名 call.setOperation("SignConfirm"); //添加请求参数 call.addParameter("xyh", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("sqh", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("yzm", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("sfywzl", XMLType.XSD_INTEGER, ParameterMode.IN); call.addParameter("jldxhh", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("jldxhm", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("zjlx", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("zjhm", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("dhhm", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("dz", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("fkryhdm", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("fkrkhh", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("fkrzh", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("fkrmc", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("fkrlx", XMLType.XSD_INTEGER, ParameterMode.IN); call.setReturnType(XMLType.XSD_STRING); System.out.println(dsfxyqdxx.toString()); //调用服务 result = (String) call.invoke(new Object[]{String.valueOf(dsfxyqdxx.getId()), dsfxyqdxx.getSqh(), dsfxyqdxx.getYzm(), dsfxyqdxx.getSfywzl(), dsfxyqdxx.getJldxhh(), dsfxyqdxx.getJldxhm(), dsfxyqdxx.getZjlx(), dsfxyqdxx.getZjhm(), dsfxyqdxx.getDhhm(), dsfxyqdxx.getDz(), dsfxyqdxx.getFkryhdm(), dsfxyqdxx.getFkrkhh(), dsfxyqdxx.getFkrzh(), dsfxyqdxx.getFkrmc(), dsfxyqdxx.getFkrlx()}); } catch (Exception e) { throw new RuntimeException(e); } System.out.println("signConfirm###:" + result); return result; }
三、http接口和web service 接口的区别
常见的API接口有两类:http接口和webservice接口。
- http接口走http协议,通过路径来区分调用方法,请求报文一般是key-value形式的,返回报文一般是json串,常用的是get和post方法来请求。
- webservice接口走的soap协议,通过http传输,请求报文和返回报文都是xml格式的
获取更多学习资料关注公众号“Java极速进阶间”
-
service_java接口远程调用_get、post、带参数远程调用_
2021-09-30 15:37:56用java实现带参数发送post请求,以body方式传参的get请求,以pathValue方式传参的get请求 -
JAVA调用远程接口
2019-12-30 16:11:36JAVA调用远程接口 介绍一下JAVA调用远程接口获取数据。一般业务中主要用到的就是get和post的方式。其他的方式,以后用到了,再补充。 啰嗦一下get和post方式不同点.如果只说使用功能,那么下面几句话就够了,如果要...JAVA调用远程接口
介绍一下JAVA调用远程接口获取数据。一般业务中主要用到的就是get和post的方式。其他的方式,以后用到了,再补充。
啰嗦一下get和post方式不同点.如果只说使用功能,那么下面几句话就够了,如果要深究为什么这样,那么可以参考这篇博客,讲解的清晰易懂:https://www.cnblogs.com/logsharing/p/8448446.html
Get:将参数放在URL后面,全部信息被暴露不安全,参数编码有限制,URL长度有限制。
POST:将请求参数通过BODY传送,安全的,且参数编码和长度无限制。好了,下面是我用GET和POST调用远程接口的两个例子,注释的很清楚。首先使用CloseHttpClient需要引用jar。
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency>
Get方式远程请求调用接口
@Override public String getSecondPBOC(String applicationNumber) { InputStream is = null; String body = null; StringBuilder res = new StringBuilder(); // 实例化CloseableHttpClient CloseableHttpClient client = HttpClients.createDefault(); CloseableHttpResponse response = null; try { // 添加URL和请求参数 URIBuilder ub = new URIBuilder(secondPBOCURL); ub.setParameter("applicationNumber", applicationNumber); // 使用get方法添加URL HttpGet get = new HttpGet(ub.build()); // 设置请求超时时间 RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).build(); get.setConfig(config); //使用http调用远程,获取相应信息 response = client.execute(get); // 获取响应状态码,可根据是否响应正常来判断是否需要进行下一步 int statusCode = response.getStatusLine().getStatusCode(); // 获取响应实体 HttpEntity entity = response.getEntity(); // 读取响应内容 if (entity != null) { is = entity.getContent(); BufferedReader br = new BufferedReader(new InputStreamReader(is, Consts.UTF_8)); while ((body = br.readLine()) != null) { res.append(body); } } } catch (Exception e) { log.error(e.getMessage(), e); } return res.toString(); }
以下是使用POST方法调用远程接口获取信息的,其中我的请求参数是XML报文的,所以前期先使用dom4j生成了一下请求参数。添加依赖。
<dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> </dependency>
POST方式调用远程接口
@Override public String getSecondPBOCReport(String applicationNumber, String idNumber, String idType, String chineseName) { //格式化时间,生成渠道代码 SimpleDateFormat format=new SimpleDateFormat("YYYYmmDDHHMMSSFFFF"); String chnlTxNo=format.format(new Date()); //实例化文档 Document document = DocumentHelper.createDocument(); //添加节点 Element service = document.addElement("request"); Element head = service.addElement("head"); Element body = service.addElement("Proc_Query"); //设置节点内容 head.addElement("Chnl_Tx_No").setText(chnlTxNo); head.addElement("Sys_Code").setText(sysCode); head.addElement("Txn_Code").setText(txnCode); body.addElement("User_Name").setText(Base64Util.decodeBase64(userName)); body.addElement("User_Password").setText(Base64Util.decodeBase64(userPassword)); body.addElement("Application_Number").setText(applicationNumber); body.addElement("Id_Number").setText(idNumber); body.addElement("Id_Type").setText(idType); body.addElement("Chinese_Name").setText(chineseName); body.addElement("Query_reason").setText(queryReason); //生成XML报文 log.info("request="+document.asXML()); InputStream is = null; String responseBody = null; StringBuilder res = new StringBuilder(); //实例化HttpClient CloseableHttpClient client = HttpClients.createDefault(); //使用POST方法 HttpPost post = new HttpPost(reportURL); //设置httpPost的请求头中的MIME类型为xml post.setHeader("Content-Type", "application/xml"); //添加请求body的内容,就是我的请求参数,不再拼接到URL尾部 post.setEntity(new StringEntity(document.asXML(),"utf-8")); CloseableHttpResponse response = null; try { //设置信息超时时间 RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).build(); post.setConfig(config); //调用远程接口,获取返回信息 response = client.execute(post); //获取响应实体 HttpEntity entity = response.getEntity(); //读取响应内容 if (entity != null) { is = entity.getContent(); BufferedReader br = new BufferedReader(new InputStreamReader(is, Consts.UTF_8)); while ((responseBody = br.readLine()) != null) { res.append(responseBody); } } } catch (Exception e) { log.error(e.getMessage(), e); } return res.toString(); }
一般调用远程接口这样就可以了。
可以自己写一个接口来测试调用一下。下面是我用于测试POST方法获取报文的servlet,记下来自己下次测试备用。protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取请求参数 BufferedReader reader1 = new BufferedReader(new InputStreamReader(request.getInputStream())); String str = ""; String reqContent = ""; while ((str = reader1.readLine()) != null) { reqContent += str; } // 读取本地文件,返回文件内容 File file = new File("D:\\text.html"); BufferedReader reader = null; StringBuffer sbf = new StringBuffer(); try { InputStreamReader read = new InputStreamReader(new FileInputStream(file), "UTF-8"); reader = new BufferedReader(read); String tempStr; while ((tempStr = reader.readLine()) != null) { sbf.append(tempStr); } reader.close(); } catch (IOException e) { } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } // 返回post的请求内容 response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Type", "application/text, charset=UTF-8"); PrintWriter out = response.getWriter(); out.print(sbf.toString()); out.flush(); out.close(); }
-
java http远程调用接口下载文件
2020-12-16 13:56:05远程调用http接口下载文件,接口返回流 一、将文件保存本地 public String httpDownload(String httpUrl){ try { URL url = new URL(httpUrl) ; HttpURLConnection urlConnection = (HttpURLConnection) url.... -
Java调用远程接口(传递json数据或传递文件及其它参数)
2020-09-30 12:09:19Java调用远程接口(传递json数据或文件和其它参数)调用接口传递json数据调用接口传递文件及其它参数 调用接口传递json数据 package com.my.test; import com.alibaba.fastjson.JSON; import org.apache.... -
三种方式实现java远程调用(rmi),绝对可用
2012-01-10 16:12:31三种方式实现java远程调用(rmi) 方式一:原始方式 方式二:spring 方式三:jndi 解压,放到myeclipse上可用 -
java 远程调用工具
2018-03-21 14:43:01该工具有效的解决联调webservice服务的难题,同时可以联调restful格式的接口 -
java+hessian 远程调用
2018-01-31 10:05:33java项目中使用hessian框架实现远程调用,该资源内附hessian服务端,hessian客户端和使用说明文档,以供使用参考,轻松教会你hessian远程调用! -
使用java的HttpClient调用远程接口
2018-04-01 00:45:35httpClient比jdk自带的URLConection更加易用和方便,这里介绍一下使用httpClient来调用远程接口。首先导入相关的依赖包:<!-- httpClient --> <dependency> <groupId&... -
Java访问远程接口
2019-06-28 23:54:44Java 应用程序可以直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache ... -
java远程调用soap协议接口
2021-02-12 11:15:12import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.OutputStreamWriter;...public class SoapUtil {/** 远程访问SOAP协议接口** @param url: 服务接口地址"http:... -
JAVA远程接口
2008-04-03 15:44:00JAVA远程接口调用介绍 -
java远程调用方法总结
2017-06-04 19:24:33java远程调用方法总结 前言:项目中使用到RMI、webService等远程调用方法,各方法demo输出,予以小结。 Java RMI (Remote Method Invocation) WebService,如jax-ws axis xfire cfx Httpinvoker Hessian ... -
java调用远程接口并接收返回json串
2019-04-10 19:07:19工具类: ...import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.http.client.methods... -
Java调用CXF WebService接口的两种方式实例
2020-08-26 06:17:32今天小编就为大家分享一篇关于Java调用CXF WebService接口的两种方式实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 -
JAVA利用HttpClient进行HTTPS接口调用的方法
2020-08-29 16:07:59本篇文章主要介绍了JAVA利用HttpClient进行HTTPS接口调用的方法,具有一定的参考价值,有兴趣的可以了解一下 -
亚马逊远程调用接口并方法JSON数据DEMO.rar
2020-08-06 17:40:13远程调用接口并返回JSON数据DEMO, 可用于远程调用亚马逊的端口 并接受处理XML数据格式 转为JSON 可以直接下载使用 传参就能了。 远程调用接口并返回JSON数据DEMO, 可用于远程调用亚马逊的端口 并接受处理XML数据... -
http和WebService 调用接口Java代码demo
2018-09-18 15:05:32http和WebService 调用接口Java代码demo,可配置根据情况自行配置内网访问 -
JAVA如何调用wsdl过程详解
2020-08-25 20:58:35主要介绍了JAVA如何调用wsdl过程详解,文中介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
java远程调用的原理
2019-05-08 08:37:58java远程调用是一个很老的技术了,一提到远程调用或许很多小伙伴都会想到 Java RMI (Remote Method Invocation),这个是jdk自带的功能,但是现实中使用的很少,一般都是自己实现远程调用,如阿里开源的Dubbo框架就是... -
Http请求Restful风格的远程调用工具类
2018-06-30 17:39:22Http请求Restful风格的远程调用,在远程调用的过程中会出现四种请求方式,这个工具把此部分代码给封装了一下。 -
java-rpc远程过程调用
2019-07-03 16:34:06纯java写的rpc远程过程调用列子,不依赖除jdk以外的任何第三方jar,简单,方便理解,代码几百行代码,小白都能看的懂,往架构方向发展的同学可以学习一下 -
java通过url调用远程接口返回数据的几种方法
2020-02-19 15:22:011. 使用HttpClient package ... import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.... -
Java RPC调用示例
2018-02-09 11:25:08使用Java实现简单的RPC调用,解释了接口是如何执行其它服务函数体的。 -
JAVA发送http get/post请求,调用http接口、方法详解
2020-08-26 01:57:50主要介绍了Java发送http get/post请求调用接口/方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 -
java通过url调用远程接口返回json数据
2018-04-19 23:41:00java通过url调用远程接口返回json数据,有用户名和密码验证, 转自 https://blog.csdn.net/wanglong1990421/article/details/78815856 Java请求远程URL 转自 ... -
java后台调用接口,处理跨域问题
2019-08-30 00:28:26前言:在做系统的时候,有些时候系统A的js代码需要调用系统B的接口,这就会产生跨域现象,可以通过后台调用处理跨域 问题,这就有点 “代理” 的意思了。 在这记录一个通用的方法。。。 public String httpPost... -
关于java后端调用接口时中文传参出现乱码的错误[已解决]
2020-11-26 09:43:28我在使用HttpCilentUtil工具类,远程连接接口时,传递参数过去会出现乱码。 1.确认双方的编码格式为UTF-8 2.看看HttpCilentUtil工具类里面是否有这个设值 conn.setRequestProperty("Content-Type","application/x-...
收藏数
183,204
精华内容
73,281