因为有负载均衡的考虑,前端用了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不同)。