我使用okhttp3通过SSL +基本身份验证使用以下客户端构建器请求某些Web服务:
client = new OkHttpClient.Builder()
.sslSocketFactory(sslContext.getSocketFactory())
.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
})
.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic("myuser", "mypassword");
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
})
.build()
然后我用
运行请求Request.Builder requestBuilder = new Request.Builder();
requestBuilder.url(url);
Request request = requestBuilder.build();
Call call = client.newCall(request);
Response response = call.execute();
我得到403(拒绝访问)。
我尝试使用cURL并且我得到了正确的身份验证。
我在authenticate
函数中设置了一个断点,它似乎甚至没有被调用。
如果我直接在requestBuilder
中设置标题,即
Request.Builder requestBuilder = new Request.Builder();
requestBuilder.url(url);
String credential = Credentials.basic("myuser", "mypassword");
requestBuilder.header("Authorization", credential).build();
Request request = requestBuilder.build();
Call call = client.newCall(request);
Response response = call.execute();
它有效。
有什么建议吗?