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请求,我们通常不需要设置请求体,但需要设置DoInput
为true
以允许读取响应。
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请求,我们需要设置DoOutput
为true
以允许发送请求体。
connection.setDoOutput(true);
2、发送请求体
将请求参数编码为字节流并发送。
String params = "param1=value1¶m2=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
相关文章:
Java爬虫(HttpURLConnection)详解
文章目录 Java爬虫(HttpURLConnection)详解一、引言二、准备工作1、环境配置2、理解HttpURLConnection 三、发送GET请求1、创建URL对象2、打开连接3、设置请求方法4、连接并读取响应5、处理返回的数据 四、发送POST请求1、设置输出2、发送请求体3、读取响…...
基于STM32的智能停车管理系统设计
引言 随着城市汽车保有量的增加,停车难问题日益严重,传统停车管理方式效率低下,无法满足现代化需求。为了解决这一问题,本项目基于STM32微控制器设计了一种智能停车管理系统。系统能够通过传感器实时监测停车位的使用情况&#x…...

【循环神经网络】
循环神经网络(Recurrent Neural Network, RNN)是一类用于处理序列数据的神经网络,擅长处理具有时间依赖或顺序结构的数据。RNN通过循环连接的结构,使得当前时刻的输出可以受之前时刻信息的影响,因此被广泛应用于自然语…...

优选算法 - 4 ( 链表 哈希表 字符串 9000 字详解 )
一:链表 1.1 链表常用技巧和操作总结 1.2 两数相加 题目链接:两数相加 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* …...
CTF-RE 从0到N: windows反调试-获取Process Environment Block(PEB)信息来检测调试
在Windows操作系统中,Process Environment Block (PEB,进程环境块) 是一个包含特定进程信息的数据结构。它可以被用于反调试中 如何获取PEB指针? 在Windows操作系统中,获取PEB指针的常见方法主要有以下几种。: 1. 使…...
STM32开发基础阶段复习
1.使用寄存器方式点亮LED灯的三个步骤是什么? 首先使能RCC_APB2ENR(外设时钟使能寄存器)对应的GPIO端口时钟,即给LED这个外设使能时钟。 配置对应GPIO端口,配置为通用推挽输出,输出速度可以选择最大。 将GPIO端口输…...
搜维尔科技:SenseGlove触觉反馈手套开箱+场景测试
搜维尔科技:SenseGlove触觉反馈手套开箱场景测试 SenseGlove触觉反馈手套开箱场景测试...

在k8s上部署Crunchy Postgres for Kubernetes
目录 一、前言二、安装Crunchy Postgres for Kubernetes三、部署一个简单的postgres集群四、增加pgbouncer五、数据备份六、备份恢复七、postgres配置参数七、数据导入 一、前言 Crunchy Postgres可以帮助我们在k8s上快速部署一个高可用、具有自动备份和恢复功能的postgres集群…...
大模型(LLMs)进阶篇
大模型(LLMs)进阶篇 一、什么是生成式大模型? 生成式大模型(一般简称大模型LLMs)是指能用于创作新内容,例如文本、图片、音频以及视频的一类深度学习模型。相比普通深度学习模型,主要有两点不…...

近几年新笔记本重装系统方法及一些注意事项
新笔记本怎么重装系统? 近几年的新笔记本默认开启了raid on模式或vmd选项,安装过程中会遇到问题,新笔记本电脑重装自带的系统建议采用u盘方式安装,默认新笔记本有bitlocker加密机制,如果采用一键重装系统或硬盘方式安装…...

小程序19-微信小程序的样式和组件介绍
在小程序中不能使用 HTML 标签,也就没有 DOM 和 BOM,CSS 也仅支持部分选择器 小程序提供了 WXML 进行页面结构的编写,WXSS 进行页面的样式编写 WXML 提供了 view、text、image、navigator等标签构建页面结构,小程序中标签称为组件…...

Chrome 浏览器开启打印模式
打开开发者工具ctrl shift p输入print 找到 Emulate CSS print media type...

Git回到某个分支的某次提交
1.切换到需要操作的分支(<branch-name>是分支名称)。 命令如下: git checkout <branch-name> 2.获取代码的提交记录 。命令如下: git log 按q退出当前命令对话。 获取到某次提交或者合并的hash值(下文…...

[前端面试]javascript
js数据类型 简单数据类型 null undefined string number boolean bigint 任意精度的大整数 symbol 创建唯一且不变的值,常用来表示对象属性的唯一标识 复杂数据类型 object,数组,函数,正则,日期等 区别 存储区别 简单数据类型因为其大小固定…...

对象的初步认识
#对象可组织数据(如统计数据的表格) 下以表格为例 1.设计一个表格:(None为初始值设定,表示无) class a; ##1None ##2None 2.创建一个表格 变量a 3.对对象的属性进行赋值 变量.##1"##" 变量.##2"##" 4.查询对象中…...

layui 输入框带清空图标、分词搜索、关键词高亮
https://andi.cn/page/621858.html...
Vue 3 + TypeScript: 类型安全的前端开发实践
引言 在现代前端开发中,TypeScript 已经成为提升代码质量和开发效率的重要工具。将 Vue 3 与 TypeScript 结合使用,能够为我们的项目带来更好的类型安全性和开发体验。 1. 项目配置 1.1 创建项目 使用 Vue CLI 创建支持 TypeScript 的 Vue 3 项目&am…...

Python爬虫知识体系-----requests-----持续更新
数据科学、数据分析、人工智能必备知识汇总-----Python爬虫-----持续更新:https://blog.csdn.net/grd_java/article/details/140574349 文章目录 一、安装和基本使用1. 安装2. 基本使用3. response常用属性 二、get请求三、post请求四、代理 一、安装和基本使用 1.…...
Swift的可选绑定(Optional binding)
在Swift中,有一种变量称为可选变量(Optional),具体说明见Swift初步入门。这种变量的值可以存在也可以为空(nil)。在Swift中,可以通过将if语句和赋值语句结合,有条件地展开࿰…...

硬石电机学习2024116
F4 概况 共模抑制线圈作用是滤波 LD3.3是将5v转为芯片用的3.3V CH340用于板子和电脑通讯 光耦隔离保护主控 16M的外部flash 1M的芯片内部的flash 10kHZ高速的光耦隔离,1M的低俗光耦隔离 F4 stm32概况 stm8和51都是一次可以运算处理8位的 32表示一次处理32位…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...