一个爬取https和http通用的工具类(JDK自带的URL的用法)

 

  今天在java爬取天猫的时候因为ssl报错,所以从网上找了一个可以爬取https和http通用的工具类。但是有的时候此工具类爬到的数据不全,此处不得不说python爬虫很厉害。

package cn.qlq.craw.Jsoup;

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.X509TrustManager;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.helper.HttpConnection;
import org.jsoup.nodes.Document;  
  
public class HttpCommonUtil {  
      
    public static void trustEveryone() {   
        try {    
            HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {    
                public boolean verify(String hostname, SSLSession session) {    
                    return true;    
                }    
            });    
    
            SSLContext context = SSLContext.getInstance("TLS");    
            context.init(null, new X509TrustManager[] { new X509TrustManager() {    
                public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {    
                }    
    
                public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {    
                }    
    
                public X509Certificate[] getAcceptedIssuers() {    
                    return new X509Certificate[0];    
                }    
            } }, new SecureRandom());    
            HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());    
        } catch (Exception e) {    
            e.printStackTrace();    
        }    
    }    
    
    public static Object getHttpHeaders(URL url, int timeout) {    
        try {    
            trustEveryone();   
            Connection conn = HttpConnection.connect(url);    
            conn.timeout(timeout);    
            conn.header("Accept-Encoding", "gzip,deflate,sdch");    
            conn.header("Connection", "close");    
            conn.get();    
            //String result=conn.response().body();  
            Map<String, String> result = conn.response().headers();    
            result.put("title", conn.response().parse().title());    
            return result;   
        } catch (Exception e) {    
            e.printStackTrace();    
        }    
        return null;    
    }    
    
    public static Object getHttpBody(URL url, int timeout) {    
        try {    
            trustEveryone();   
            Connection conn = HttpConnection.connect(url);    
            conn.timeout(timeout);    
            conn.header("Accept-Encoding", "gzip,deflate,sdch");    
            conn.header("Connection", "close");    
            conn.get();    
            //String result=conn.response().body();  
//            String result = conn.response().body();    
            String result = conn.response().body();    
            File file = new File("C:\\Users\\liqiang\\Desktop\\实习\\python\\javaCrawPicture\\tianmao.html");
            if(!file.exists()){
                file.createNewFile();
            }else{
                file.delete();
            }
            file.createNewFile();
            Writer fileWriter = new FileWriter(file); 
            fileWriter.write(result);
            fileWriter.close();
            return result;   
        } catch (Exception e) {    
            e.printStackTrace();    
        }    
        return null;    
    }    
    
    
    
    public static void main(String[] args) {    
        try {    
            URL url = new URL("http", "www.tmall.com", -1, "");   
            System.out.println(getHttpBody(url, 100000));
        } catch (MalformedURLException e) {    
            e.printStackTrace();    
        }    
    }    
}  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值