1. 程式人生 > >HttpClient正確設定Host的姿勢(不需要自定義DNS解析類)

HttpClient正確設定Host的姿勢(不需要自定義DNS解析類)

因為有負載均衡的考慮,前端用了nginx反向代理。

兩個域名雖然IP相同,但是如果不設定hosts檔案,直接通過IP,是會返回404的。

所以需求就是這樣,不設定hosts檔案,而正確訪問到對應的域名。

其實訪問的IP是一樣的,只是request header的Host不一樣。

搜尋到的解決方式:http://my.oschina.net/mikewei/blog/88606

這樣有些不優雅,有點麻煩,而且我在httpClient3下,沒找到對應的類。

只好debug跟蹤原始碼。

發現method.setRequestHeader("Host","a.xxxx.com")會被覆蓋掉。

跟蹤原始碼發現,是HttpMethodBase類的addHostRequestHeader方法覆蓋掉了。


如上,事情就好辦了:

method.getParams().setVirtualHost("a.xxxx.com");

就OK了!

根本用不到自己實現一個DNS解析類。



關鍵程式碼就一行:getMethod.getParams().setVirtualHost("a.xxxx.com");

通過debug原始碼找出的。。。

其實就是隻要request header多一個Host:a.xxxx.com就行

補充:

想直接命中某個機器必須這樣做。

否則直接用域名的方式,會負載均衡 不知道命中到哪臺機器上(IP不同)。