我试图登录。
请求看起来像$ curl -u"用户名:PASSWORD" https://urlhere.com
如何使用改造使其工作?
我尝试了一个授权标题,例如request.addHeader(" Authentication",username +":" + password);
请帮忙吗?
答案 0 :(得分:6)
你的问题不够明确。 我想这是基本的认证,你可以使用这样的东西
@FormUrlEncoded
@POST("/login") void login(
@Header("Authorization") String authorization,
Callback<?> callback
);
// later when you call it
public static String getBase64String(String value) throws UnsupportedEncodingException {
return Base64.encodeToString(value.getBytes("UTF-8"), Base64.NO_WRAP);
}
final String auth = "Basic " + getBase64String("user:password");
apiClient.login(auth, callback);
我希望有所帮助。 :)
答案 1 :(得分:3)
如果您有需要仅对单独的休息请求使用授权,您可以通过@Header进行。可以使用@Header注释动态更新请求标头。
@FormUrlEncoded
@GET("/user")
void getUser(@Header("Authorization")
String authorization, Callback<User> callback);
哪里
String authorization = "Basic " + getBase64String("user:password");
例如,它将字符串:Basic b2QGdyb3Vwb24ucnU6aWxvdmVteW1hbWE=
public static String getBase64String(String value)throws UnsupportedEncodingException { 返回Base64.encodeToString(value.getBytes(&#34; UTF-8&#34;),Base64.NO_WRAP); }
如果您有需要对所有其他请求使用授权,则可以通过Retrofit Interceptor添加@Header:
new RestAdapter.Builder().
setClient(...).
setEndpoint(...).
setErrorHandler(...).
setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("Content-Type", "application/json");
request.addHeader("Authorization", authorization);
}
}).
build();