当前位置: 首页 > news >正文

httpclient 认证方式访问http api/resutful api并获取json结果

最近,因公司线上环境rabbitmq经常发生堆积严重的现象,于是跟运维组讨论,帮助开发个集中监控所有rabbitmq服务器运行情况的应用,需要通过java访问rabbitmq暴露的http api并接收json结果,并将下划线转换为驼峰式,其中包括认证。

httpclient 认证方式访问http api/resutful api并获取json结果的相关代码如下:

package com.medsoft.client.test.action;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonIgnoreProperties(ignoreUnknown = true)  //在jackson 2.x中,设置忽略无法映射的属性通过设置在bean上的注解来实现,在jackson 1.x中,则是通过DeserializationConfig.Feature来设置,2.x已经没有这个接口了
public class Queue {
    private String name;
    private String node;
    
    private long messages;
    @JsonProperty("messages_ready")
    private long messagesReady;
    @JsonProperty("messages_unacknowledged")
    private long messagesUnacknowledged;
    @JsonProperty("message_bytes_ram")
    private long messageBytesRam;
    @JsonProperty("message_bytes")
    private long messageBytes;
    private long memory;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getNode() {
        return node;
    }
    public void setNode(String node) {
        this.node = node;
    }
    
    public long getMessageBytesRam() {
        return messageBytesRam;
    }
    
    public void setMessageBytesRam(long messageBytesRam) {
        this.messageBytesRam = messageBytesRam;
    }
    
    public long getMemory() {
        return memory;
    }
    public void setMemory(long memory) {
        this.memory = memory;
    }
    public long getMessages() {
        return messages;
    }
    public void setMessages(long messages) {
        this.messages = messages;
    }
}

 

	public static void main(String[] args) {
		httpGet("http://localhost:15672/api/queues/%2f/" + "test-api");
	}
	
	public static void httpGet(String url){
		//设置认证信息
		HttpHost targetHost = new HttpHost("localhost", 15672, "http");
		CredentialsProvider credsProvider = new BasicCredentialsProvider();
		credsProvider.setCredentials(AuthScope.ANY, 
		  new UsernamePasswordCredentials("guest", "guest"));

		AuthCache authCache = new BasicAuthCache();
		authCache.put(targetHost, new BasicScheme());

		// Add AuthCache to the execution context
		final HttpClientContext context = HttpClientContext.create();
		context.setCredentialsProvider(credsProvider);
		context.setAuthCache(authCache);
		
		try  
		{  
		    HttpClient client = HttpClientBuilder.create().build();
		    HttpResponse response = client.execute(new HttpGet(url), context);

		    //请求成功  
		    if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)  
		    {  
		        //取得返回的字符串  
		        String strResult = EntityUtils.toString(response.getEntity());  
		        System.out.println(strResult);
		        //Queue queue = JsonUtils.json2Object(strResult, Queue.class);
		        ObjectMapper objectMapper = new ObjectMapper();
		        objectMapper.configure(MapperFeature.USE_ANNOTATIONS, true);  --默认情况下,注解不会启用,需要显示启用
		        objectMapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector());  --默认情况下没有注解解析器,需要设置
		        Queue queue = objectMapper.readValue(strResult, Queue.class);
		        System.out.println(JsonUtils.toJson(queue));
		    }  
		    else  
		    {  
		       System.out.print(response.toString());
		    }  
		}  
		catch (ParseException | IOException e1)  
		{  
		    e1.printStackTrace();
		}
    }

  

相关文章:

  • 2015年Java开发岗位面试题归类
  • 文件包含漏洞总结
  • 使用Xshell登录AWS的EC2云服务器和开启EC2上允许root+密码方式登录
  • 一次意外的ORA-12520
  • Linux配置SSH公钥认证与Jenkins远程登录进行自动发布
  • 日期格式 CST
  • Android重写getResources规避用户调整系统字体大小影响Android屏幕适配
  • Java.io.DataInputStream.readInt()
  • 第八课:通道抠图1(毛绒玩具)
  • Spring框架总结
  • linux命令:w、who、whoami、last、lastb、lastlog、basename、mail、hostname
  • 适用于web开发者和设计者的28款必备chrome浏览器插件
  • Hacker(三)之黑客定位目标---IP
  • DES ECB 模式 JAVA PHP C# 实现 加密 解密 兼容
  • 操作IFRAME及元素
  • 时间复杂度分析经典问题——最大子序列和
  • 【面试系列】之二:关于js原型
  • 【知识碎片】第三方登录弹窗效果
  • canvas 五子棋游戏
  • codis proxy处理流程
  • js面向对象
  • PHP变量
  • PHP面试之三:MySQL数据库
  • sessionStorage和localStorage
  • V4L2视频输入框架概述
  • Vue学习第二天
  • 理清楚Vue的结构
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 无服务器化是企业 IT 架构的未来吗?
  • 一份游戏开发学习路线
  • 一些关于Rust在2019年的思考
  • ​​​​​​​​​​​​​​Γ函数
  • ​linux启动进程的方式
  • #define
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (五)Python 垃圾回收机制
  • (转)大道至简,职场上做人做事做管理
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .Net Memory Profiler的使用举例
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .net refrector
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET 中 GetProcess 相关方法的性能
  • .NET处理HTTP请求
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET面试题(二)
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .net与java建立WebService再互相调用
  • /bin/bash^M: bad interpreter: No such file or directory
  • @Bean, @Component, @Configuration简析
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节