利用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. python 日常 摘要

    正负无穷float(‘inf’): Python中可以用表示正负无穷:float("inf"), float("-inf") 不等式: 当涉及 > 和 & ...

  2. npm -D -S 的区别

    npm -D -S 的区别   我们在使用npm install 安装模块或插件的时候,有两种命令把他们写入到 package.json 文件里面去,比如: --save-dev --save 在 p ...

  3. 1-Two Sum @LeetCode

    1-Two Sum 题目 思路 题目中得到的信息有: 都是整数,并且可正可负,也可一个值包含多个: 只有一个正确的结果. 方法一: 最直接的思路就是两重循环遍历,时间复杂度是O(n^2),这样肯定不行 ...

  4. python 常用库

    Numpy, Pandas 数据处理 Scipy  科学计算 Matplotlib 可视化 Scikit Learn  机器学习 Keras 深度学习模型 jieba 分词 Gensim  主题(包含 ...

  5. dbca建库--linux上使用vnc图形化安装oracle10g版本

    选择创建数据库 配不配置em,自己决定,我们选择配置 配置下面账户密码,在项目中,下面账户肯定是不相同的,我们这里输入相同的,密码为oracle10g 选择文件系统存放(asm和字符设备暂时不能存放) ...

  6. 密码疑云 (3)——详解RSA的加密与解密

    上一篇文章介绍了RSA涉及的数学知识,本章将应用这些知识详解RSA的加密与解密. RSA算法的密钥生成过程 密钥的生成是RSA算法的核心,它的密钥对生成过程如下: 1. 选择两个不相等的大素数p和q, ...

  7. devC++代码格式化对齐的快捷键

    devC++代码格式化对齐的快捷键是ctrl + shift + a ctrl + 左右键可以使光标移动一个单词的距离 shirt + 左右键可以选中光标左右的一个字符

  8. Flink神秘工具lib

    Flink里面有一个神坑,叫做FI坑.其实只是使用Fi的时候被暴露出来.但是,杀不死你的,终将使你更加强大. Flink集群有一个lib文件件,里面比较happy,可以放各种jar:这样,client ...

  9. vs2015 无法连接到已配置的开发web服务器

    问题一:vs2015 无法连接到已配置的开发web服务器 最靠谱方法如下:(和防火墙开启无关联, 注册表增加什么键值无关联 , 缺失asp.net core.Dll文件无关联 ) 分析,因为前提是你的 ...

  10. (转)初学Git及简单搭建git服务器和客户端

    终于搞定,mac自己作为git服务器,mac也是客户端,如何免登 从另外一个linux服务器的上传公钥得到提示 ssh-copy-id -i ~/.ssh/id_rsa.pub git@192.168 ...