java https單向認證(忽略認證)並支持http基本認證


  
https單向認證(忽略認證)並支持http基本認證,

 溫馨提示 1,jar包要導入對
      2,有匿名類編譯要注意
      3,歡迎提問,拿走不謝!

背景知識

Https訪問的相關知識中,主要分為單向驗證和雙向驗證,雙向驗證在單向驗證的基礎上構建而成

關於單向驗證,如果要細分的話,分為證書驗證和普通驗證(忽略驗證),因為這項驗證針對客戶端,所以客戶端有能力控制是否需要驗證

 
         

Java類中帶有內部類和匿名類編譯的class文件命名規則
內部類的class文件命名是:主類+$+內部類名

匿名類的class文件命名是:主類+$+(1,2,3....)

 

HttpClient 使用方法

 apache.commons.httpclient.HttpClient 已不推薦使用
 org.apache.http.client.HttpClient 不推薦使用現在的版本 HttpClient httpClient=new
 DefaultHttpClient(); ,建議使用最新版本 CloseableHttpClient httpclient =
* HttpClients.createDefault();

1. 創建HttpClient對象。
*
* 2. 創建請求方法的實例,並指定請求URL。如果需要發送GET請求,創建HttpGet對象;如果需要發送POST請求,創建HttpPost對象。
*
* 3. 如果需要發送請求參數,可調用HttpGet、HttpPost共同的setParams(HetpParams
* params)方法來添加請求參數;對於HttpPost對象而言,也可調用setEntity(HttpEntity
* entity)方法來設置請求參數。
*
* 4. 調用HttpClient對象的execute(HttpUriRequest
* request)發送請求,該方法返回一個HttpResponse。
*
* 5. 調用HttpResponse的getAllHeaders()、getHeaders(String
* name)等方法可獲取服務器的響應頭;調用HttpResponse的getEntity
* ()方法可獲取HttpEntity對象,該對象包裝了服務器的響應內容。程序可通過該對象獲取服務器的響應內容。
*
* 6. 釋放連接。無論執行方法是否成功,都必須釋放連接
*/

 

看來這么多,想必對今天的代碼有所了解了,那就直接上代碼!



