差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

下次修改
前次修改
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.SSLExceptionhostname 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重試機制]]