【发布时间】:2019-01-28 19:06:21
【问题描述】:
我正在使用 OkHttp 库从我的应用程序向 facebook api 发出请求,但是我需要在代理网络上工作,实例化 OkHttpClient() 并调用 OkHttpClient.newCall(request).execute() 我收到一条超时消息,因为我的代理停止了请求。
经过一番研究,我发现了以下solution:
int proxyPort = 8080;
String proxyHost = "proxyHost";
final String username = "username";
final String password = "password";
Authenticator proxyAuthenticator = new Authenticator() {
@Override public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(username, password);
return response.request().newBuilder()
.header("Proxy-Authorization", credential)
.build();
}
};
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort)))
.proxyAuthenticator(proxyAuthenticator)
.build();
这很好用,但是我不想将代理信息留在代码或应用程序中。
有没有办法将代理配置为环境变量或在 OkHttp 能够完成请求的某些外部文件中?
【问题讨论】:
-
我不认为 OkHttp 提供任何“魔法”来自动从文件或其他外部资源读取凭据。但是,手动操作应该不难,例如通过使用
System.getenv(name)读取环境变量