Java爬虫(HttpURLConnection)详解

文章目录

  • Java爬虫(HttpURLConnection)详解
    • 一、引言
    • 二、准备工作
      • 1、环境配置
      • 2、理解`HttpURLConnection`
    • 三、发送GET请求
      • 1、创建URL对象
      • 2、打开连接
      • 3、设置请求方法
      • 4、连接并读取响应
      • 5、处理返回的数据
    • 四、发送POST请求
      • 1、设置输出
      • 2、发送请求体
      • 3、读取响应
    • 五、设置请求头
    • 六、处理超时
    • 七、使用代理
    • 八、HTTPS请求
    • 九、总结

Java爬虫(HttpURLConnection)详解

一、引言

在Java编程中,网络爬虫是一种自动获取网页内容的程序。HttpURLConnection作为Java标准库中的一个类,提供了一种简单的方式来发送HTTP请求并接收响应。本文将详细介绍如何使用HttpURLConnection来实现基本的网络爬虫功能,包括发送GET和POST请求、设置请求头、处理超时以及使用代理和HTTPS,同时也会涉及到如何处理返回的数据。

二、准备工作

1、环境配置

在开始之前,确保你的Java开发环境已经搭建好。对于HttpURLConnection不需要额外的依赖,因为它是Java标准库的一部分。如果你使用的是IDE(如IntelliJ IDEA或Eclipse),确保你的项目已经正确配置。

2、理解HttpURLConnection

HttpURLConnection继承自URLConnection,专门用于处理HTTP协议的连接。它提供了设置请求方法、管理请求头和读取响应等功能。

三、发送GET请求

1、创建URL对象

首先,我们需要创建一个URL对象,它代表了我们想要请求的网页地址。

URL url = new URL("http://www.example.com");

2、打开连接

通过URL对象的openConnection方法,我们可以打开一个到指定URL的连接。

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

3、设置请求方法

对于GET请求,我们通常不需要设置请求体,但需要设置DoInputtrue以允许读取响应。

connection.setDoInput(true);
connection.setRequestMethod("GET");

4、连接并读取响应

连接到服务器并读取响应体。

connection.connect();
if (HttpURLConnection.HTTP_OK == connection.getResponseCode()) {BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));StringBuilder response = new StringBuilder();String readLine;while (null != (readLine = bufferedReader.readLine())) {response.append(readLine);}bufferedReader.close();// 处理返回的数据handleResponse(response.toString());
}

5、处理返回的数据

private static void handleResponse(String response) {// 这里可以根据需要对返回的数据进行处理// 例如,解析HTML、JSON等System.out.println("Response from server: " + response);
}

四、发送POST请求

1、设置输出

对于POST请求,我们需要设置DoOutputtrue以允许发送请求体。

connection.setDoOutput(true);

2、发送请求体

将请求参数编码为字节流并发送。

String params = "param1=value1&param2=value2";
byte[] bytes = params.getBytes(StandardCharsets.UTF_8);
connection.getOutputStream().write(bytes);

3、读取响应

与GET请求类似,我们读取服务器的响应。

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
StringBuilder response = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {response.append(line);
}
System.out.println(response.toString());
bufferedReader.close();
// 处理返回的数据
handleResponse(response.toString());

五、设置请求头

在发送请求之前,我们可以通过setRequestProperty方法设置请求头。

connection.setRequestProperty("User-Agent", "Mozilla/5.0");

六、处理超时

HttpURLConnection允许我们设置连接超时和读取超时。

connection.setConnectTimeout(10000); // 10秒
connection.setReadTimeout(10000);   // 10秒

七、使用代理

如果需要通过代理服务器发送请求,可以创建一个Proxy对象并将其传递给openConnection方法。

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy.example.com", 8080));
HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxy);

八、HTTPS请求

对于HTTPS请求,我们可能需要处理SSL证书问题。以下是一个示例,展示如何信任所有证书。

TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {public X509Certificate[] getAcceptedIssuers() { return null; }public void checkClientTrusted(X509Certificate[] certs, String authType) { }public void checkServerTrusted(X509Certificate[] certs, String authType) { }
}};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

九、总结

通过本文,我们学习了如何使用HttpURLConnection来实现基本的网络爬虫功能。这包括了发送GET和POST请求、设置请求头、处理超时以及使用代理和HTTPS,同时也会涉及到如何处理返回的数据。这些技能对于任何需要与Web服务交互的Java开发者来说都是基础且重要的。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • Java爬虫 - URLConnection与HttpURLConnection

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/472643.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用户自定义IP核——ZYNQ学习笔记6

一、试验任务 通过自定义一个 LED IP 核,通过 PS 端的程序来控制底板上 PL 端 LED1 呈现呼吸 灯的效果,并且 PS 可以通过 AXI 接口来控制呼吸灯的开关和呼吸的频率。 二、创建IP核 三、创建工程,调用IP #include "stdio.h" #includ…

Elasticsearch 8.16.0:革新大数据搜索的新利器

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

python:用 sklearn 构建 K-Means 聚类模型

pip install scikit-learn 或者 直接用 Anaconda3 sklearn 提供了 preprocessing 数据预处理模块、cluster 聚类模型、manifold.TSNE 数据降维模块。 编写 test_sklearn_3.py 如下 # -*- coding: utf-8 -*- """ 使用 sklearn 构建 K-Means 聚类模型 "&…

【大数据学习 | HBASE高级】hive操作hbase

