利用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】问题汇总

    1.pip降级 python -m pip install pip==9.0.3 2. Flask利用pymysql出现Warning:1366的解决办法 错误提示:(1366, "Inco ...

  2. system.net.httpclient 4.0 vs2015

    // 加入Cookie foreach (string a in cookieStr.Split(';')) { cookieContainer.Add(new Cookie(a.Split('=') ...

  3. C语言练习题库----数组

    有如下语句 int a[10] = {1,2,3,4,5,6,7,8,9,10};int *p = a;则数值为9的表达式是______ *p+9                       b)   ...

  4. cellmap 基站查询 for android

    cellmap for android 3.6.8.8.1.8 更新日期:2019年4月28日 特别声明:本软件不能进行手机定位,不能对手机号码定位,谨防被骗. 安装说明:请卸载旧版本后,重新下载安装 ...

  5. 18.24 Ubuntu修改静态IP

    1.查询系统当前的ip地址配置信息,输入ifconfig命令进行查看 2.打开文件设置静态IP sudo vi /etc/network/interfaces 3.设置address ip.gatew ...

  6. 16.2 在SecureCRT编写C程序不高亮显示

    打开“会话选项”>在类别里找“终端”>选择“仿真”>终端的下拉里选择“Xtrem”>在“ANSI颜色”里打钩,在“使用颜色方案”打钩

  7. html中radio单选和文本框限制只能输入数字的解决方案

    一.当html中存在多个radio单选按钮时将所有的单选按钮name属性设置为一样,就可实现每次只选中一个的效果. 二.限制文本框只能输入数字,代码如下: $(function(){ $(" ...

  8. css3动画的简单学习

    transform常用的属性(2D变化): translate(x,y) 定义 2D 转换. scale(x,y) 定义 2D 缩放转换 rotate(angle) 定义 2D 旋转,在参数中规定角度 ...

  9. js一些常规操作

    1.判断数组为空 var arrayList = [] 方法1. if (arrayList == (null || "" || undifine)) { 为空操作 } 方法2. ...

  10. python中类似三元表达式的写法

    python中没有其它语言中的三元表达式,如: a = x > y ? m : n; python中的类似写法为: a = 1 b = 2 h = "" h = " ...