IllegalStateException: уже подключен при подключении к HttpURL - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь прочитать git-файл, указав http-адрес 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 при запуске этого кода.Полный стек ошибок приведен ниже: Исключение в потоке «main» java.lang.IllegalStateException: уже подключено по адресу sun.net.www.protocol.http.HttpURLConnection.setRequestProperty (HttpURLConnection.java:3014). Что может быть причинойэта ошибка и как ее устранить?

1 Ответ

0 голосов
/ 21 декабря 2018

Из javadoc :

URLConnection объекты проходят две фазы: сначала они создаются, затем они соединяются.После создания и перед подключением можно указать различные параметры (например, doInput и UseCaches).После подключения попытка установить их является ошибкой.Операции, которые зависят от соединения, такие как getContentLength, будут неявно выполнять соединение, если это необходимо.

getHeaderFields() - это один из тех методов, которые неявно вызывают connect().Поэтому вам нужно обязательно позвонить по номеру после последнего вызова setRequestProperty().Или просто удалите эту строку.

Несвязанное примечание: вам не хватает пробела после Basic.

...