背景:在httpclent做post或者get請求時,請求返回的數據總是和預想的不一致,但是有不知道怎么排查問題,經同事說httpclient可以設置代理,就可以獲取請求前數據的一些問題,幫助我排查問題,使用代理很方便,就3句話
實現方式
/** * * @測試點: 發送get請求,並且設置cookies * @驗證點: TODO(這里用一句話描述這個方法的作用) * @param @param * url * @param @param * cookies @備注: void * @author zhangjun * @date 2017年11月7日 * @修改說明 */ public String httpGet(String url, String cookies) { String result = null; HttpHost proxy = new HttpHost("127.0.0.1", 8888, "http"); //添加代理,IP為本地IP 8888就是fillder的端口 CloseableHttpClient httpClient = HttpClients.createDefault();//添加代理 try { // 創建httpGet HttpGet httpGet = new HttpGet(url); System.out.println("獲取的url為:"+url); httpGet.setHeader("Connection", "keep-alive"); httpGet.addHeader(new BasicHeader("Cookie", cookies)); //代理 RequestConfig config = RequestConfig.custom().setProxy(proxy).build(); httpGet.setConfig(config); System.out.println("executing request:" + httpGet.getURI()); // 執行get請求 CloseableHttpResponse response = httpClient.execute(httpGet); try { int code = response.getStatusLine().getStatusCode(); System.out.println("返回的狀態碼:" + code); // 獲取響應實體 HttpEntity entity = response.getEntity(); // 打印響應狀態 System.out.println(response.getStatusLine()); if (entity != null) { System.out.println("Response content length" + entity.getContentLength()); // 打印響應內容 result = EntityUtils.toString(entity); // 打印響應頭 System.out.println("Response content" + entity.getContent()); System.out.println("Response Contentype" + entity.getContentType()); System.out.println("Response ContenEncoding" + entity.getContentEncoding()); } System.out.println("--------------"); Header[] hr = response.getAllHeaders(); for (int i = 0; i < hr.length; i++) { Header header1 = hr[i]; System.out.println("頭部內容:" + header1); } } finally { response.close(); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { // 關閉連接,釋放資源 try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } return result; }