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

  1. package cn.qlq.craw.Jsoup;
  2.  
  3. import java.io.File;
  4. import java.io.FileWriter;
  5. import java.io.Writer;
  6. import java.net.MalformedURLException;
  7. import java.net.URL;
  8. import java.security.SecureRandom;
  9. import java.security.cert.CertificateException;
  10. import java.security.cert.X509Certificate;
  11. import java.util.Map;
  12.  
  13. import javax.net.ssl.HostnameVerifier;
  14. import javax.net.ssl.HttpsURLConnection;
  15. import javax.net.ssl.SSLContext;
  16. import javax.net.ssl.SSLSession;
  17. import javax.net.ssl.X509TrustManager;
  18.  
  19. import org.jsoup.Connection;
  20. import org.jsoup.Jsoup;
  21. import org.jsoup.helper.HttpConnection;
  22. import org.jsoup.nodes.Document;
  23.  
  24. public class HttpCommonUtil {
  25.  
  26. public static void trustEveryone() {
  27. try {
  28. HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
  29. public boolean verify(String hostname, SSLSession session) {
  30. return true;
  31. }
  32. });
  33.  
  34. SSLContext context = SSLContext.getInstance("TLS");
  35. context.init(null, new X509TrustManager[] { new X509TrustManager() {
  36. public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
  37. }
  38.  
  39. public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
  40. }
  41.  
  42. public X509Certificate[] getAcceptedIssuers() {
  43. return new X509Certificate[0];
  44. }
  45. } }, new SecureRandom());
  46. HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
  47. } catch (Exception e) {
  48. e.printStackTrace();
  49. }
  50. }
  51.  
  52. public static Object getHttpHeaders(URL url, int timeout) {
  53. try {
  54. trustEveryone();
  55. Connection conn = HttpConnection.connect(url);
  56. conn.timeout(timeout);
  57. conn.header("Accept-Encoding", "gzip,deflate,sdch");
  58. conn.header("Connection", "close");
  59. conn.get();
  60. //String result=conn.response().body();
  61. Map<String, String> result = conn.response().headers();
  62. result.put("title", conn.response().parse().title());
  63. return result;
  64. } catch (Exception e) {
  65. e.printStackTrace();
  66. }
  67. return null;
  68. }
  69.  
  70. public static Object getHttpBody(URL url, int timeout) {
  71. try {
  72. trustEveryone();
  73. Connection conn = HttpConnection.connect(url);
  74. conn.timeout(timeout);
  75. conn.header("Accept-Encoding", "gzip,deflate,sdch");
  76. conn.header("Connection", "close");
  77. conn.get();
  78. //String result=conn.response().body();
  79. // String result = conn.response().body();
  80. String result = conn.response().body();
  81. File file = new File("C:\\Users\\liqiang\\Desktop\\实习\\python\\javaCrawPicture\\tianmao.html");
  82. if(!file.exists()){
  83. file.createNewFile();
  84. }else{
  85. file.delete();
  86. }
  87. file.createNewFile();
  88. Writer fileWriter = new FileWriter(file);
  89. fileWriter.write(result);
  90. fileWriter.close();
  91. return result;
  92. } catch (Exception e) {
  93. e.printStackTrace();
  94. }
  95. return null;
  96. }
  97.  
  98. public static void main(String[] args) {
  99. try {
  100. URL url = new URL("http", "www.tmall.com", -1, "");
  101. System.out.println(getHttpBody(url, 100000));
  102. } catch (MalformedURLException e) {
  103. e.printStackTrace();
  104. }
  105. }
  106. }