2 3 import javax.net.ssl.SSLContext; 4 import javax.net.ssl.TrustManager; 5 import javax.net.ssl.X509TrustManager; 6 7 import org.apache.http.HttpEntity; 8 import org.apache.http.HttpHost; 9 import org.apache.http.HttpResponse; 10 import org.apache.http.auth.AuthScope; 11 import org.apache.http.auth.UsernamePasswordCredentials; 12 import org.apache.http.client.AuthCache; 13 import org.apache.http.client.methods.HttpPost; 14 import org.apache.http.client.protocol.ClientContext; 15 import org.apache.http.conn.scheme.Scheme; 16 import org.apache.http.conn.ssl.SSLSocketFactory; 17 import org.apache.http.entity.StringEntity; 18 import org.apache.http.impl.auth.BasicScheme; 19 import org.apache.http.impl.client.BasicAuthCache; 20 import org.apache.http.impl.client.DefaultHttpClient; 21 import org.apache.http.params.CoreConnectionPNames; 22 import org.apache.http.protocol.BasicHttpContext; 23 import org.apache.http.util.EntityUtils; 24 25 26 /** 27 * @author kobe 28 * 29 */ 30 public class Testhttps { 31 32 public static final String username = ""; 33 public static final String password = ""; 34 public static final String ip = ""; 35 public static final int port = 443; 36 37 /** 38 * 39 * @param requestUrl 40 * @param xmlData 41 * @param contentType 42 * @param charset 43 */ 44 public void postRequest(String requestUrl, String xmlData, String contentType, String charset) 45 { 46 47 int returncode = 0; 48 String msg = ""; 49 // 1. 創建HttpClient對象。 50 DefaultHttpClient httpClient = new DefaultHttpClient(); 51 // 2.創建請求方法的實例,並指定請求URL。如果需要發送GET請求,創建HttpGet對象;如果需要發送POST請求,創建HttpPost對象。 52 HttpPost post = new HttpPost(requestUrl); 53 try 54 { 55 // 3. 如果需要發送請求參數, 56 StringEntity entity = new StringEntity(xmlData, charset); 57 entity.setContentType(contentType); 58 post.setEntity(entity); 59 //3.1訪問https的網站設置ssl 60 enableSSL(httpClient); 61 //3.2設置超時 62 httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30 * 1000); 63 httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 60 * 1000); 64 //3.3設置basic基本認證 65 BasicHttpContext basicHttpContext = enableBasic(httpClient, username, password, ip, port); 66 //4. 調用HttpClient對象的execute 67 HttpResponse response = httpClient.execute(post, basicHttpContext); 68 // 5. 調用HttpResponse的getAllHeaders()、getHeaders(String 69 // name)等方法可獲取服務器的響應頭;調用HttpResponse的getEntity()方法可獲取HttpEntity對象,該對象包裝了服務器的響應內容。程序可通過該對象獲取服務器的響應內容。 70 returncode = response.getStatusLine().getStatusCode(); 71 System.out.println("postCode= " + returncode); 72 // 若狀態值為2類,則ok 73 if (200<=returncode&&returncode<300) 74 { 75 System.out.println("數據發送成功!"); 76 } 77 else{ 78 HttpEntity entityRep = response.getEntity(); 79 if (entityRep != null) 80 { 81 msg = EntityUtils.toString(response.getEntity(),"UTF-8"); 82 System.out.println("錯誤信息"+msg); 83 84 } 85 86 } 87 88 } 89 catch (Exception e) 90 { 91 e.printStackTrace(); 92 } 93 finally 94 { 95 // 關閉連接釋放資源 96 if (null != post) 97 { 98 post.releaseConnection(); 99 100 } 101 if (null != httpClient) 102 { 103 httpClient.getConnectionManager().shutdown(); 104 } 105 106 } 107 108 } 109 110 111 112 113 public BasicHttpContext enableBasic(DefaultHttpClient httpClient,String username,String password,String ip, int port) 114 { 115 AuthScope authScope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT); 116 UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(username, password); 117 httpClient.getCredentialsProvider().setCredentials(authScope, credentials); 118 // Create AuthCache instance 119 AuthCache authCache = new BasicAuthCache(); 120 // Generate BASIC scheme object and add it to the local auth cache 121 BasicScheme basicAuth = new BasicScheme(); 122 HttpHost targetHost = new HttpHost(ip, port, "https"); 123 authCache.put(targetHost, basicAuth); 124 // Add AuthCache to the execution context 125 BasicHttpContext localcontext = new BasicHttpContext(); 126 localcontext.setAttribute(ClientContext.AUTH_CACHE, authCache); 127 128 return localcontext; 129 } 130 131 /** 132 * 訪問https的網站 133 134 * 135 * @param httpclient 136 */ 137 public void enableSSL(DefaultHttpClient httpclient) 138 { 139 // 調用ssl 140 try 141 { 142 SSLContext sslcontext = SSLContext.getInstance("TLS"); 143 sslcontext.init(null, new TrustManager[] { truseAllManager }, null); 144 SSLSocketFactory sf = new SSLSocketFactory(sslcontext); 145 sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 146 Scheme https = new Scheme("https", sf, 443); 147 httpclient.getConnectionManager().getSchemeRegistry().register(https); 148 } 149 catch (Exception e) 150 { 151 e.printStackTrace(); 152 } 153 } 154 155 /** 156 * 重寫驗證方法,取消檢測ssl 157 */ 158 public TrustManager truseAllManager = new X509TrustManager() { 159 160 public java.security.cert.X509Certificate[] getAcceptedIssuers() 161 { 162 return null; 163 } 164 165 @Override 166 public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) 167 throws java.security.cert.CertificateException 168 { 169 } 170 171 @Override 172 public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) 173 throws java.security.cert.CertificateException 174 { 175 } 176 177 }; 178 179 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM