【网站连通性检测】java项目telnet、curl命令的使用

telnet、curl命令的使用

1.封装工具类

复制代码
package com.redxun.system.util;

import org.apache.commons.net.telnet.TelnetClient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

/**
 * @author huangquanguang
 * @date 2023/3/22 8:57
 * @description telnet、curl工具类
 */
public class TelnetCurlUtil {
    private static TelnetClient telnetClient = null;
    private static InputStream is = null;
    private static OutputStream os = null;

    /**
     * 连接远程计算机,连接完成后,获取读取流与发送流
     *
     * @param ip   远程计算机IP地址
     * @param port 远程计算机端口
     */
    public static void connection(String ip, int port) {
        try {
            telnetClient = new TelnetClient();
            telnetClient.connect(ip, port);
            is = telnetClient.getInputStream();
            os = telnetClient.getOutputStream();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取远程计算机返回的信息
     */
    public String readTelnetMsg() {
        try {
            int len = 0;
            byte[] b = new byte[1024];
            do {
                len = is.read(b);
                if (len >= 0)
                    return new String(b, 0, len);
            }
            while (len >= 0);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 向远端计算机发送指令消息
     *
     * @param msg 需要传送的指令
     **/
    public void sendTelnetMsg(String msg) {
        byte[] b = msg.getBytes();
        try {
            os.write(b, 0, b.length);
            os.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 查找远端计算机返回的指令中是否包含想要指令
     * 一直查找,直到包含,返回true
     */
    public boolean findStr(String str) {
        for (; ; ) {
            String msg = readTelnetMsg();
            if (msg == null) return false;
            if (msg.indexOf(str) != -1)
                return true;
        }
    }

    /**
     * 关闭连接,关闭IO
     */
    public void close() {
        try {
            is.close();
            os.close();
            telnetClient.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * java 调用 Curl的方法
     *
     * @param cmds
     * @return
     */
    public static String execCurl(String[] cmds) {
        ProcessBuilder process = new ProcessBuilder(cmds);
        Process p;
        try {
            p = process.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
            StringBuilder builder = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                builder.append(line);
                builder.append(System.getProperty("line.separator"));
            }
            return builder.toString();

        } catch (IOException e) {
            System.out.print("获取线程异常" + e);
        }
        return null;
    }

    /**
     * curl方法
     * url:请求地址
     * methodType:请求类型
     * 只返回状态码
     */
    public static String execCurl(String url,String methodType){
        String[] cmds = {"curl", "-H", "Content-Type:application/json","-sL","-w", "%{http_code}","-o","/dev/null",
                "-X",""+ methodType +"" ,"-k", ""+url+""};
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<cmds.length;i++){
            sb.append(cmds[i]+" ");
        }
        System.out.println(sb);//这个是测试中调试输出你的发送命令航
        String responseMsg=execCurl(cmds);
        System.out.println(responseMsg);
        return responseMsg;
    }

    /**
     * curl get示例
     */
//    public static void getToken(){
//        String url = "https://www.baidu.com/";  //这个为url连接,随便写了个连接,一般接口会先调用接口获取token,然后拼接token,post发送请求
//        String[] cmds = {"curl","X","GET" ,"-k", "-i",""+url+""};
//        StringBuffer sb = new StringBuffer();
//        for(int i=0;i<cmds.length;i++){
//            sb.append(cmds[i]+" ");
//        }
//        System.out.println(sb);
//        String responseMsg=execCurl(cmds);
//        System.out.println(responseMsg);
//    }

    /**
     * curl post示例
     */
//    public static void getMsg(){
//        String jsonStr= "{'content':'testtest','creator':'creator''name':'lili'}";        //这里为发送的json串
//        String url = "http://192.168.2.120:7200/restApi/form/getData";   //这里为连接发送的url
//        String accessToken = "123456";   //这一步这个token为上面get获取到的,有些简单的接口不需要获取这个
//        String[] cmds = {"curl","-H","access-token:{{"+accessToken+"}}" ,
//                "-H", "Content-Type:application/json",
//                "-X","POST" ,"-k", "-i",""+url+"",
//                "-d",""+jsonStr+""};   //超级注意:这个拼接json串的时候不要拼接双引号或者单引号,这个是踩坑提示,因为这个改了好久
//        StringBuffer sb = new StringBuffer();
//        for(int i=0;i<cmds.length;i++){
//            sb.append(cmds[i]+" ");
//        }
//        System.out.println(sb);//这个是测试中调试输出你的发送命令航
//        System.out.println(execCurl(cmds));
//    }


    public static void main(String[] args) {
        execCurl("http://192.168.2.120:7200/form/core/formCustomQuery/queryForJson_ywgxtz","POST");
        execCurl("http://192.168.2.120:7200/restApi/form/getData","GET");
        execCurl("http://192.168.2.120:7200/restApi/form/queryForJson_project_can_review","POST");
    }
}

2.curl参数解释

复制代码
"-H", "Content-Type:application/json", 设置请求头类型

"-sL","-w", "%{http_code}","-o","/dev/null", 只返回状态码

"-X",""+ methodType +"" , 指定请求类型,POST、GET

"-k" 发送https请求加上这个参数,否则会有证书报错

参考文档:https://blog.csdn.net/heihaozi/article/details/122609296

3.检测接口连通情况

复制代码
1.获取所有开启服务发现的接口
2.telnet这些接口的项目路径
3.telnet通的话,curl接口地址,返回非空且不是500以上则修改连通状态为1,返回空且为500以上修改为0
4.telnet不通的直接修改连通状态为0,发送预警日志等
相关推荐
紧跟先前的步伐1 小时前
Go AI Agent 实战 03|Token、上下文窗口与模型调用成本
java·人工智能·golang
const_qiu2 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
Wang's Blog2 小时前
Java 项目实战: 交友项目 - 个人资料管理的更新接口实现与坑
java·开发语言·交友
Promising_GEO2 小时前
GEE实战02期:从卫星波段开始:利用 Sentinel-2 自己计算 NDVI
java·sentinel·遥感·空间分析
大文说跨境2 小时前
亚马逊多账号管理浏览器怎么选?云登/紫鸟/AdsPower 对比
java·前端·自动化
CoderYanger2 小时前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc
顽疲2 小时前
java springboot vue 养老系统源码详解:请假 care_leave 销假与床位停费日扣实践
java·vue.js·spring boot
XIAEE3 小时前
一个即时通讯项目是怎么长出来的:(Spring Boot 3 + Vue 3 微前端 + 悟空 IM + LiveKit)
java·spring
n87653 小时前
Playwright Java WEB UI 自动化实现框架与逻辑
java·前端·ui
Java_AI工程师3 小时前
Spring4 / SpringBoot1.x 老项目想接入 AI?不用升级框架!3 套无痛落地方案
java·人工智能·spring boot