用Retrofit發送請求中添加身份驗證


用Retrofit發送請求中添加身份驗證
====================
在安卓應用開發中, retrofit可以極大的方便發送http網絡請求,不管是GET, POST, 還是PUT, DELETE, Retrofit使用起來都非常簡單。只要稍微看一下文檔,就知道怎么用。但文檔沒有具體說明怎么怎么發送帶auth信息的請求。本文分享兩個代碼片段。

比如要發送這樣的請求,在header中添加身份驗證信息,用戶名和密碼:

http -a user1:user1password POST http://127.0.0.1/add/ alphago="win"

首先需要把身份驗證信息用Base64轉碼。
``````java

// 首先要把登錄信息用Base64 encode
String credentials = user1 + ":" + user1password;
final String auth_string =
        "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);

``````

有兩種方法可以實現,方法一是直接添加header信息,方法二是使用攔截器
####方法一
在請求的頭中添加的,在api接口定義時添加,使用Header decorator.
''' java

public interface apiInterface{
    @POST("add/")
    call<User> authUser(@Header("Authorization") String auth);
}

apiInterfaceService.addNew(auth_string);

'''

####方法二
通過OkHttpClient.Builder的addIntercepoter添加Interceptor, 在request中添加頭文件信息,通過okhttpclient添加到retrofit,

''' java

private static Retrofit.Builder retrofitBuilder =
            new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create());   

private
static OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder(); httpClientBuilder.addInterceptor(new Interceptor() { @Override public Response intercept(Interceptor.Chain chain) throws IOException { Request original = chain.request(); Request.Builder requestBuilder = original.newBuilder() .header("Authorization", auth_string) .header("Accept", "application/json") .method(original.method(), original.body()); Request request = requestBuilder.build(); return chain.proceed(request); } }); } OkHttpClient client = httpClientBuilder.build(); retrofitBuilder.client(client).build();

'''


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM