【问题标题】:Getting connection timeout: connect获取连接超时:connect
【发布时间】:2015-12-17 03:28:17
【问题描述】:

我收到连接超时:当我在 url 中使用用户名和密码时出现连接异常。网址是“http://testadmin:testadmin@myhostName/manager/text/list”;

这个 url 在 chrome、firefox 网络浏览器中工作,但是当我要通过 java 代码访问这个 url 时。

这是我得到的输出和异常:

&&&&&&&&&&&&&&&
*********88
response
java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.<init>(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at test.TomcatTest.main(TomcatTest.java:23)

我正在使用以下代码。

package test;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class TomcatTest {


    public static void main(String[] args) {
        String listUrl = "http://testadmin:testadmin@myhostName/manager/text/list";
        String serverResponse = "";
        URL url = null;
        try {
            System.out.println("&&&&&&&&&&&&&&&");
            url = new URL(listUrl);
            URLConnection connection = url.openConnection();
            System.out.println("*********88");
            // i also tried without setting readtimeout.
            connection.setReadTimeout(3 * 60 * 1000);// set timeout 3 minutes
            InputStream inputStream = connection.getInputStream();
            System.out.println("^^^^^^^^^^^^^");
            int chr = -1;
            while ((chr = inputStream.read()) != -1) {
                System.out.print((char)chr);
                serverResponse += (char)chr;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("response " + serverResponse);
    }
}

【问题讨论】:

    标签: java


    【解决方案1】:

    URL http://&lt;user&gt;:&lt;pass&gt;@url 不会以这种方式发送到 Web 服务器。浏览器从 url 中取出用户名和密码,并创建一个 basic authentication 标头。

    Java 从字面上将 URL 发送到服务器。这是一个安全问题,因为 URL 可能在多个阶段被记录。

    此演示代码 99% 基于 answer by Wanderson Santos and joel234 并采用 Java 8 Base64 改编:

    String _url_string = "http://server/"
    
    url = new URL(_url_string);
    URLConnection uc = url.openConnection();
    String userpass = _user + ":" + _password;
    String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userpass.getBytes()));
    uc.setRequestProperty("Authorization", basicAuth);
    InputStream in = uc.getInputStream();
    

    【讨论】:

    • 谢谢@notes-ji,这与我有关。
    • @AjayYadav 如果您觉得我的回答很有用,请投赞成票。如果您觉得我的回答正在解决您的问题,请单击钩子。将问题的标题更改为更有趣的“获取连接超时:URL.openConnection()”谢谢
    【解决方案2】:

    现在我有一个解决方案,我们不能像上面那样在 url 中使用用户名和密码。

    可以这样使用:

    String listUrl = "http://myHostName/manager/text/list";
    //use username and password here
    connection.setRequestProperty("Authorization", String.format("Basic %s", new BASE64Encoder().encode("testadmin:testadmin".getBytes("UTF-8"))));
    

    【讨论】:

      猜你喜欢
      • 2020-11-04
      • 2016-06-07
      • 1970-01-01
      • 2021-04-15
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 2013-03-14
      相关资源
      最近更新 更多