使用Java的URL/HttpURLConnection进行远程调用(POST请求)
利用Java的HttpURLConnection进行远程url请求(调用远程接口)
测试类:请求类型为json,以post方式请求,利用OutputStream写入数据
实体类:
public class User implements Serializable { private String name;
private String password; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
}
}
-------
@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot02ApplicationTests { @Autowired
private UserService userService; @Test
public void contextLoads(){
User user = new User();
user.setName("lisi");
user.setPassword("123");
//调用远程接口方法,获取返回结果类型
String result = userService.idendifyUser(user);
System.out.println(result);
}
}
---------
@Service
public class UserServiceImpl implements UserService { public String idendifyUser(User user){
//将对象转换为json,然后发送;
String json = JSONObject.fromObject(user).toString();
String result = null;
try {
result = UserRemoteVerify.doPost(json);
}catch (Exception e){
e.printStackTrace();
}
return result;
}
}
---------
/**
* 调用远程接口,验证用户数据是否合理
*/
public class UserRemoteVerify { //post请求
public static String doPost(String json) throws Exception{
//创建URL对象,设置请求url
URL url = new URL("http://127.0.0.1:8089/user/service");
//调用URL对象的openConnection( )来获取HttpURLConnection对象实例
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//请求方法为POST
conn.setRequestMethod("POST");
//设置连接超时为5秒
conn.setConnectTimeout(5000);
//允许输入输出
conn.setDoInput(true);
conn.setDoOutput(true);
//不能缓存
conn.setUseCaches(false);
//至少要设置的两个请求头
//设置头部信息
conn.setRequestProperty("headerdata", "ceshiyongde");
//一定要设置 Content-Type 要不然服务端接收不到参数
conn.setRequestProperty("Content-Type", "application/Json; charset=UTF-8");
//输出流包含要发送的数据,要注意数据格式编码
OutputStream op=conn.getOutputStream();
op.write(json.getBytes());
//服务器返回东西了,先对响应码判断
String result = null;
if (conn.getResponseCode() == 200) {
//用getInputStream()方法获得服务器返回的输入流
InputStream in = conn.getInputStream();
//流转换为二进制数组,read()是转换方法
byte[] data = new byte[1024];
in.read(data);
result= new String(data, "UTF-8");
in.close();
return result;
}
return result;
} }
-------------
远程服务端代码
@Controller
public class UserController { /**
* 使用json接收客户端请求,返回json数据;url="http://127.0.0.1:8089/user/service"
*/
@PostMapping("user/service")
@ResponseBody
public String dealUserForJson(HttpServletRequest request)throws Exception{
//调用处理服务,对远程数据进行校验,返回对应的结果
String result = UserRemoteHandle.verifyUser(request);
return result;
}
}
--------
/**
* 处理远程数据验证
*/
public class UserRemoteHandle { /**
* 验证远程用户信息,若正确,则返回成功;否则返回失败
*/
public static String verifyUser(HttpServletRequest request) throws Exception{
//根据HttpServletRequest获取输入流对象
InputStream inputStream = null;
try {
inputStream = request.getInputStream();
//使用byte[]数组存储接收到的数据
byte[] bytes = new byte[1024];
//从输入流中将数据读取到bytes中
inputStream.read(bytes);
//将bytes转换为字符串类型
String json = new String(bytes);
//int i = 1/0; //服务端异常测试
if(StringUtils.isNotBlank(json)){
JSONObject jsonObject = JSONObject.fromObject(json);
//将json类型转换为对象
User user = (User)JSONObject.toBean(jsonObject,User.class);
//判断用户名和密码是否正确;假设用户名:lisi,密码:123;
if(user.getName().equals("lisi") && user.getPassword().equals("123")){
return "success";
}
}
}catch (Exception e){
e.printStackTrace();
return "服务端出现异常"; }finally { //释放资源
if(inputStream != null){
inputStream.close();
}
}
//数据不符,返回错误信息
return "message is error";
} }
使用Java的URL/HttpURLConnection进行远程调用(POST请求)的更多相关文章
- RestTemplate远程调用POST请求:HTTP 415 Unsupported Media Type
这是本项目的接口 称为client @POST @Path("/{urlcode}") @Consumes(MediaTypes.JSON_UTF_8) @Produces(Med ...
- java通过url调用远程接口返回json数据
java通过url调用远程接口返回json数据,有用户名和密码验证, 转自 https://blog.csdn.net/wanglong1990421/article/details/78815856 ...
- java调用Http请求 -HttpURLConnection学习
最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,post与get的不同之处在于post的参数不是放在URL字串里面,而是放 ...
- 《Spring技术内幕》学习笔记17——Spring HTTP调用器实现远程调用
1.Spring中,HTTPInvoker(HTTP调用器)是通过基于HTTP协议的分布式远程调用解决方案,和java RMI一样,HTTP调用器也需要使用java的对象序列化机制完成客户端和服务器端 ...
- Hessian怎样实现远程调用
1.Spring中除了提供HTTP调用器方式的远程调用,还对第三方的远程调用实现提供了支持,其中提供了对Hessian的支持. Hessian是由Caocho公司发布的一个轻量级的二进制协议远程调用实 ...
- JSON-RPC轻量级远程调用协议介绍及使用
这个项目能够帮助开发人员利用Java编程语言轻松实现JSON-RPC远程调用.jsonrpc4j使用Jackson类库实现Java对象与JSON对象之间的相互转换.jsonrpc4j包含一个JSON- ...
- Atitit.分布式远程调用 rpc rmi CORBA的关系
Atitit.分布式远程调用 rpc rmi CORBA的关系 1. 远程调用(包括rpc,rmi,rest)1 2. 分布式调用大体上就分为两类,RPC式的,REST式的1 3. RPC(远程 ...
- Spring的远程调用
Spring远程支持是由普通(Spring)POJO实现的,这使得开发具有远程访问功能的服务变得相当容易 四种远程调用技术: ◆ 远程方法调用(RMI) ◆ Caucho的Hessian和Burlap ...
- dubbo集成zookeeper rpc远程调用
注:下面使用dubbo依赖的是zookeeper注册中心,这里没有详细的介绍.在配置之前,请自行准备好zookeeper环境. 后续如果写zookeeper的配置会补放链接 添加Gradle依赖 co ...
随机推荐
- 全志A33开发板的安卓控制LED-2-JNI基础
虽然您可以完全使用Java编写应用程序,但有些情况下Java本身并不能满足您的应用程序的需求.当应用程序不能完全用Java编写时,程序员使用JNI编写Java本机方法来处理这些情况. 以下示例说明何时 ...
- SpeedReader for Mac(快速阅读器)v1.6免费版
SpeedReader for Mac是一款运行在Mac平台上的阅读软件,通过这款软件就可以自行调整阅读速度.通过SpeedReader Mac版用户可以将想要阅读的内容拖入到软件中,调整速度和字体, ...
- 弄懂Kafka的消息流转过程
原文地址:https://www.cnblogs.com/chanshuyi/p/quick_start_of_kafka.html 大家都知道 Kafka 是一个非常牛逼的消息队列框架,阿里的 Ro ...
- Cent os6.5 安装python3.2
1.CentOS6.5 安装Python 的依赖包 yum groupinstall "Development tools" yum install zlib-devel bzip ...
- 1.2.7 Excel表格打印技巧
1.打印居中显示 把打印的内容放在纸张中间,居中对齐. 方法: ①点击[页面布局]选项卡: ②找到[页面设置]群组点击右下角显示更多: ③在页边距对话框中选择[页边距]: ④勾选[居中方式]中的[水平 ...
- Teamviewer远程控制
设置无人值守的固定密码,不使用随机码进行远程控制访问 设置好密码之后,以后只要通过Teamviewer生成的固定ID,再加上你设置的密码就可以随时进行远程访问了,而不需要使用生成的随机码.
- 【转】META标签指南:哪些meta标签该用哪些不该用?
以下内容来源:http://lusongsong.com/reed/8766.html META标签是网页代码中HEAD区的一个关键标签,其提供的信息虽然用户不可见,但却是文档的最基本的元信息.说起m ...
- Vue.js中ref ($refs)用法举例总结
原文地址:http://www.cnblogs.com/xueweijie/p/6907676.html <div id="app"> <input type=& ...
- 图解python中赋值、浅拷贝、深拷贝的区别
Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果.下面本文就通过简单的例子介绍一下这些概念之间的差别. 对象赋值 直接看一段代码: will = ...
- OPC客户端开发问题总结
环境准备 采用MatrikonOPC做模拟服务器,注册 OPCDAAuto.dll组件 引用 Interop.OPCAutomation.dll组件.开始开发. 1..new OPCServer()- ...