Java之Https请求

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,而且要熟悉理解它的实现原理,当然也要知道在那些情况使用它们,以及它们在项目中是如何运行的,会出现什么问题,作为中级程序员必须要知道,当然,如果作为初级程序员而言,对于原理可以放在一边,当然,能理解是最好。

猜你喜欢

转载自www.cnblogs.com/youcong/p/9231045.html