HttpClient5.x

需求:

1、从文件中将URL全部读出来

2、利用HttpClient探测这些URL,到底是200、404、405、500、timeout

3、某些特殊的页面,虽然是200,但是页面被运维跳转到了403,这种情况也要找出来。

 

下面的代码分别对应上述需求

example1:

/**
     * 多取文件,直接用流读取
     *
     * @return
     * @throws Exception
     */
    public List<String> readFile(String fileName) throws Exception {
        String line;
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(fileName);
        List<String> result = new ArrayList<String>();
        InputStreamReader reader = new InputStreamReader(
                inputStream); // 建立一个输入流对象reader
        BufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言
        while ((line = br.readLine()) != null) {
            result.add(line);
        }
        return result;
    }

注意:这里只传入一个文件名,然后利用类加载器的位置,找到这个文件。

 

2和3、example2和3:利用HttpClient调用这些URL

private InvokeResultEntity invokeUrl(String url) throws Exception {
        InvokeResultEntity invokeResultEntity = new InvokeResultEntity();
        invokeResultEntity.setUrl(url);
        RequestConfig config = RequestConfig.custom()
                .setConnectTimeout(TIME_OUT * 1000)
                .setConnectionRequestTimeout(TIME_OUT * 1000)
                .setSocketTimeout(TIME_OUT * 1000).build();
        CloseableHttpClient httpclient =
                HttpClientBuilder.create().setDefaultRequestConfig(config).build();
        HttpGet httpGet = new HttpGet(url);
        CloseableHttpResponse response1 = httpclient.execute(httpGet);
        try {
//            System.out.println("返回状态为:" + response1.getStatusLine());
            invokeResultEntity.setHttpCompleteStatus(response1.getStatusLine().toString());
            if (response1.getStatusLine().toString().indexOf("200 OK") > 0) {
                if(isContains403(response1)){
                    System.out.println(url + "----403,运维禁止成功");
                    invokeResultEntity.setHttpCode(HTTP_CODE_403);
                }else{
                    System.out.println(url + "----200,连接成功");
                    invokeResultEntity.setHttpCode(HTTP_CODE_200);
                }
                invokeResultEntity.setSuccess(true);
            } else if (response1.getStatusLine().toString().indexOf("405 Method Not Allowed") > 0) {
                System.out.println(url + "----405,连接失败");
                invokeResultEntity.setSuccess(false);
                invokeResultEntity.setHttpCode(HTTP_CODE_405);
            } else if (response1.getStatusLine().toString().indexOf("404 Not Found") > 0) {
                System.out.println(url + "----404,连接失败");
                invokeResultEntity.setSuccess(false);
                invokeResultEntity.setHttpCode(HTTP_CODE_404);
            } else if (response1.getStatusLine().toString().indexOf("500 Internal Server Error") > 0) {
                System.out.println(url + "----500,连接失败");
                invokeResultEntity.setSuccess(false);
                invokeResultEntity.setHttpCode(HTTP_CODE_500);
            } else {
                System.out.println(url + "----连接失败");
                invokeResultEntity.setSuccess(false);
                invokeResultEntity.setHttpCode(HTTP_CODE_UNKNOWN);
            }
            HttpEntity entity1 = response1.getEntity();
            EntityUtils.consume(entity1);
        } finally {
            response1.close();
        }
        return invokeResultEntity;
    }

注意:

2.1)、获取Http的返回状态是:

response1.getStatusLine()

它里面包含的就是200这些

 

2.2)、超时设置是:

RequestConfig config = RequestConfig.custom()
        .setConnectTimeout(TIME_OUT * 1000)
        .setConnectionRequestTimeout(TIME_OUT * 1000)
        .setSocketTimeout(TIME_OUT * 1000).build();

 

2.3)、获取Http中的内容是:response.getEntity,它拿到的是一个流

/**
     * 判断一个返回是否含有403
     * @param response
     * @return
     * @throws Exception
     */
    private  boolean isContains403(CloseableHttpResponse response) throws  Exception{
        boolean isContains403=false;
        String line;
        StringBuilder stringBuilder=new StringBuilder();
        InputStream inputStream=response.getEntity().getContent();
        InputStreamReader reader = new InputStreamReader(
                inputStream); // 建立一个输入流对象reader
        BufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言
        while ((line = br.readLine()) != null) {
            stringBuilder.append(line);
        }
        if(stringBuilder.toString().indexOf("升级维护(403)")>0){
            isContains403=true;
        }
        return  isContains403;
    }

 

参考链接1  - 非常感谢Apache的QuickStart,可以非常快的入门

参考链接2 - 读文件获取里面的内容;

参考链接2.1 - 利用classloader加载文件

参考链接3 - 从HttpClient获取内容

参考链接4 - HttpClient超时设置

 

附git链接:https://gitee.com/iPhone2020/testurlisalive.git

转载于:https://my.oschina.net/windows20/blog/1544540

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值