一个爬取https和http通用的工具类(JDK自带的URL的用法)的更多相关文章

  1. 用Python实现一个爬取XX大学电费通知的小脚本

    内容简要 1分析网站 2简单爬取 3进阶自定义爬取 4保存进数据库 学校基础设施太差,宿舍电量过低提醒虽然贴在楼下,但是作为低头一族,经常忘记看提醒导致宿舍酣战时突然黑屏,为了避免这种尴尬的场景以及强 ...

  2. Fiddler抓取https请求 & Fiddler抓包工具常用功能详解

    Fiddler抓取https请求 & Fiddler抓包工具常用功能详解   先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问 ...

  3. 免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作简易流量爬虫

    前言 我们之前的爬虫都是模拟成浏览器后直接爬取,并没有动态设置IP代理以及UserAgent标识,本文记录免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作 ...

  4. 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil

    封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,代码比较简单,主要是把MongoTarget的配置.FileTarget的配置集成到类中,同时利用缓存依赖来判断是否需要重新创 ...

  5. 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,nloglogutil

    封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,代码比较简单,主要是把MongoTarget的配置.FileTarget的配置集成到类中,同时利用缓存依赖来判断是否需要重新创 ...

  6. liferay总结的通用的工具类

    在写增删改查的时候,自己动手写了几个通用的工具类,这几个通用的工具类也是基于API写的 第一个是liferay中的分页.跟我们做普通的web开发,分页是一样的首先需要建立一个分页的实体的类 packa ...

  7. Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

    Go/Python/Erlang编程语言对比分析及示例   本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...

  8. 重复造轮子,编写一个轻量级的异步写日志的实用工具类(LogAsyncWriter)

    一说到写日志,大家可能推荐一堆的开源日志框架,如:Log4Net.NLog,这些日志框架确实也不错,比较强大也比较灵活,但也正因为又强大又灵活,导致我们使用他们时需要引用一些DLL,同时还要学习各种用 ...

  9. 一个使用命令行编译Android项目的工具类

    一个使用命令行编译Android项目的工具类 简单介绍 编译apk项目须要使用的几个工具,基本都在sdk中,它们各自是(Windows系统): 1.aapt.exe 资源打包工具 2.android. ...

随机推荐

  1. java 数据结构与算法 之查找法

    一.二分查找法 二分查找就是将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找:如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素. @Test public ...

  2. Java7 Fork-Join 框架:任务切分,并行处理

    概要 现代的计算机已经向多CPU方向发展,即使是普通的PC,甚至现在的智能手机.多核处理器已被广泛应用.在未来,处理器的核心数将会发展的越来越多.虽然硬件上的多核CPU已经十分成熟,但是很多应用程序并 ...

  3. 对Spark2.2.0文档的学习1-Cluster Mode Overview

    Cluster Mode Overview Link:http://spark.apache.org/docs/2.2.0/cluster-overview.html Spark应用(Applicat ...

  4. 【JavaScript&jQuery】单选框radio,复选框checkbox,下拉选择框select

    HTML: <!DOCTYPE html> <html> <head> <title></title> <meta charset=& ...

  5. 【Java】JDBCUtil模板

    package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; ...

  6. Contest 6

    A:容易发现这要求所有子集中元素的最高位1的位置相同,并且满足这个条件也是一定合法的.统计一下即可. #include<iostream> #include<cstdio> # ...

  7. vue项目 axios封装第二弹

    import axios from "axios"; import qs from "qs"; import { Message, MessageBox } f ...

  8. C++解析(15):二阶构造模式

    0.目录 1.构造函数与半成品对象 2.二阶构造 3.小结 1.构造函数与半成品对象 关于构造函数: 类的构造函数用于对象的初始化 构造函数与类同名并且没有返回值 构造函数在对象定义时自动被调用 问题 ...

  9. 【BZOJ1565】【NOI2009】植物大战僵尸(网络流)

    [BZOJ1565][NOI2009]植物大战僵尸(网络流) 题面 BZOJ 洛谷 题解 做了这么多神仙题,终于有一道能够凭借自己智商能够想出来的题目了.... 好感动. 这就是一个比较裸的最小割模型 ...

  10. 洛谷P4606 [SDOI2018]战略游戏 【圆方树 + 虚树】

    题目链接 洛谷P4606 双倍经验:弱化版 题解 两点之间必经的点就是圆方树上两点之间的圆点 所以只需建出圆方树 每次询问建出虚树,统计一下虚树边上有多少圆点即可 还要讨论一下经不经过根\(1\)的情 ...