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

  • 相关阅读:
    转】Linux下安装Tomcat服务器和部署Web应用
    转】数据描述的三个领域
    怎样在嵌入式产品中应用键值存储数据库
    图片预览插件 fancyBox
    请别昧着良心说自己的文章是原创
    学习制作操作系统 0
    HDOJ 5276 YJC tricks time multimap
    日版 Galaxy Note sc05d 涮机
    Android 自己实现 NavigationView [Design Support Library(1)]
    用标准Struts2+mvc写的用户管理
  • 原文地址:https://www.cnblogs.com/youcong/p/9231045.html
Copyright © 2011-2022 走看看