用OKHttp开发了一个工具类有些请求需要代理有些不能设置代理怎么样做能更灵活的通过在每次调用时候传代理地址和端口来实现当前的请求是否需要代理?
可以在工具类中增加一个可选的参数来传递代理地址和端口,然后在每次请求时判断是否传递了代理地址和端口,如果传递了就使用代理,否则不使用代理。具体实现可以参考以下代码:
public class OkHttpUtils {
private OkHttpClient client;
public OkHttpUtils(String proxyHost, int proxyPort) {
if (TextUtils.isEmpty(proxyHost) || proxyPort <= 0) {
client = new OkHttpClient();
} else {
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
client = new OkHttpClient.Builder().proxy(proxy).build();
}
}
public void doGet(String url, Callback callback) {
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(callback);
}
public void doPost(String url, Map<String, String> params, Callback callback) {
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String, String> entry : params.entrySet()) {
builder.add(entry.getKey(), entry.getValue());
}
RequestBody requestBody = builder.build();
Request request = new Request.Builder().url(url).post(requestBody).build();
client.newCall(request).enqueue(callback);
}
}
在创建OkHttpUtils实例时,可以传递代理地址和端口,如果不需要代理,就传递空字符串和0,代码如下:
OkHttpUtils utils = new OkHttpUtils("", 0);
如果需要代理,就传递代理地址和端口,代码如下:
OkHttpUtils utils = new OkHttpUtils("192.168.1.100", 8888);
这样就能更灵活地控制当前请求是否需要代理
原文地址: https://www.cveoy.top/t/topic/gw21 著作权归作者所有。请勿转载和采集!