CURL请求工具

自己写了一点请求工具。只实验了两个是对的,其他的没用到,要用的就拿去。借鉴他人的,整改了一下,各位老哥用的话随便拿去,有错的话请给小弟指出来,多谢多谢

import io.ctc.integration.common.CURLConstant;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

/**
 * CURL 命令请求工具
 * @Date 2021/11/22 18:42
 * @Version 1.0
 */

public class CURLUtils {


    /**
     * 1.curl 最简单的命令是 curl URL,以下输入将返回请求地址的内容
     * 例如:
     * curl http://localhost:8080/home/getTest
     * @param url
     * @return
     */
    public static String post(String url){
        String[] cmds = {CURLConstant.CURL,url};
        return execCurl(cmds);
    }

    /**
     * 2.通过-i 参数返回,还返回 HTTP 头,例如:
     * curl -i -G http://localhost:1001/GetTest/getTest
     * @param url
     * @return
     */
    public static String reqData(String url){
        String[] cmds = {
                CURLConstant.CURL,
                url,
                CURLConstant.I,
                CURLConstant.G};
        return execCurl(cmds);
    }


    /**
     * 3.URL 通常用双引号防止转义,比如&符号在命令行中表示后台运行,如果参数是跟在
     * 地址后面的,比如双引号
     * 例如:
     * curl “http://localhost:8080/GetTest/getTest?q=txt&c=1”
     * @param url
     * @param map
     * @return
     */
    public static String reqData(String url, Map<String,String> map){
        StringBuffer sb = new StringBuffer();
        for (Map.Entry<String, String> entry : map.entrySet()) {
            sb.append(entry.getKey()+"="+entry.getValue()+"&");
        }
        String substring = sb.substring(0,sb.length() - 1);
        String str = url+"?"+substring;
        String[] cmds = {
                CURLConstant.CURL,
                str};
        return execCurl(cmds);
    }



    /**
     * 4.通过-H 设直请求的 HTTP 头,比如请求体是 JSON 格式,后面是没有参数的
     * 例如:
     * curl -H "Content-Type:application/json" http://localhost:8080/GetTest/getTest
     * @param url 地址
     * @param headers 请求头
     * @param request 请求方法是post还是get
     * @return
     */
    public static String post(String url, List<String> headers,CURLConstant request){

        List<String> list = new ArrayList<String>(){
            {
                add(CURLConstant.CURL);
                add(CURLConstant.X);
                add(String.valueOf(request));
            }
        };
        headers.stream().forEach(a ->{
            list.add(CURLConstant.H);
            list.add(a);
        });
        list.add(url);

        //list转为数组
        String[] arr = new String[list.size()];

        return execCurl(list.toArray(arr));
    }


    /**
     * 5.通过-d 参数发起 POST 请求,-d 后面是 POST 的内容,
     * 例如:
     * curl http://localhost:1001/GetTest/getTest -d "name=tom&password=123"
     * @param url
     * @param map
     * @return
     */
    public static String post(String url,Map<String,String> map){
        StringBuffer sb = new StringBuffer();
        List<String> list = new ArrayList<String>(){
            {
                add(CURLConstant.CURL);
                add(url);
                add(CURLConstant.D);
            }
        };

        for (Map.Entry<String, String> entry : map.entrySet()) {
            sb.append(entry.getKey()+"="+entry.getValue()+"&");
        }

        String substring = sb.substring(0,sb.length() - 1);
        list.add(substring);

        String[] arr = new String[list.size()];

        return execCurl(list.toArray(arr));
    }


    /**
     * 这个应该是很多人要用的,我们就是用的这个来请求的
     * 例如:
     * curl
     * -X POST "http://localhost:1001/GetTest/getTest"
     * -H "Content-Type:application/json"
     * -d ""dataparams":{ "name":"北京 100 种小吃","type":"food","postDate":"2009-11- 15"}
     * @param url 地址
     * @param headers 请求头
     * @param requestData 请求要发过去的数据
     * @return
     */
    public static String post(String url, List<String> headers, String requestData){

        List<String> headersList = new ArrayList<String>(){
            {
                add(CURLConstant.CURL);
                add(CURLConstant.X);
                add(CURLConstant.POST);
                add(url);
            }
        };
        headers.stream().forEach(a ->{
            headersList.add(CURLConstant.H);
            headersList.add(a);
        });
        headersList.add(CURLConstant.D);
        headersList.add(requestData);

        String[] arr = new String[headersList.size()];

        return execCurl(headersList.toArray(arr));
    }



    /**
     * 公共调用方法
     * @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("error");
            e.printStackTrace();
        }
        return null;
    }
}

public class CURLConstant {

    /**
     * curl头
     */
    public static final String CURL = "curl";

    /**
     * 指定请求方法的命令,例如 -X:post,指定post方法
     */
    public static final String X = "-X";

    /**
     * post方法
     */
    public static final String POST = "POST";

    public static final String I = "-i";

    public static final String G = "-G";
    /**
     * 请求头
     */
    public static final String H = "-H";

    public static final String HOST = "Host: cmccdevops-test-pod6-devops.hu6-173-77.4a.cmit.cloud";

    /**
     * 指定数据
     */
    public static final String D = "-d";

    public static final String CONTENT_TYPE = "Content-Type: application/json;charset=UTF-8";

    /**
     * cookie
     */
    public static final String COOKIE = "--cookie";
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值