差異處
這裏顯示兩個版本的差異處。
java:httpclient [2016/03/18 00:01] tony 建立 |
java:httpclient [2023/06/25 09:48] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | {{tag>java}} | ||
- | ====== HttpClient ====== | ||
- | ===== Introduction ===== | ||
- | HttpClient是封裝Http Request行為的Library。我用這個Library已經很久了,網路上可以找到不少教學;因此這裡我只記載一些我自己嘗試的東西。 | ||
- | ===== Articles ===== | ||
- | ==== SSL的Hostname驗證 ==== | ||
- | 最近在評估某個功能剛好談到SSL,也講到hostname的驗證,所以好奇試驗一下HttpClient是否有做hostname驗證。我拿臉書URL做測試: | ||
- | <code java> | ||
- | public static void main(String[] args) throws ClientProtocolException, | ||
- | IOException { | ||
- | HttpClient httpclient = null; | ||
- | try { | ||
- | httpclient = new DefaultHttpClient(); | ||
- | |||
- | HttpGet get = new HttpGet("https://31.13.95.36/"); | ||
- | |||
- | HttpResponse response = httpclient.execute(get); | ||
- | System.out.println(response.getStatusLine().getStatusCode()); | ||
- | } finally { | ||
- | HttpClientUtil.shutdownHttpClient(httpclient); | ||
- | } | ||
- | } | ||
- | </code> | ||
- | 如果是直接用它的domain name會正常;用ip則會出現以下例外,也證明它是有做hostname的驗證的。 | ||
- | <code> | ||
- | Exception in thread "main" javax.net.ssl.SSLException: hostname in certificate didn't match: <31.13.95.36> != <*.facebook.com> | ||
- | at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:228) | ||
- | at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:54) | ||
- | at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:149) | ||
- | at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:130) | ||
- | at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:397) | ||
- | at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148) | ||
- | at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:150) | ||
- | at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121) | ||
- | at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:575) | ||
- | at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425) | ||
- | at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) | ||
- | at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754) | ||
- | at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732) | ||
- | at org.tonylin.stock.dao.DatabaseStockDaoTest.main(DatabaseStockDaoTest.java:56) | ||
- | </code> | ||
- | |||