使用如下代码发送请求时,Host的值为serviceA:9090
try {
URL url = new URL("http://serviceA:9090/health");
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.connect();
int statusCode = httpURLConnection.getResponseCode();
System.out.println("statusCode=" + statusCode);
} catch (Exception e) {
e.printStackTrace();
}
有时,只是希望Host中只有服务名,而不带端口号,修改方法也很简单,需要加一个Handler:
static class HandlerWrapper extends sun.net.www.protocol.http.Handler {
protected int getDefaultPort() {
return 9090;
}
}
然后,修改原代码为如下即可:
try {
URL url = new URL(null, "http://serviceA:9090/health", new HandlerWrapper());
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.connect();
int statusCode = httpURLConnection.getResponseCode();
System.out.println("statusCode=" + statusCode);
} catch (Exception e) {
e.printStackTrace();
}
实现原理也很简单,当发现传入的端口号与默认端口号一致时,生成Host的值就不带端口号。