2017-03-02 11 views
3

Meine Serve-Seite sendet Set-Cookie auf Client-Antwort, aber auf Android-Seite bekomme ich nichts in Bezug auf Set-Cookie im Header. Mein Netzwerk-Stack auf Android ist Retrofit 2.Retrofit2 Set-Cookie nicht als Antwort vorhanden

Hier mein Anforderungscode,

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(); 

Das gleiche Stück Code funktioniert in einfacher Java-Anwendung, und ich kann Werte abgeladen in Set-Cookie-Schlüssel, aber Es schlägt auf Android fehl.

Beachten Sie, dass meine Java-App Maven-Projekt mit nur Retrofit2 Abhängigkeiten ist.

Plätzchen auf dem Desktop empfangen ist so etwas wie

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 

Antwort

0

Endlich habe ich es funktioniert, ich dns mit okhttpbuilder manuell einstellen musste. Der Grund mein Code wurde auf dem Desktop zu arbeiten, weil

cat /etc/hosts 

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

hatte Wo, wie mein Android-Gerät diese Informationen nicht

So musste hatte ich hatte

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))); 
      } 

    }); 
schreiben