Ошибка при загрузке изображений из Facebook Graph API с HTTPS с Android

1

Я не могу загружать изображения с помощью протокола HTTPS из-за ошибки сертификата. Это происходит через пару недель или более, до этого у меня не было проблем.

Если я использую библиотеку Apache HttpCommons, ошибка "сертификат имени хоста не соответствует", и если я использую URL-адрес и URL-соединение, исключением является "сертификат не проверен".

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

Это код с библиотекой Apache:

HttpClient client = new DefaultHttpClient();

HttpGet get = new HttpGet(url);

try
{
    HttpResponse response = client.execute(get);
    if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
    {
        HttpEntity entity = response.getEntity();
        if (entity != null)
        {
            try
            {
                byte[] data = EntityUtils.toByteArray(entity);
                bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                //bitmap = BitmapFactory.decodeStream(entity.getContent());
            } catch (IOException e)
            {
                e.printStackTrace();
                Log.e("FACEBOOKLIBRARY", "Error fetching image from this URL: " + url
                        + "because of the download is corrupted");
                bitmap = null;
            } finally
            {
                entity.consumeContent();
            }
        }
    }
    else
    {
        Log.e("FACEBOOKLIBRARY", "Error fetching image from this URL: " + url
                + " because of the error: " + response.getStatusLine().toString());
        bitmap = null;
    }
} catch (IOException e)
{
    e.printStackTrace();
    Log.e("FACEBOOKLIBRARY", "Error fetching image while connecting to this URL: " + url);
    bitmap = null;
}

return bitmap;

И это код URL:

try {
    URL u = new URL(url);
    URLConnection connection = u.openConnection();
    InputStream is = connection.getInputStream();
    BufferedInputStream bis = new BufferedInputStream(is);

    ByteArrayBuffer baf = new ByteArrayBuffer(50);
    int current = 0;
    while((current = bis.read()) != -1) {
        baf.append(current);
    }
    byte[] byteArray = baf.toByteArray();
    bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
} catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    bitmap = null;
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    bitmap = null;
}
Теги:
facebook

1 ответ

1
Лучший ответ

Мне, наконец, пришлось деактивировать проверку имени хоста для HttpClient:

HttpClient client = new DefaultHttpClient();

SSLSocketFactory sf = (SSLSocketFactory) client.getConnectionManager().getSchemeRegistry().getScheme("https").getSocketFactory();
sf.setHostnameVerifier(new AllowAllHostnameVerifier());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню