利用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请求)的更多相关文章

  1. RestTemplate远程调用POST请求:HTTP 415 Unsupported Media Type

    这是本项目的接口 称为client @POST @Path("/{urlcode}") @Consumes(MediaTypes.JSON_UTF_8) @Produces(Med ...

  2. java通过url调用远程接口返回json数据

    java通过url调用远程接口返回json数据,有用户名和密码验证, 转自 https://blog.csdn.net/wanglong1990421/article/details/78815856 ...

  3. java调用Http请求 -HttpURLConnection学习

    最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,post与get的不同之处在于post的参数不是放在URL字串里面,而是放 ...

  4. 《Spring技术内幕》学习笔记17——Spring HTTP调用器实现远程调用

    1.Spring中,HTTPInvoker(HTTP调用器)是通过基于HTTP协议的分布式远程调用解决方案,和java RMI一样,HTTP调用器也需要使用java的对象序列化机制完成客户端和服务器端 ...

  5. Hessian怎样实现远程调用

    1.Spring中除了提供HTTP调用器方式的远程调用,还对第三方的远程调用实现提供了支持,其中提供了对Hessian的支持. Hessian是由Caocho公司发布的一个轻量级的二进制协议远程调用实 ...

  6. JSON-RPC轻量级远程调用协议介绍及使用

    这个项目能够帮助开发人员利用Java编程语言轻松实现JSON-RPC远程调用.jsonrpc4j使用Jackson类库实现Java对象与JSON对象之间的相互转换.jsonrpc4j包含一个JSON- ...

  7. Atitit.分布式远程调用  rpc  rmi  CORBA的关系

    Atitit.分布式远程调用  rpc  rmi  CORBA的关系 1. 远程调用(包括rpc,rmi,rest)1 2. 分布式调用大体上就分为两类,RPC式的,REST式的1 3. RPC(远程 ...

  8. Spring的远程调用

    Spring远程支持是由普通(Spring)POJO实现的,这使得开发具有远程访问功能的服务变得相当容易 四种远程调用技术: ◆ 远程方法调用(RMI) ◆ Caucho的Hessian和Burlap ...

  9. dubbo集成zookeeper rpc远程调用

    注:下面使用dubbo依赖的是zookeeper注册中心,这里没有详细的介绍.在配置之前,请自行准备好zookeeper环境. 后续如果写zookeeper的配置会补放链接 添加Gradle依赖 co ...

随机推荐

  1. springAop整合自定义注解做方法日志配置(源码在附件)

    package com.aop.log.anno; import java.lang.annotation.ElementType; import java.lang.annotation.Reten ...

  2. crontab(暂存待完善)

    crontab  -e 编辑 ,(使用默认编辑器) -l  列出 第1列分钟1-59 第2列小时1-23(0表示子夜) 第3列日1-31 第4列月1-12 第5列星期0-6(0表示星期天) 第6列要运 ...

  3. Viewport模版

    通用模版 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...

  4. Day 20 常用模块(三)

    一.加密模块 1.加密方式: 1.有解密的加密方式 2.无解密的加密方式,碰撞检查 1.不同数据加密后的结果一定不一致 2.相同数据的加密结果一定是一致 2.hashlib模块 1.基本使用 ciph ...

  5. 为什么选择Go语言 GO语言都能做什么产品

    Go语言,又称Golang,是Google开发的一款静态强类型.编译型.并发型,并具有垃圾回收机制的编程语言,它的运行速度非常之快,同时还有如下特性:具有一流的标准库.无继承关系.支持多核:同时它还有 ...

  6. 图像三维灰度分布图——matlab

    p=imread('C:\Users\wangd\Documents\MATLAB\1.jpg'); g=rgb2gray(p); % 转为灰阶图 gg=double(g); % 转为数值矩阵 gg= ...

  7. 工控随笔_19_西门子_WinCC的VBS脚本_08_常量和流程控制_01

    在编程的过程中,有时候我们会使用一些固定的值,例如圆周率,或者某个人的生日,或者家庭住址等等, 这些信息对于一个对象来说一旦确定就不会改变,因此我们在编程的时候也不希望这些信息会改变,在VBS里面 也 ...

  8. 树莓派中学TensorFlow

    树莓派中默认的虚拟环境为python 2.x,需要用下面的-p参数修改为python3环境.电信wifi和公司网络直接用pip3 install TensorFlow都不好使,用联通手机热点可以安装. ...

  9. C# 6.0:Exception Filter——带条件的异常处理

    C#6.0 对异常处理有两处改进,一个是在上一篇文章中我们讨论了的在catch和finally中使用await,另一个是exception filter.在catch和finally中使用await是 ...

  10. note 7 递归函数

    递归:程序调用自身 形式:在函数定义有直接或间接调用自身 阶乘:N!=123...N def p(n): x = 1 i = 1 while i <= n: x = x * i i = i + ...