標籤:img readline tac tput new 語言 secure server buffer
import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.URL;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import javax.net.ssl.HttpsURLConnection;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSocketFactory;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;public class testHttps implements X509TrustManager { public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } public X509Certificate[] getAcceptedIssuers() { // TODO Auto-generated method stub return null; } public static String httpsRequest(String requestUrl,String requestMethod,String outputStr){ StringBuffer buffer=null; try{ //建立SSLContext SSLContext sslContext=SSLContext.getInstance("SSL"); TrustManager[] tm={new testHttps()}; //初始化 sslContext.init(null, tm, new java.security.SecureRandom());; //擷取SSLSocketFactory對象 SSLSocketFactory ssf=sslContext.getSocketFactory(); URL url=new URL(requestUrl); HttpsURLConnection conn=(HttpsURLConnection)url.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); conn.setRequestMethod(requestMethod); //設定當前執行個體使用的SSLSoctetFactory conn.setSSLSocketFactory(ssf); conn.connect(); //往伺服器端寫內容 if(null!=outputStr){ OutputStream os=conn.getOutputStream(); os.write(outputStr.getBytes("utf-8")); os.close(); } //讀取伺服器端返回的內容 InputStream is=conn.getInputStream(); InputStreamReader isr=new InputStreamReader(is,"utf-8"); BufferedReader br=new BufferedReader(isr); buffer=new StringBuffer(); String line=null; while((line=br.readLine())!=null){ buffer.append(line); } }catch(Exception e){ e.printStackTrace(); } return buffer.toString(); } public static void main(String[] args) { String s=httpsRequest("https://www.baidu.com","GET",null); System.out.println(s); }}
上述代碼運行main方法後,直接返回百度的html介面
也就是大家常見的如下介面:
關於https請求,以及它和http請求的區別等,可以參考百度百科:https://baike.baidu.com/item/https/285356?fr=aladdin
至於如何https請求不再多說,秘密都在javax.net.ssl這個包及其包下對應的類。
Java同很多例如Ruby,Python等進階語言一樣,很多底層的東西基本都是封裝好的。作為開發人員熟知api,根據業務的需要,匯入對應的包,調用對應的方法完成需求。
當然,作為初級程式員而言知道哪些api比較常用,完成工作任務或者學習任務即可,但是作為中級程式員而言,不僅僅要知道api,而且要熟悉理解它的實現原理,當然也要知道在那些情況使用它們,以及它們在項目中是如何啟動並執行,會出現什麼問題,作為中級程式員必須要知道,當然,如果作為初級程式員而言,對於原理可以放在一邊,當然,能理解是最好。
Java之Https請求