gpt4 book ai didi

retrofit - 带改造的基本身份验证

转载 作者:行者123 更新时间:2023-12-02 21:47:25 24 4
gpt4 key购买 nike

我正在尝试使用 Retrofit 为 REST API 构建客户端。 API 使用基本身份验证,我无法使用 Retrofit 进行身份验证。

我使用下面的curl测试了API,它按预期工作

curl  -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{some_json}' -u api_key: https://apitest.com/api/v1/customers

下面是Retrofit客户端

public interface UserService {

String HOST = "https://apitest.com";

public static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
public static Retrofit.Builder builder =
new Retrofit.Builder()
.baseUrl(HOST)
.addConverterFactory(GsonConverterFactory.create());
/*
* CREATE/UPDATE User
*/
@POST("api/v1/customers")
Call<UserAPIResponse> userUpdate(@Body UserUpdateRequest userUpdateRequest);



static UserService newInstance(String userAPIKey) {
String credentials = userAPIKey + ":";

final String basic = "Basic "+ Base64.encodeBase64(credentials.getBytes());

httpClient.addInterceptor(new Interceptor() {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request original = chain.request();

Request.Builder requestBuilder = original.newBuilder()
.header("Authorization", basic);
requestBuilder.header("Accept", "application/json");
requestBuilder.method(original.method(),original.body());


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

OkHttpClient client = httpClient.build();
Retrofit retrofit = builder.client(client).build();

return retrofit.create(BlueshiftUserService.class);
}

当我在 UserService 上调用 updateUser 时

Response<UserAPIResponse> response = UserService.userUpdate(userUpdateRequest).execute();

response.code 为 401(未经授权/身份验证失败)

带有 -u 和相同凭据的curl 命令按预期工作。

最佳答案

问题出在凭据编码上。我没有将其作为字符串发送。

byte[] encodedAuth= Base64.encodeBase64(credentials.getBytes());
final String basic = "Basic " + new String(encodedAuth);

关于retrofit - 带改造的基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37830236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com