java.io.IOException: сбой рукопожатия SSL: сбой в библиотеке SSL, обычно ошибка протокола - PullRequest
7 голосов
/ 09 марта 2011

Я пытаюсь загрузить некоторый контент, используя класс URL с заданной ссылкой, исходящей с сервера.

Мой код для загрузки:

            URL url = new URL(downloadUrl);
            InputStream stream = url.openStream();
            byte[] content = new byte[stream.available()];
            stream.read(content);
            stream.close();

Но при запускеЯ получил следующее исключение:

 java.io.IOException: SSL handshake failure: Failure in SSL library, usually a protocol error
 error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:604 0xaf076228:0x00000000)
     at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativeconnect(Native Method)
 ...

Ссылка, которую я использовал, выглядит примерно так:

https://contentserver.com/d/761/34/215656/5de1a41ea3bc9c81978af95ed19b03286f64d9a3

Я знаю, если я ввожу его в браузер, он загружает файл, я хочу скачатьТот же файл через Java.

Спасибо

Ответы [ 3 ]

1 голос
/ 19 мая 2011

Код для чтения данных из URL-адреса https в Java

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.net.*;
import java.security.Security;
import java.util.Properties;

public class UseHttps {

public static void main(String argv[]) {

String fullURL = "https://fortress.wa.gov/lni/bbip/detail.aspx?License=SIBLUCL004C5";
try {

    URL page = new URL(fullURL); // Process the URL far enough to find the right handler
    URLConnection urlc = page.openConnection();
    urlc.setUseCaches(false); // Don't look at possibly cached data
    System.out.println("Content-type = " + urlc.getContentType()); // See what's here
    System.out.println("Content-length = " + urlc.getContentLength()); // See how much of it there is
    // Read it all and print it out
    BufferedReader br = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
    String buffer = "";
    while (buffer != null) {
        try {
            System.out.println(buffer);
            buffer = br.readLine();
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
            break;
        }
    }
}
catch (MalformedURLException mue) {
System.out.println(fullURL + " is not a URL that can be resolved");
}
catch (IOException ie) {
ie.printStackTrace();
}
}
}
0 голосов
/ 18 мая 2011

Хотя я не уверен в вашей ошибке SSL, способ, которым вы читаете данные, скорее всего, НЕ тот, который вы хотите. InputStream.available () не является объемом данных в потоке. Поток по определению является «неограниченным», и он заканчивается только после его завершения. InputStream не знает, сколько у него байтов. Метод available () просто сообщает, сколько байтов можно прочитать без блокировки при вводе-выводе.

0 голосов
/ 21 марта 2011

Маркос,

это может быть совершенно неактуально, но ... я получаю ту же ошибку ...

abort: error: _ssl.c:490: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

... пытаясь сделать "hg clone" на моем репозитории bitbucket.org mercurial ..., я пытался подключиться к bitbucket через https из командной строки Windows ... оказалось что я указывал неверный пароль для моего прокси ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...