在項目使用https方式調用別人服務的時候,之前要寫不少的代碼,如今框架封裝了不少,因此不用再寫那麼多了。java
網上看了一下,都是很老的版本,用過期的DefaultHttpClient。spring
以spring爲例:apache
1,在apache 4.0版本中有 DefaultHttpClient 這個類,是用來作httpsClient的,可是在4.3的時候就換成了 CloseableHttpResponse 。DefaultHttpClient 類就被標記爲了 @Deprecated 。安全
try(CloseableHttpResponse execute = HttpClients.createDefault().execute(new HttpGet("https://127.0.0.1:8080/demo/testApi"))) {
InputStream content = execute.getEntity().getContent();//獲取返回結果 是一個InputStream
String s = IOUtils.toString(content);//把Stream轉換成String
System.out.println(s);
} catch (IOException e) {
e.printStackTrace();
}
這裏採用了JDK7的新特性,語法糖,CloseableHttpResponse 繼承了Closeable,Closeable又繼承了 AutoCloseable。在try(){}語法後跳出{}的時候,CloseableHttpResponse 會自動調用close()方法把client關閉。因此咱們不須要手動調用close()。多線程
若是是spring,在spring配置文件裏面配置一個Bean。若是是spring boot在application內配置一個@Bean就能自動注入調用,很是方便。在ClsseableHttpClient上有 @Contract(threading = ThreadingBehavior.SAFE)註解,代表是線程安全的,因此就算是在多線程狀況下也放心使用。app
2,spring還有一個類能夠實現,RestTemplate,也是直接配置一個Bean,進行自動注入的方式框架
RestTemplate restTemplate = new RestTemplate();//可配置到spring容器管理,而後自動注入 String body = restTemplate.getForEntity("https://127.0.0.1:8080/demo/testApi", String.class).getBody();
System.out.println(body);
getForEntity的內部調用到 doExecute()方法時,會執行ClientHttpResponse的close()方法,因此咱們也不須要手動去調用close()。RestTemplate也是線程安全的類,多線程狀況下也放心使用。線程