Skip to content

Instantly share code, notes, and snippets.

@swankjesse
Last active July 20, 2023 19:01
Show Gist options
  • Star 97 You must be signed in to star a gist
  • Fork 15 You must be signed in to fork a gist
  • Save swankjesse/8571a8207a5815cca1fb to your computer and use it in GitHub Desktop.
Save swankjesse/8571a8207a5815cca1fb to your computer and use it in GitHub Desktop.
This OkHttp application interceptor will replace the destination hostname in the request URL.
import java.io.IOException;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
/** An interceptor that allows runtime changes to the URL hostname. */
public final class HostSelectionInterceptor implements Interceptor {
private volatile String host;
public void setHost(String host) {
this.host = host;
}
@Override public okhttp3.Response intercept(Chain chain) throws IOException {
Request request = chain.request();
String host = this.host;
if (host != null) {
HttpUrl newUrl = request.url().newBuilder()
.host(host)
.build();
request = request.newBuilder()
.url(newUrl)
.build();
}
return chain.proceed(request);
}
public static void main(String[] args) throws Exception {
HostSelectionInterceptor interceptor = new HostSelectionInterceptor();
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.build();
Request request = new Request.Builder()
.url("http://www.coca-cola.com/robots.txt")
.build();
okhttp3.Call call1 = okHttpClient.newCall(request);
okhttp3.Response response1 = call1.execute();
System.out.println("RESPONSE FROM: " + response1.request().url());
System.out.println(response1.body().string());
interceptor.setHost("www.pepsi.com");
okhttp3.Call call2 = okHttpClient.newCall(request);
okhttp3.Response response2 = call2.execute();
System.out.println("RESPONSE FROM: " + response2.request().url());
System.out.println(response2.body().string());
}
}
@JessYanCoding
Copy link

@iBotasky Because the network request is asynchronous, try https://github.com/JessYanCoding/RetrofitUrlManager

@uni-cstar
Copy link

I have a good implementation plan, which will be easier to use and solve the problem more thoroughly. Welcome everyone to try https://github.com/uni-cstar/oknet

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment