Java https访问

来源:互联网 发布:行知小学 编辑:程序博客网 时间:2024/05/27 12:20

public class SslUtils {

private static void trustAllHttpsCertificates()throws Exception {

TrustManager[] trustAllCerts =new TrustManager[1];

TrustManager tm =new miTM();

trustAllCerts[0] =tm;

SSLContext sc = SSLContext.getInstance("SSL");

sc.init(null,trustAllCerts, null);

HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

}


static class miTM implements TrustManager, X509TrustManager {

public X509Certificate[] getAcceptedIssuers() {

returnnull;

}


publicboolean isServerTrusted(X509Certificate[]certs) {

returntrue;

}


publicboolean isClientTrusted(X509Certificate[]certs) {

returntrue;

}


publicvoid checkServerTrusted(X509Certificate[]certs, String authType) throws CertificateException {

return;

}


publicvoid checkClientTrusted(X509Certificate[]certs, String authType) throws CertificateException {

return;

}

}

/**

* 忽略HTTPS请求的SSL证书,必须在openConnection之前调用

* @throws Exception

*/

public static void ignoreSsl()throws Exception{

    HostnameVerifier hv =new HostnameVerifier() {

        publicboolean verify(String urlHostName, SSLSessionsession) {

            System.out.println("Warning: URL Host: " +urlHostName + " vs. " + session.getPeerHost());

            returntrue;

        }

    };

    trustAllHttpsCertificates();

    HttpsURLConnection.setDefaultHostnameVerifier(hv);

}

public static void main(String[]args){

//网络地址 通过字符串,生成URL对象

  URL url=null;

  // 网络会话链接

  HttpsURLConnection conn=null;

    //获取网站返回的输入流

  InputStream in=null;

  //每次读的字节数

  byte[]data =new byte[1024];

  //每次读到的字节数,一般是1024,如果到了最后一行就会少于1024,到了末尾就是 -1

  intlen=0; 

  //本地的输出流

  ByteArrayOutputStream os;

  try

  {

    url=new URL("https://www.91160.com/");

   

//     HttpPost httpost = new HttpPost("https://www.oschina.net/action/user/login");

//    

//            List <NameValuePair> nvps = new ArrayList <NameValuePair>();

//            nvps.add(new BasicNameValuePair("email", "levelh@163.com"));

//            nvps.add(new BasicNameValuePair("pwd", "1111"));

// 

//            httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

    ignoreSsl();

    conn=(HttpsURLConnection)url.openConnection();

    //默认是get 方式

    conn.setRequestMethod("POST");

      // 设置是否向connection输出,如果是post请求,参数要放在http正文内,因此需要设为true

          conn.setDoOutput(true);

    // Post 请求不能使用缓存

          conn.setUseCaches(false);

  //设置请求头 一般没特殊要求, 不需要

        //conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

          // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,

           

        // 要注意的是connection.getOutputStream会隐含的进行connect,所以下面这句可以不要

          //conn.connect();

          //要上传的参数 

            PrintWriter pw=new PrintWriter(conn.getOutputStream());

            String content = "email=levelh@163.com&pwd=1111"; 

            pw.print(content);

            pw.flush();

            pw.close();

  //时候需要获取输入, 废话,当然需要返回,最少要返回状态吧。 所以默认是true

    //conn.setDoInput(true);

    in=conn.getInputStream();

    os=new ByteArrayOutputStream(); 

  while ((len=in.read(data))!=-1)

  {

    os.write(data,0,len);

  }

  in.close();

  System.out.println((os.toByteArray()));

  } catch (Exceptione)

  {

  e.printStackTrace();

  }

}

}

原创粉丝点击