差異處
這裏顯示兩個版本的差異處。
下次修改 | 前次修改 | ||
java:httpclient [2016/03/18 00:01] tony 建立 |
java:httpclient [2023/06/25 09:48] (目前版本) |
||
---|---|---|---|
行 2: | 行 2: | ||
====== HttpClient ====== | ====== HttpClient ====== | ||
===== Introduction ===== | ===== Introduction ===== | ||
- | HttpClient是封裝Http Request行為的Library。我用這個Library已經很久了,網路上可以找到不少教學;因此這裡我只記載一些我自己嘗試的東西。 | + | HttpClient是封裝Http Request行為的Library。我用這個Library已經很久了,網路上可以找到不少教學;因此這裡我記載一些我在嘗試的東西。 |
===== Articles ===== | ===== Articles ===== | ||
- | ==== SSL的Hostname驗證 ==== | + | * [[java:httpclient:testSSL|Test SSL connection]] |
- | 最近在評估某個功能剛好談到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> | + | |
+ | ===== Resource ===== | ||
+ | * [[https://my.oschina.net/JoeyXieIsCool/blog/734730|HttpClient连接池的使用]] | ||
+ | * [[http://www.importnew.com/28669.html|httpclient重試機制]] |