我可以在正常的HTTPURLConnection
请求上设置Auth Header,如下所示:
URL url = new URL(source);
HttpURLConnection connection = this.client.open(url);
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Bearer " + token);
这是HttpURLConnection的标准配置。在上面的代码中,代码段this.client
是Square的OkHTTPClient
(here)的实例。
我想知道是否有OkHTTP
特定的方式来设置Auth Header?我看到OkAuthenticator
类,但不清楚如何使用它/看起来它只处理身份验证挑战。
提前感谢任何指针。
答案 0 :(得分:17)
如果您使用当前版本(2.0.0),则可以向请求添加标题:
Request request = new Request.Builder()
.url("https://api.yourapi...")
.header("ApiKey", "xxxxxxxx")
.build();
而不是使用:
connection.setRequestMethod("GET");
connection.setRequestProperty("ApiKey", "xxxxxxxx");
但是,对于旧版本(1.x),我认为您使用的实现是实现这一目标的唯一方法。正如their changelog提到:
版本2.0.0-RC1 2014-05-23
新的请求和响应类型,每个类型都有自己的构建器。还有一个RequestBody类将请求主体写入网络,还有一个ResponseBody来从网络中读取响应主体。 独立的Headers类提供对HTTP标头的完全访问权限。
答案 1 :(得分:-1)
client.setAuthenticator(new Authenticator() {
@Override public Request authenticate(Proxy proxy, Response response) {
System.out.println("Authenticating for response: " + response);
System.out.println("Challenges: " + response.challenges());
String credential = Credentials.basic("jesse", "password1");
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
@Override public Request authenticateProxy(Proxy proxy, Response response) {
return null; // Null indicates no attempt to authenticate.
}
});