一般在查询hbase的数据的时候我们可以直接使用hbase的命令行或者是api进行查询就行了,但是在日常的计算过程中我们一般都不是为了查询,都是在查询的基础上进行二次计算,所以使用hbase的命令是没有办法进行数据计算的,并且对于hbas…

贴代码框架PasteForm特性介绍之markdown和richtext

简介 PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管…

ServletConfig、ServletContext、HttpServletRequest与HttpServletResponse常见API

目录 一、ServletConfig 二、ServletContext 三、ServletContext其他重要API (一)获取文件路径和上下文 (二)域对象的相关API 四、HttpServletRequest常见API (一)获取请求行/头信息相关 (二)获得请求参数相关 五、HttpServletResponse常见API 一、ServletConfig Se…

MySQL缓存使用率超过80%的解决方法

MySQL缓存使用率超过80%的解决方法 一、识别缓存使用率过高的问题1.1 使用SHOW GLOBAL STATUS命令监控1.2 监控其他相关指标二、分析缓存使用率过高的原因2.1 数据量增长2.2 查询模式变化2.3 配置不当三、解决缓存使用率过高的方法3.1 调整Buffer Pool大小3.1.1 计算合理的Buff…

新手教学系列——善用 VSCode 工作区,让开发更高效

引言 作为一名开发者,你是否曾经在项目中频繁地切换不同文件夹,打开无数个 VSCode 窗口?特别是当你同时参与多个项目或者处理多个模块时,这种情况更是家常便饭。很快,你的任务栏上挤满了 VSCode 的小图标,切换起来手忙脚乱,工作效率直线下降。这时候,你可能会问:“有…

springboot004基于springboot004网页时装购物系统(源码+包运行+LW+技术指导)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

丹摩征文活动 |【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解

前言 🌟🌟本期讲解关于HTMLCSSJavaScript的基础知识,小编带领大家简单过一遍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 …

进程信号

目录 信号入门 1. 生活角度的信号 2. 技术应用角度的信号 3. 注意 4. 信号概念 5. 用kill -l命令可以察看系统定义的信号列表 6. 信号处理常见方式概览 产生信号 1. 通过终端按键产生信号 Core Dump 2. 调用系统函数向进程发信号 3. 由软件条件产生信号 4. 硬件异…

【链路层】空口数据包详解(4):数据物理通道协议数据单元(PDU)

目录 一、概述 1.1. 头部(Header)结构 1.2. MIC字段的情况说明 1.3. 有效载荷(Payload)格式与LLID字段的关联 二、LL Data PDU 2.1. 定义与用途 2.2. 头部字段设置 2.3. 空PDU(Empty PDU ) 2.4. 数…

使用 Web Search 插件扩展 GitHub Copilot 问答

GitHub Copilot 是一个由 GitHub 和 OpenAI 合作开发的人工智能代码提示工具。它可以根据上下文提示代码,还可以回答各种技术相关的问题。但是 Copilot 本身不能回答非技术类型的问题。为了扩展 Copilot 的功能,微软发布了一个名为 Web Search 的插件&am…

24 年第十届数维杯国际数模竞赛赛题浅析

本次万众瞩目的数维杯国际大学生数学建模赛题已正式出炉,无论是赛题难度还是认可度,该比赛都是数模届的独一档,含金量极高,可以用于综测加分、保研、简历添彩等各方面。考虑到大家解题实属不易,为了帮助大家取得好成绩…

无人机检测车辆——多目标检测

目录 YOLOv3(You Only Look Once version 3)简介 YOLOv3 的主要特点 YOLOv3 的结构 1. 特征提取网络(Backbone) 2. 检测头(Head) 3. 输出层 YOLOv3 损失函数 YOLOv3 的优势 YOLOv3 的应用 YOLOv3…

ThriveX 博客管理系统前后端项目部署教程

前端 前端项目地址:https://github.com/LiuYuYang01/ThriveX-Blog 控制端项目地址:https://github.com/LiuYuYang01/ThriveX-Admin Vercel 首先以 Vercel 进行部署,两种方式部署都是一样的,我们以前端项目进行演示 首先我们先…

python的matplotlib实现数据分析绘图

目录 需求 效果 数据分析绘图示例 代码解释 运行结果 需求 分析一个班级中学生成绩分布,并绘图 效果 数据分析绘图示例 import matplotlib.pyplot as plt import numpy as np# 假设的学生成绩数据 np.random.seed(0) # 设置随机种子以确保结果可复现 score…

计算机网络 (3)计算机网络的性能

一、计算机网络性能指标 速率: 速率是计算机网络中最重要的性能指标之一,它指的是数据的传送速率,也称为数据率(Data Rate)或比特率(Bit Rate)。速率的单位是比特/秒(bit/s&#xff…

MySQL Online DDL

文章目录 1. 在线DDL的优势2. 支持的DDL操作3. 在线DDL的原理4. Online DDL的操作流程1. 准备阶段(Prepare phase)2. 拷贝阶段(Copy phase)3. 应用阶段(Apply phase)4. 替换阶段(Swap phase&…

SwanLab安装教程

SwanLab是一款开源、轻量级的AI实验跟踪工具,提供了一个跟踪、比较、和协作实验的平台,旨在加速AI研发团队100倍的研发效率。 其提供了友好的API和漂亮的界面,结合了超参数跟踪、指标记录、在线协作、实验链接分享、实时消息通知等功能&…