2017-10-17 1 views
2

Ich versuche, Anfragen mit Authentifizierungsheadern zu senden, aber es scheint, dass der Server den Client nicht identifizieren kann. Ich benutzte this Tutorial und implementiert ein Abfangjäger wie folgt:Fügen Sie Header hinzu, um mit Retrofit 2 anzufordern

public class AuthenticationInterceptor implements Interceptor { 

private String authId; 
private String authToken; 

public AuthenticationInterceptor(String authId, String authToken) { 
    this.authId = authId; 
    this.authToken = authToken; 
} 

@Override 
public Response intercept(@NonNull Chain chain) throws IOException { 
    Request original = chain.request(); 
    Request.Builder builder = original.newBuilder(); 

    if (authId != null && authToken != null) { 
     Timber.d("adding auth headers for: " + this); 
     builder.header("auth_id", authId) 
       .header("auth_token", authToken); 
    } 

    Request request = builder.build(); 
    return chain.proceed(request); 
    } 
} 

Wenn ich versuche, authentifizierte Anfragen an den Server zu senden, gibt es Fehlerreaktion 409. Der Server Kerl mir gesagt, dass ich die bin fehlt params: (die von Postman zum Beispiel erhalten)

“accept”: [ 
     “*/*” 
    ], 
    “accept-encoding”: [ 
     “gzip, deflate” 
    ], 
    “cookie”: [ 
     “PHPSESSID=ah1i1856bkdln5pgmsgjsjtar3" 
    ] 
  • ich dachte, mit Dagger2 könnte dieses Problem verursachen (siehe here), also habe ich die okHttpClient isoliert, aber es funktioniert immer noch nicht.

  • Hier ist meine Nutzung Implementierung (sehr einfach):

    Retrofit retrofit; 
    OkHttpClient client; 
    AuthenticationInterceptor authenticationInterceptor; 
    HttpLoggingInterceptor loggingInterceptor; 
    
    private void testHeaders() { 
    loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() { 
        @Override 
        public void log(String message) { 
         Timber.i(message); 
        } 
    }); 
    loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
    
    client = new OkHttpClient.Builder() 
         .addInterceptor(loggingInterceptor) 
         .build(); 
    
    retrofit = new Retrofit.Builder() 
         .addConverterFactory(GsonConverterFactory.create()) 
         .client(client) 
         .baseUrl(BuildConfig.SERVER_ADDRESS) 
         .build(); 
    
    retrofit.create(EntrOnline.class).getLoginToken("[email protected]", "XXX").enqueue(new Callback<NewAccount>() { 
        @Override 
        public void onResponse(Call<NewAccount> call, Response<NewAccount> response) { 
    
         authenticationInterceptor = new AuthenticationInterceptor(response.body().getAuthId(), response.body().getAuthToken()); 
    
         client = new OkHttpClient.Builder() 
           .addInterceptor(loggingInterceptor) 
           .addInterceptor(authenticationInterceptor) 
           .build(); 
    
         retrofit = new Retrofit.Builder() 
           .addConverterFactory(GsonConverterFactory.create()) 
           .client(client) 
           .baseUrl(BuildConfig.SERVER_ADDRESS) 
           .build(); 
    
         retrofit.create(EntrOnline.class).getKeys("50022d8a-b309-11e7-a902-0ac451eb0490").enqueue(new Callback<List<NewEkey>>() { 
          @Override 
          public void onResponse(Call<List<NewEkey>> call, Response<List<NewEkey>> response) { 
           Timber.d("Test Api"); 
          } 
    
          @Override 
          public void onFailure(Call<List<NewEkey>> call, Throwable t) { 
    
          } 
         }); 
    
        } 
    
        @Override 
        public void onFailure(Call<NewAccount> call, Throwable t) { 
    
        } 
    }); 
    

    }

Dank!

Antwort

0
@Headers("Accept: application/json") 
@FormUrlEncoded 
@POST("sendWalletMoney") 
Call<WalletResponse> sendWalletMoney(@Field("sender") String sender, 
            @Field("receiver") String receiver, 
            @Field("amount") String amount, 
            @Field("trnsx_type") String trnsx_type, 
            @Field("currency") String currency, 
            @Field("module_name") String module_name); 
+0

Ich habe diesen benutzerdefinierten Header hinzugefügt - hat nicht geholfen. –

0

Sieht aus wie ein server issue. Sie können versuchen, die Header hinzuzufügen, über die er in Ihrem Interceptor gesprochen hat.

builder.addHeader("Accept", "*/*").addHeader("accept-encoding", "gzip, deflate") 

Aber das Cookie sollte im Web verwendet werden, um den Überblick über die aktuelle Sitzung zu behalten. Sollte nicht auf der API benötigt werden.

Verwandte Themen