国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

HttpClient發送請求時動態替換目標ip

2019-11-08 02:39:48
字體:
來源:轉載
供稿:網友
問題描述:使用HttpClient進行http請求,每次請求隨機使用一個target host進行請求。發http請求的時候,一般會配置數據源,設置ClientPNames.DEFAULT_HOST,這樣在請求的時候目標機器host和端口就是配置的ClientPNames.DEFAULT_HOST。但是不能每次請求ClientPNames.DEFAULT_HOST,因為一個httpclient就對應一個ClientPNames.DEFAULT_HOST,就無法針對一次request進行目標host的修改。例如:HttpGet httpGet = new HttpGet(url);在進行請求時,httpGet作為參數執行execute,此時url是相對路徑,httpclient會將defaulthost+uri拼接為完整的請求地址進行請求。

看HttpClient的源代碼可以發現URI是個線索,在execute方法中會判斷URI中設置的是否是絕對路徑還是相對路徑,如果是相對路徑時httpclient會將defaulthost+uri拼接為完整的請求地址。如果URI中設置了scheme并且URI配置了host就會用URI完整的絕對路徑作為請求地址。判斷邏輯如下

public final HttPResponse execute(HttpUriRequest request,                                  HttpContext context)    throws IOException, ClientProtocolException {    if (request == null) {        throw new IllegalArgumentException            ("Request must not be null.");    }    return execute(determineTarget(request), request, context);}private static HttpHost determineTarget(HttpUriRequest request) throws ClientProtocolException {    // A null target may be acceptable if there is a default target.    // Otherwise, the null target is detected in the director.    HttpHost target = null;    URI requestURI = request.getURI();    if (requestURI.isAbsolute()) {        target = URIUtils.extractHost(requestURI);        if (target == null) {            throw new ClientProtocolException(                    "URI does not specify a valid host name: " + requestURI);        }    }    return target;}分析完就找到了方法解決問題了,在請求時設置URI即可,要注意的是build URI的時候要配置scheme參數才能生效。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹿泉市| 巴青县| 那曲县| 南康市| 政和县| 满城县| 巴林左旗| 讷河市| 新蔡县| 洞口县| 苍溪县| 昌宁县| 黄陵县| 宝坻区| 商南县| 开封市| 通化市| 辛集市| 柘城县| 应城市| 北票市| 志丹县| 尚义县| 文山县| 莒南县| 明光市| 巴里| 阜新| 婺源县| 奉节县| 漠河县| 孝感市| 红安县| 桑植县| 德格县| 荔浦县| 宝丰县| 高清| 蓬溪县| 太仆寺旗| 巫山县|