Приложение Android с Picasso не может загружать изображения с HTTPS - PullRequest
0 голосов
/ 14 февраля 2019

Я изменил свое приложение с HTTP на HTTPS, Пикассо хорошо работал в HTTP, но не в HTTPS, я получил ошибку HTTP 504 при загрузке изображений.я использую эти версии

implementation 'com.squareup.okhttp:okhttp:2.7.5'
implementation 'com.squareup.okhttp:okhttp-urlconnection:2.4.0'
implementation 'com.squareup.picasso:picasso:2.71828'

и этот помощник:

public class PicassoTrustAll {
private static Picasso mInstance = null;

private PicassoTrustAll(Context context) {

    TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
        @Override
        public void checkClientTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException {
        }

        @Override
        public void checkServerTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException {
        }

        @Override
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return new java.security.cert.X509Certificate[]{};
        }
    }};
    try {
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, trustAllCerts, null);

        //OkHttpClient client = new OkHttpClient();

        OkHttpClient.Builder b = new OkHttpClient.Builder();
        b.readTimeout(30, TimeUnit.SECONDS);
        b.writeTimeout(30, TimeUnit.SECONDS);
        b.connectTimeout(30, TimeUnit.SECONDS);
        b.addInterceptor(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                final Request.Builder newRequest = chain.request().newBuilder();
                newRequest.addHeader("header_key", "header_value");
                return chain.proceed(newRequest.build());
            }
        });


        OkHttpClient client = b.build();


        mInstance = new Picasso.Builder(context).downloader(new OkHttp3Downloader(client)).listener(new Picasso.Listener() {
            @Override
            public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
                Log.e("onImageLoadFailed", exception.getMessage());
            }
        }).build();

    } catch (Exception e) {
        e.printStackTrace();
    }

}

public static Picasso getInstance(Context context) {
    if (mInstance == null) {
        new PicassoTrustAll(context);
    }
    return mInstance;
}

}

я также попытался настроить безопасность следующим образом: я создал XML-файл безопасности конфигурации

<?xml version="1.0" encoding="utf-8"?>
  <network-security-config>
      <base-config cleartextTrafficPermitted="true" />
      <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">172.20.10.6</domain>
      </domain-config>
</network-security-config>

и использовать его в manifest.xml:

android:networkSecurityConfig="@xml/network_security_config"

ничего из этого не работает, есть ли решение?

...