问题遇到的现象和发生背景
我是用java的httpsclient去发了http请求,主要是为了访问一个url,然后访问状态码和请求结果的。
现在问题是:请求成功的时候可以返回状态码200,还有我的请求判断与否的字符串“请求成功”,但是当我随便输入一个端口或者是错误的url的时候,就直接异常,我的请求判断字符串“请求失败”没办法显示,不知道怎么解决。
核心功能代码在下面:
用代码块功能插入代码,请勿粘贴截图
String result = null;
//创建实例;
CloseableHttpClient client = HttpClients.createDefault();
// 参数
StringBuilder params = new StringBuilder();
// 字符数据最好encoding以下;这样一来,某些特殊字符才能传过去(如:某人的名字就是“&”,不encoding的话,传不过去)
params.append("s=").append(URLEncoder.encode(Parm1, "utf-8"));
//System.out.println("请求url为:"+url0+Parm0+params);
//get请求
HttpGet httpGet = new HttpGet(url0+Parm0+params);
// 配置请求参数实例(不需要可忽略)
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(80000)// 设置连接主机服务超时时间
.setConnectionRequestTimeout(80000)// 设置连接请求超时时间
.setSocketTimeout(80000)// 设置读取数据连接超时时间
.build();
httpGet.setConfig(requestConfig);
httpGet.addHeader("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0");
//发送请求
CloseableHttpResponse response = null;
try {
response = client.execute(httpGet);
} catch (IOException e) {
throw new RuntimeException(e);
}
//获取实例
HttpEntity entity = response.getEntity();
//转化字符串
String string = null;
try {
string = EntityUtils.toString(entity,"UTF-8");
} catch (IOException e) {
throw new RuntimeException(e);
}
Boolean isVul = string.contains("Build Date");
if (isVul){
result= "连接成功。状态码:"+response.getStatusLine()+"\n";
}
else {
result = "连接不成功。";
}
response.close();
client.close();
System.out.println("返回结果:"+result);
return result;
}
}
运行结果及报错内容
当请求127.0.0.1:8080这个正确的ip和端口的时候,我判断是否请求成功的字符串是能显示的:
当时,当我把端口一改,换成一个不存在或者是无法访问的,我想输出请求连接失败,但是不行。直接就是异常。
我想要达到的结果
我想要的其实很简单,就是请求访问能成功就是成功,请求失败就输出请求无法连接,失败。但是不知道要怎么做if判断,希望大家能能帮弟弟我解决一下。