Retrofit2 Set-Cookie отсутствует в ответе

Моя сторона обслуживания отправляет Set-Cookie по ответу клиента, но на стороне Android я не получаю ничего, связанного с Set-Cookie в заголовке. Мой сетевой стек на Android - это Retrofit 2.

Вот мой код запроса,

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        String hostName = "https://www.mysupercoolhost.com";
        CertificatePinner certificatePinner = new CertificatePinner.Builder()
                .add(hostName, "sha256/p1")
                .add(hostName, "sha256/p2")
                .add(hostName, "sha256/p3")
                .build();
        OkHttpClient client = new OkHttpClient.Builder()
                .addNetworkInterceptor(interceptor)
                .certificatePinner(certificatePinner)
                .build();
        RequestBody rb = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), "{\"user\":\"test\"}");

        Request request = new Request.Builder()
                .method("POST", rb)
                .addHeader("Content-Type", "application/json")
                .url(hostName)
                .addHeader("param1", "value1")
                .addHeader("param2", "value2")
                .build();

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    client.newCall(request).execute();
                } catch (IOException ex) {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }).start();

Этот же кусок кода работает в приложении Simple Java, и я могу видеть значения, сброшенные в ключе Set-Cookie, но на Android это не получается.

Обратите внимание, что мое java-приложение является проектом maven с зависимостями retrofit2.

Cookie, полученные на рабочем столе, что-то вроде

INFO: Set-Cookie: test_443=9182912.910219021.0000; path=/
Mar 03, 2017 11:53:08 AM okhttp3.internal.Platform log
INFO: Set-Cookie: cutypie=wandarabigstring; Path=/
Mar 03, 2017 11:53:08 AM okhttp3.internal.Platform log

1 ответ

Решение

Наконец-то у меня все заработало, мне пришлось вручную устанавливать днс с помощью okhttpbuilder. Причина, по которой мой код работал на рабочем столе, потому что

cat /etc/hosts

имел

127.0.0.1   localhost
255.255.255.255 broadcasthost
:1             localhost 
x.x.x.x  mysupercoolhost.com

Где, как на моем устройстве Android не было этой информации

Так что мне пришлось написать

OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.dns(new Dns() {
            @Override
            public List<InetAddress> lookup(String hostname) throws UnknownHostException {
                return return Collections.unmodifiableList(Collections.singletonList(InetAddress.getByAddress("mysupercoolhost.com", domain_ip_in_bytes)));
            }

    });
Другие вопросы по тегам