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

  • 相关阅读:
    scanf和cin的返回值
    C++ STL中Map的按Key排序跟按Value排序
    name lookup of 'res' changed for new ISO 'res' scoping
    string中c_str()、data()、copy(p,n)函数的用法
    C中malloc的使用(转)
    codeforces 653B B. Bear and Compressing(dfs)
    codeforces 653A A. Bear and Three Balls(水题)
    hdu-5646 DZY Loves Partition(贪心)
    hdu-5645 DZY Loves Balls(水题)
    codeforces 655D D. Robot Rapping Results Report(拓扑排序+拓扑序记录)
  • 原文地址:https://www.cnblogs.com/youcong/p/9231045.html
Copyright © 2011-2022 走看看