【问题标题】:IllegalStateException : Already Connected while connecting to a HttpURLIllegalStateException:连接到 HttpURL 时已连接
【发布时间】:2018-12-21 07:26:45
【问题描述】:

我正在尝试通过提供 git 存储库的 http url 来读取 git 文件。我的存储库不是公开的,因此我在代码中提供了身份验证详细信息并尝试连接,但它给出了错误。我的代码如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;

import com.sun.xml.internal.messaging.saaj.util.Base64;

public class testInAction {

    static String username = "user@db.com";
    static String password = "12345678";

    public static void main(String[] args) throws Throwable {

        String link = "https://stash.gto.intranet.db.com:8081/projects/myproject/browse";
        URL searchURL = new URL(link);
        System.out.println("start");
        URLConnection searchHttp = (HttpURLConnection) searchURL.openConnection();
        searchHttp.setRequestProperty("X-Requested-With", "Curl");
        Map<String, List<String>> searchHeader = searchHttp.getHeaderFields();
        String userPass = username + ":" + password;
        String basicAuth = "Basic" + new String(new Base64().encode(userPass.getBytes()));
        searchHttp.setRequestProperty("Authorization", basicAuth);
        InputStream searchStream = searchHttp.getInputStream();
        String searchResponse = searchGetStringFromStream(searchStream);
        System.out.println(searchResponse);
    }

    private static String searchGetStringFromStream(InputStream seachStream1) throws IOException {
        if (seachStream1 != null) {
            Writer searchWriter = new StringWriter();
            char[] searchBuffer = new char[2048];
            try {
                Reader searchReader = new BufferedReader(new InputStreamReader(seachStream1, "UTF-8"));
                int counter;
                while ((counter = searchReader.read(searchBuffer)) != -1) {
                    searchWriter.write(searchBuffer, 0, counter);
                }
            } finally {
                seachStream1.close();
            }
            return searchWriter.toString();
        } else {
            return "No Contents";
        }
    }
}

但我在运行此代码时收到 IllegalStateException 错误。完整的错误堆栈如下所示: 线程“主”java.lang.IllegalStateException 中的异常:已连接 在 sun.net.www.protocol.http.HttpURLConnection.setRequestProperty(HttpURLConnection.java:3014) 此错误可能是什么原因以及如何解决?

【问题讨论】:

    标签: java exception httpurlconnection illegalstateexception


    【解决方案1】:

    来自javadoc

    URLConnection 对象经历两个阶段:首先它们被创建,然后它们被连接。在创建之后和连接之前,可以指定各种选项(例如,doInput 和 UseCaches)。连接后,尝试设置它们是错误的。如有必要,依赖于连接的操作(如 getContentLength)将隐式执行连接。

    getHeaderFields() 是隐式调用connect() 的方法之一。因此,您需要确保在最后一次调用setRequestProperty() 之后将其调用。或者只是删除该行。

    无关说明:Basic 后面缺少一个空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 2016-12-14
      • 2018-07-07
      • 1970-01-01
      相关资源
      最近更新 更多