此贴专门用来记录学习工作中遇到的各种bug、疑难杂症的排错经历。
1、java.net.ConnectException: Connection refused: connect
问题描述:
使用HttpClient向本机发送无参的get请求时,控制台输出一对异常信息如下:
00:08:48.923 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection released: [id: 0][route: {}->http://localhost:80][total available: 0; route allocated: 0 of 2; total allocated: 0 of 20]
Exception in thread "main" org.apache.http.conn.HttpHostConnectException: Connect to localhost:80 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
at com.bjsxt.httpclient.TestHttpClient.testGetNoParams(TestHttpClient.java:143)
at com.bjsxt.httpclient.TestHttpClient.main(TestHttpClient.java:38)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
... 12 more
程序中对应的出错点为客户端发送请求,获取响应对象:
HttpResponse response = client.execute(get);
/**
* 无参数GET请求
* 使用浏览器,访问网站的过程是:
* 1、 打开浏览器
* 2、 输入地址
* 3、 访问
* 4、 看结果
* 使用HttpClient,访问WEB服务的过程:
* 1、 创建客户端,相当于打开浏览器
* 2、 创建请求地址, 相当于输入地址
* 3、 发起请求, 相当于访问网站(回车键)
* 4、 处理响应结果, 相当于浏览器显示结果
*/
public static void testGetNoParams() throws IOException {
// 创建客户端对象
HttpClient client = HttpClients.createDefault();
// 创建请求地址
HttpGet get = new HttpGet("http://localhost:80/test");
// 发起请求,接收响应对象
HttpResponse response = client.execute(get);
// 获取响应体。 响应数据是一个基于HTTP协议标准字符串封装的对象。
// 所以,响应体和响应头,都是封装的HTTP协议数据。直接使用可能有乱码或解析错误
HttpEntity entity = response.getEntity();
// 通过HTTP实体工具类,转换响应体数据。 使用的字符集是UTF-8
String responseString = EntityUtils.toString(entity, "UTF-8");
System.out.println("服务器响应数据是 - [ " + responseString + " ]");
// 回收资源
client = null;
}
排错过程:
Debug、百度、CSDN各种查,各种试,结果都不行,这么个简单的Demo我居然都没跑通,把地址换成https://www.baidu.com/反而能跑通,郁闷的去洗澡了……洗澡过程中突然想到是我的服务端程序没启动,而不是连接出问题了。
解决方法:
启动服务端对应程序,这样发送请求才能获取到数据!
总结:
好傻的错误……
2、
3、
4、