我只是学习了改造android的基本知识但是我对标题有很多疑问。
我有一个REST API服务器,在我的api导出数据之前,它请求具有存储在Header Authorization上的API KEY。现在在执行之前,我希望将API KEY初始化为标题。
这是我的代码
public interface VerifyClient{
@Headers("Authorization: eNortjI0s1LKTSxKSUyvckguLcuv0EtJ") // <======================
@FormUrlEncoded
@POST("/sendcode/{id}")
VerifyResponse verify(@Path("id") String id, @Field("to") String to, @Field("type") String type, @Field("code") String code);
}
这项工作正常,但问题是如果另一个客户端api密钥?
另一种方法就是这样。
RequestInterceptor requestInterceptor = new RequestInterceptor()
{
@Override
public void intercept(RequestFacade request) {
request.addHeader("Authorization", ApiKey); <======================
}
};
return new RestAdapter
.Builder()
.setEndpoint(Var.REST_URL)
.setRequestInterceptor(requestInterceptor)
.build()
.create(VerifyClient.class)
.verify(userData[0], userData[1], userData[2], userData[3]);
}
但它返回401 Unauthorized
嗯,有人有解决方案吗?或者我执行错了。
答案 0 :(得分:1)
我有同样的问题,这就是我解决它的方法。
首先,这是我的客户。请注意请求标题“Authorization”:我必须在实际令牌之前放置关键字“Token”。也许这可以帮到你。
public static <S> S createService(Class<S> serviceClass, final String token) {
RestAdapter.Builder builder = new RestAdapter.Builder()
.setEndpoint(API_URL)
.setClient(new OkClient(new OkHttpClient()));
if (token != null) {
builder.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("Accept", "application/json");
request.addHeader("Authorization", "Token " + token);
}
});
}
RestAdapter adapter = builder.build();
return adapter.create(serviceClass);
}
中找到了Retrofit客户端
答案 1 :(得分:0)
如果您想为您的用户创建API KEY,我建议您首先制作POJO对象,该对象代表您的用户。
static class User {
@SerializedName("identifier")
String identifier;
@SerializedName("password")
String password;
public User(String username, String password) {
this.identifier = username;
this.password = password;
}
}
下一步创建处理您的Service
请求的POST
。
public interface HttpService {
@POST("path")
Call<Object> postWithJson(
@Header("Content-Type") String contentType,
@Header("Token") String token,
@Body User user
);
}
现在你只需要拨打服务,例如:
String apiKey = 52d5bc6ecc5fasdad123124125r23fsd12312;
Call<Object> call = service.postWithJson("application/json; charset=UTF-8", apiKey, new User("login", "password"));
作为回应得到你想要的,例如:
response.headers().get("tokenKey")