首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取连接超时:连接

获取连接超时:连接
EN

Stack Overflow用户
提问于 2015-12-17 01:59:44
回答 2查看 1.1K关注 0票数 0

当我在url中使用用户名和密码时,我得到了连接超时:连接异常。url为"http://testadmin:testadmin@myhostName/manager/text/list";

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

下面是我得到的输出和异常:

代码语言:javascript
复制
&&&&&&&&&&&&&&&
*********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)

我使用了下面的代码。

代码语言:javascript
复制
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);
    }
}
EN

回答 2

Stack Overflow用户

发布于 2015-12-17 02:39:30

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

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

此演示代码99%基于带有Java8 Base64适配的answer by Wanderson Santos and joel234

代码语言:javascript
复制
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();
票数 1
EN

Stack Overflow用户

发布于 2015-12-17 02:29:24

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

它可以像这样使用:

代码语言:javascript
复制
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"))));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34318982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档