gpt4 book ai didi

java - okhttp 中的代理问题

转载 作者:行者123 更新时间:2023-11-30 02:03:41 27 4
gpt4 key购买 nike

我正在使用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 能够完成请求吗?

最佳答案

我将使用系统环境变量来存储此敏感配置。如果您没有属性文件,系统变量将是不错的选择。

您可以将身份验证方法更新为:

Authenticator proxyAuthenticator = new Authenticator() {
@Override public Request authenticate(Route route, Response response) throws
IOException {
String username = System.getenv("PROXY_USERNAME");
String password = System.getenv("PROXY_PASSWORD");
if (username == null || username.isEmpty() || password == null || password.isEmpty() )
throw new IllegalStateException("Proxy information is not defined in system variables");

String credential = Credentials.basic(username, password);
return response.request().newBuilder()
.header("Proxy-Authorization", credential)
.build();
}
};

并删除

final String username = "username";
final String password = "password";

类字段。

现在,当您运行应用程序时,您可以在计算机本身上定义变量,或者更好地将它们作为参数传递给您的 java 应用程序。例如:

java -jar -DPROXY_USERNAME=userName -DPROXY_PASSWORD=password yourJar.jar

关于java - okhttp 中的代理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51968230/

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