Java之Https請求

來源:互聯網
上載者:User

標籤: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請求

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.