爬虫基础(一)HTTP协议 :请求与响应
前言
爬虫需要基础知识,HTTP协议只是个开始,除此之外还有很多,我们慢慢来记录。
今天的HTTP协议,会有助于我们更好的了解网络。
一、什么是HTTP协议
(1)定义
HTTP(超文本传输协议,HyperText Transfer Protocol)是用于在网络上进行数据通信的协议,尤其是用于网页的传输。
简单来说,就是专门把超文本数据从网络上传输到本地浏览器上的一个协议
我们也经常见它,比如网站前面的前缀:

当然,上图有些不太正确,但 HTTPS 其实是HTTP的升级版,二者其实差不太多。
(2)HTTPS
那么HTTPS到底有什么不同呢?
HTTPS的全称是Hypertext Transfer Protocol Secure。相较于HTTP多了一个Secure
所以我们应该知道,哪里升级了。
简单来说,就是在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性
Tips:HTTPS 主要由两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。(了解即可)
(3)URI和URL
还有些专业术语,诸如URI和URL :
- URI(统一资源标识符):用于标识资源的字符串。
- URL(统一资源定位符):一种特定类型的URI,用于定位资源并提供如何访问这些资源的信息。
- URN:统一资源名称
顾名思义,URI让我们可以唯一标识一个资源。URL则让我们可以去定位一个资源。
比如一个网址https://www.example.com
我们可以把这整个链接叫做URI,因为这个网址标识了一个资源。
而这个链接,也叫做URL,因为这个网址的链接也同样定位了一个资源。
那他们怎么区分呢?
URI包括了URL,因为URI=URL和URN。
比如,一本书的编号111,这个编号就是URN。
所以该编号也可以叫做URI,因为它同样标识了一个资源,但是它不能叫做URL了,因为该编号并没有定位这个资源,我们只知道它叫什么,却不知道去哪里可以找到他。
二、HTTP请求过程
(1)请求过程
我们在网页最上面的导航栏上输入网址,按下回车,然后出现一个新网页。
这个过程就是浏览器向某网站发送了一个请求,然后网站进行处理,最后网站回馈一个响应,浏览器解析后展现出来。
(2)相关名词介绍
(注:以下名词了解即可)
为了更好的说明该过程,我们可以鼠标右键用检查功能来具体显示一下请求和响应:

然后切换到Network面板,再刷新一下网页:

即可看到很多行的东西,每一行就代表一次 请求-响应 过程
我们仔细观察这个界面的各列:

其中,各列含义如下
- Name:请求界面的名称
- Status:响应状态码,通过状态码显示,可以判定响应是否正常。
- Type:请求文档的类型。
- Initiator:请求源,用来标记是哪个对象或进程发起的请求。
- Size:请求资源大小(如果是缓存中提取的资源,该列显示from cache)
- Time:从发起请求到获得响应所花总时间。
- Waterfall:网络请求可视化瀑布流。
- (有时会有Protocol:请求协议类型,http1.1代表HTTP1.1版本,h2代表HTTP2.0版本)
若单击某列,则会显示更详细的信息:

在General部分:
- Request URL :请求的URL
- Request Method:请求方法
- Status Code:响应状态码
- Remote Address:远程服务器的地址和端口
- Referre Policy:为判别策略
- Response Headers:响应头
- Request Headers:请求头
以上名词可能有些说的不太清楚,现在我们具体来看一看各部分,到底是干什么的
三、请求部分
请求,即Request。
由用户发往服务器的信息。包括四大部分:请求方法、请求网址、请求头、请求体。
(1)请求方法
请求方法,客户端请求服务器时的方式
常见的有两种:GET请求、POST请求
比如:
GET请求:
请求获取指定资源,如请求页面返回内容
当我们在浏览器最上面输入网址并按下回车,这就是发起了GET请求。
POST请求:
向指定资源提交数据,通常用于表单提交或者上传文件。
当我们登陆网站,输入账号密码后,点击提交后,这就是发起了POST请求。
那么二者有什么具体区别呢?
- GET请求的参数包括在URL,POST请求的数据包括在请求体中。
所以如果打开某网站某板块某界面的某图片后,这时我们会在上面的网址中看到该图片的路径,这就是GET请求该图片的参数 - GET请求提交数据最大1024字节,POST请求没有限制。
所以综上,当我们提交账号密码时,最好选择POST,否则GET会将密码显示在网址中暴露哦~
当然除此之外,还有很多请求,不过并不常用,汇总如下:
- GET:请求获取指定资源。GET 请求不应包含请求体,且一般用于获取数据。
- POST:向指定资源提交数据,通常用于表单提交或者上传文件。POST 请求可以包含请求体,用于传送数据。
- PUT:向指定资源上传数据,通常用于更新资源的状态。PUT 请求一般是幂等的,即多次相同的请求会得到相同的结果。
- DELETE:请求删除指定资源。
- PATCH:部分更新指定资源的数据。与 PUT 的区别是,PATCH 只更新资源的一部分,而 PUT 会替换整个资源。
- HEAD:类似 GET 请求,但只获取响应的头部信息,不返回实际的资源数据。
- OPTIONS:请求服务器,询问支持哪些 HTTP 方法。常用于跨域请求中的预检请求。
(2)请求网址
网址格式如下:
协议://主机名:端口号/路径?查询字符串#片段标识符
说明:
- 协议(Scheme):指定访问资源所使用的协议。常见的协议包括:
http或https(超文本传输协议)、
ftp(文件传输协议)、
mailto(用于电子邮件地址)、
file(本地文件) - 主机名(Host):指定资源所在的服务器的域名或 IP 地址。
通常为一个域名,如www.example.com,
或者是 IP 地址,如192.168.1.1。 - 端口号(Port)(可写可不写):指定服务器的端口,通常省略。
默认情况下:http默认端口为 80、https默认端口为 443。
如果指定了非默认端口,则需要在主机名后加上端口号,用冒号分隔,如www.example.com:8080。 - 路径(Path):指定请求资源在服务器上的位置。
例如,/products/123表示访问/products/123这个路径的资源。 - 查询字符串(Query)(可写可不写):以
?开头,包含一个或多个键值对,用于传递参数。
例如,?id=123&name=abc,查询字符串由参数名和值组成,多个参数用&分隔。 - 片段标识符(Fragment)(可写可不写):以
#开头,指向文档中的一个特定位置。
用于指定页面内的某个部分。例如,#section2指向页面的第二个部分。
举个例子:
https://www.example.com:8080/products/123?id=456&color=red#review
解释:
- 协议:
https - 主机名:
www.example.com - 端口号:
8080 - 路径:
/products/123 - 查询字符串:
?id=456&color=red - 片段标识符:
#review
(3)请求头
请求头是 HTTP 请求中的一部分,它包含了关于客户端、请求以及数据的附加信息。
客户端通过它向服务器传递元数据,帮助服务器理解请求的内容、用户的偏好、客户端环境等。
举个例子:
请求头就像你在向别人请求东西时提供的一些附加信息。
假设你在网上买东西,除了告诉商家你想买的产品,还会提供一些其他信息,比如:
你用的是什么设备(是手机还是电脑)
你能接受的商品类型(比如希望商品图片清晰,或者只想看某种品牌的商品)
这些附加信息就像是请求头里的内容,它们帮助商家(服务器)了解你具体的需求,确保你能收到最合适的产品。
所以你要访问一个网页,你的请求头可能包含以下信息:
(注:了解即可)
1. Host
-
指定请求的服务器域名或 IP 地址。从 HTTP/1.1 版本开始,这是必需的头部字段。
-
示例:
Host: www.example.com
2. User-Agent
-
简称UA。表示发送请求的客户端软件类型(如浏览器、操作系统等)。爬虫时加上此部分可以伪装成浏览器。
-
示例:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
3. Accept
-
指定客户端能够处理的响应内容类型。通常用于指定请求的数据格式
-
示例:
Accept: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp,*/*;q=0.8
4. Accept-Language
-
告诉服务器客户端能够理解的语言。例如,可以告诉服务器希望获取中文或英文的内容。
-
示例:
Accept-Language: en-US,en;q=0.5
5. Content-Type
-
仅在请求体中有数据时使用,指定请求体的媒体类型。例如,表单提交时,数据的格式是
application/x-www-form-urlencoded,上传文件时是multipart/form-data。 -
示例:
Content-Type: application/json
-
用于身份验证,携带认证信息,如令牌或基本认证信息。常用于需要用户验证的资源。
-
示例:
Authorization: Bearer <token>
-
客户端向服务器发送的 Cookie 信息,服务器根据该信息识别用户状态(如登录状态)。
-
示例:
Cookie: sessionid=abc123; user=JohnDoe
8. Accept-Encoding
-
告诉服务器客户端支持的编码方式,通常用于压缩响应体。
-
示例:
Accept-Encoding: gzip, deflate, br
9. Connection
-
表示是否保持持久连接,决定在请求完成后是否保持与服务器的连接。
-
示例:
Connection: keep-alive
10. Referer
-
表示来自哪个 URL 的请求,通常用于了解用户访问的来源页面。
-
示例:
Referer: https://www.example.com/previous-page
(4)请求体
请求体是 HTTP 请求中的一部分,主要用于携带客户端发送给服务器的实际数据内容。
可以理解为你在向服务器请求某项服务时,所附带的具体信息或者数据。
举个例子:
如果你填写了一个网上表单,提交了你的个人信息(比如名字、地址、电子邮件等),这些信息就是通过请求体发送到服务器的。
(Tips:对于请求体来说,一般是POST请求的表单数据,对于GET请求,请求体为空)
对于请求头和请求体的区别?
- 请求头:
包含一些附加信息(比如浏览器类型、请求语言、是否有登录状态等)
帮助服务器理解如何处理请求。 - 请求体:
包含实际的数据内容,是请求的核心部分
比如你提交的表单数据、上传的文件等。
四、响应部分
响应,即Response。
由服务器给用户的信息。包括三部分:响应状态码、响应头、响应体。
(1)响应状态码
就像前文所说,这就是根据给出的数字,来判定响应是否正常。
比如,200表示正常、404表示找不到等,都是常见状态码。
下面汇总了常见的状态码及错误原因:
1. 1xx:信息性状态码
这些状态码表示请求已被接收,正在继续处理。
-
100 Continue:表示客户端可以继续发送请求的其余部分(通常用于大文件上传时,客户端先发送请求头,服务器返回 100 状态码,客户端再发送请求体)。
2. 2xx:成功状态码
这些状态码表示请求已成功被处理。
-
200 OK:请求成功,服务器返回请求的资源。
-
201 Created:请求成功,服务器创建了新的资源(通常用于 POST 请求)。
-
204 No Content:请求成功,但服务器没有返回任何内容(常见于删除操作)。
3. 3xx:重定向状态码
这些状态码表示请求需要进一步的操作才能完成(通常是页面重定向)。
-
301 Moved Permanently:请求的资源已被永久移到新的位置,响应中会带有新的 URL。
-
302 Found:请求的资源临时移动到其他位置,客户端会按照新 URL 继续请求。
-
304 Not Modified:资源未修改,客户端可以使用缓存的副本。
4. 4xx:客户端错误状态码
这些状态码表示请求有错误,客户端需要修正请求后再试。
-
400 Bad Request:请求无效,服务器无法理解请求。
-
401 Unauthorized:请求未授权,通常需要提供身份验证(如登录)。
-
403 Forbidden:服务器拒绝请求,即使用户已认证。
-
404 Not Found:请求的资源不存在或无法找到。
-
405 Method Not Allowed:请求方法不被允许(例如,服务器只允许 GET 请求,但客户端使用了 POST 请求)。
5. 5xx:服务器错误状态码
这些状态码表示服务器未能完成有效请求,通常是服务器本身的问题。
-
500 Internal Server Error:服务器遇到错误,无法完成请求。
-
502 Bad Gateway:服务器作为网关或代理时,收到来自上游服务器的无效响应。
-
503 Service Unavailable:服务器暂时无法处理请求,通常是因为服务器超负荷或正在维护。
- 504 Gateway Timeout:服务器作为网关或代理时,未能在规定时间内从上游服务器获取响应。
(2)响应头
响应头是服务器在响应客户端请求时,附加在响应消息中的一些信息。
这些信息主要用于描述服务器的处理结果、返回的数据类型、缓存策略等。
可以理解为服务器对客户端请求的“回馈”信息,告诉客户端服务器的状态、资源类型等。
下面为常用响应头:
-
Content-Type:指定响应体的内容类型(即数据的格式)。例如:
Content-Type: text/html:返回的是 HTML 内容。Content-Type: application/json:返回的是 JSON 格式数据。Content-Type: image/png:返回的是 PNG 图片。
-
Content-Length:表示响应体的大小,以字节为单位
-
Date:返回响应的时间戳,表示服务器响应的日期和时间
-
Server:表示服务器的类型和版本
-
Set-Cookie:服务器向客户端发送的 cookie,用于保存客户端的状态信息。
(3)响应体
响应体是服务器在响应客户端请求时,返回给客户端的实际数据内容。
举个例子:
比如你请求一个网页时,响应体就是返回的 HTML 内容;你请求某个数据接口时,响应体就是返回的 JSON 数据。
如下图所示:

当我们打开Preview中,看到的蓝框内的内容,就是响应体。
在爬虫时,我们要做的,就是解析它!!!
它的常见内容有:
-
HTML 页面:如果你请求一个网页,响应体通常是该网页的 HTML 内容。
例如,浏览器向服务器请求https://example.com,服务器返回一个 HTML 页面,响应体就是网页的 HTML 代码。 -
JSON 数据:在许多现代 Web 应用中,通常使用 JSON 格式。
例如,发送一个 GET 请求到一个数据接口,返回的响应体是 JSON 数据:
{ "name": "John Doe", "age": 30 } -
图片或文件:如果请求的是一个文件(如图片、视频等),响应体包含文件的内容。
例如,浏览器请求一个 PNG 图片,服务器返回响应体,其中包含该图片的二进制数据。 -
文本内容:如果请求的是纯文本数据,响应体可能直接是一些文本内容。
相关文章:
爬虫基础(一)HTTP协议 :请求与响应
前言 爬虫需要基础知识,HTTP协议只是个开始,除此之外还有很多,我们慢慢来记录。 今天的HTTP协议,会有助于我们更好的了解网络。 一、什么是HTTP协议 (1)定义 HTTP(超文本传输协议ÿ…...
视频拼接,拼接时长版本
目录 视频较长,分辨率较大,这个效果很好,不耗用内存 ffmpeg imageio,适合视频较短 视频较长,分辨率较大,这个效果很好,不耗用内存 ffmpeg import subprocess import glob import os from nats…...
【字符串两大注意事项】
表达字符串的方式 1.双引号:"hello world" 2.字符指针:char* ptr "hello world" 3.字符数组:char arr[] "hello world"辨析 项目表示方式代表含义内存分布1“hello world”字符串字面量字符串常量就是数据…...
【4Day创客实践入门教程】Day1 工具箱构建——开发环境的构建
Day1 工具箱构建——开发环境的构建 目录 Day1 工具箱构建——开发环境的构建1.元件选型2.准备工具3. 开发板准备焊接排针具体步骤注意事项与技巧 4. 软件环境配置与固件烧录Thonny IDE软件环境配置配置Micropython环境与烧录固件**问题:**买的是4M/16M,…...
如何让一个用户具备创建审批流程的权限
最近碰到一个问题,两个sandbox,照理用户的权限应该是一样的,结果开发环境里面我可以左右的做各种管理工作,但是使用change set上传后,另一个环境的同一个用户,没有相对于的权限,权限不足。 当时…...
Docker Hello World
Docker Hello World 引言 Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及应用的依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。本文将带领您从零开始,学习如何使用 Docker 运行一个简单的 "Hello World"…...
本地部署DeepSeek开源多模态大模型Janus-Pro-7B实操
本地部署DeepSeek开源多模态大模型Janus-Pro-7B实操 Janus-Pro-7B介绍 Janus-Pro-7B 是由 DeepSeek 开发的多模态 AI 模型,它在理解和生成方面取得了显著的进步。这意味着它不仅可以处理文本,还可以处理图像等其他模态的信息。 模型主要特点:Permalink…...
ITS290F Human Computer Interaction
ITS290F Human Computer Interaction & User Experience Design Lab 1. Introduction to CodePen What you’ll learn in this lab: • Understanding CodePen • Creating a front-end page • Using Google form to submit your lab work CodePen is a cloud-based in…...
【详细教程】如何在Mac部署Deepseek R1?
DeepSeek是目前最火的国产大模型,官方App用户太多服务经常出现卡顿,部署一个本地DeepSeek R1可以方便使用。 1.系统最低要求 macOS 11 Big Sur 或更新 2.下载ollama https://ollama.com/ 3.安装DeepSeek R1 打开终端 运行命令 ollama run deepseek-…...
DeepSeek能下围棋吗?(续)
休息了一下,接着琢磨围棋,其实前面一篇里的规则有个漏洞的,就是邻居关系定义有问题,先回顾一下游戏规则: 游戏规则 定义: 1.数字对,是指两个1到9之间的整数组成的有序集合。可与记为(m,n)&…...
网络安全技术简介
网络安全技术简介 随着信息技术的迅猛发展,互联网已经成为人们日常生活和工作中不可或缺的一部分。与此同时,网络安全问题也日益凸显,成为全球关注的焦点。无论是个人隐私泄露、企业数据被盗取还是国家信息安全受到威胁,都与网络…...
Keepalived高可用集群企业应用实例一
一、实现master/slave的keepalived单主架构 1.master配置 global_defs { notification_email { 2676401238qq.com } notification_email_from keepalivedKA1.xiao.org smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id ka1.xiao.org vrrp_skip_check_adv_addr vrr…...
愿景:做机器视觉行业的颠覆者
一个愿景,两场战斗,专注制胜。 一个愿景:做机器视觉行业的颠覆者。 我给自己创业,立一个大的愿景:做机器视觉行业的颠覆者。 两场战斗:无监督-大模型 上半场,无监督。2025-2030,共五…...
【产品经理学习案例——AI翻译棒出海业务】
前言: 本文主要讲述了硬件产品在出海过程中,翻译质量、翻译速度和本地化落地策略是硬件产品规划需要考虑的核心因素。针对不同国家,需要优化翻译质量和算法,关注市场需求和文化差异,以便更好地满足当地用户的需求。同…...
算法总结-数组/字符串
文章目录 1.合并两个有序数组1.答案2.思路 2.移除元素1.答案2.思路 3.删除有序数组中的重复项 II1.答案2.思路 4.多数元素1.答案2.思路 5.轮转数组1.答案2.思路 6.买卖股票的最佳时机1.答案2.思路 7.买卖股票的最佳时机 II1.答案2.思路 8.跳跃游戏1.答案2.思路 9.H 指数1.答案2…...
被裁与人生的意义--春节随想
还有两个月就要被迫离开工作了十多年的公司了,不过有幸安安稳稳的过了一个春节,很知足! 我是最后一批要离开的,一百多号同事都没“活到”蛇年。看着一批批仁人志士被“秋后斩首”,马上轮到我们十来个,个中滋味很难言清…...
Linux解决输入法卡死问题
说明:在Ubuntu系统中,如果您需要重启输入法服务(比如fcitx或ibus),您可以按照以下步骤操作。这些步骤适用于大多数基于Ubuntu的发行版,例如Ubuntu、Linux Mint等。 一、重启Fcitx输入法服务 1、使用Ctrl …...
2501,编写dll
DLL的优点 简单的说,dll有以下几个优点: 1)节省内存.同一个软件模块,若是源码重用,则会在不同可执行程序中编译,同时运行这些exe时,会在内存中重复加载这些模块的二进制码. 如果使用dll,则只在内存中加载一次,所有使用该dll的进程会共享此块内存(当然,每个进程会复制一份的d…...
4-图像梯度计算
文章目录 4.图像梯度计算(1)Sobel算子(2)梯度计算方法(3)Scharr与Laplacian算子4.图像梯度计算 (1)Sobel算子 图像梯度-Sobel算子 Sobel算子是一种经典的图像边缘检测算子,广泛应用于图像处理和计算机视觉领域。以下是关于Sobel算子的详细介绍: 基本原理 Sobel算子…...
【算法设计与分析】实验5:贪心算法—装载及背包问题
目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 掌握贪心算法求解问题的思想;针对不同问题,会利用贪心算法进行问题建模、求解以及时间复杂度分析&#x…...
从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(协议层封装)
目录 协议层设计,以IIC为例子 关于软硬件IIC 设计的一些原则 完成协议层的抽象 刨析我们的原理 如何完成我们的抽象 插入几个C语言小技巧 完成软件IIC通信 开始我们的IIC通信 结束我们的IIC通信 发送一个字节 (重要)完成命令传递和…...
【自学笔记】计算机网络的重点知识点-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 计算机网络重点知识点一、计算机网络概述二、网络分类三、网络性能指标四、网络协议与体系结构五、数据交换方式六、物理层与数据链路层七、网络层与运输层八、应用…...
Java中的getInterfaces()方法:使用与原理详解
在Java中,反射(Reflection)是一个强大的工具,它允许程序在运行时动态地获取类的信息并操作类的属性和方法。getInterfaces()方法是Java反射API中的一个重要方法,用于获取类或接口直接实现的接口。本文将深入探讨getInt…...
MySQL为什么默认引擎是InnoDB ?
大家好,我是锋哥。今天分享关于【MySQL为什么默认引擎是InnoDB ?】面试题。希望对大家有帮助; MySQL为什么默认引擎是InnoDB ? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 默认引擎是 InnoDB,主要…...
玄武计划--干中学,知行合一
作为开发者转型安全领域有一定优势,但需要系统学习网络安全知识。以下是针对你的情况(Java背景 + 快速入门)的实战导向学习路径,分为基础、工具、漏洞利用和进阶四个阶段: 一、基础准备(1-2周) 网络协议与渗透基础 重点协议:深入理解 TCP/IP、HTTP/HTTPS、DNS、SMTP,用…...
【AIGC专栏】AI在自然语言中的应用场景
ChatGPT出来以后,突然间整个世界都非常的为之一惊。很多人大喊AI即将读懂人类,虽然这是一句夸大其词的话,但是经过未来几十年的迭代,ChatGPT会变成什么样我们还真的很难说。在当前生成式内容来说,ChatGPT毫无疑问在当前…...
3D gaussian splatting 源码剖析与demo验证
0.概述 本文对最原始的3D GS源码进行剖析,逐段分析其中的主要代码模块,结合其原理加深理解,同时结合demo演示给出具体的验证。 1.流程图 2.源码剖析 3.验证与实现...
【cocos官方案例改】跳跃牢猫
自制游戏【跳跃牢烟】 案例解析 案例需求,点击鼠标控制白块左右。 资源管理器部分 在body创建一个2d精灵用作玩家。 在地下在创建一个2d精灵用来代表地面。 在body下挂在脚本。 全部脚本如下 (在二次进行复刻时候,发现把代码复制上去无法…...
docker安装nacos2.2.4详解(含:nacos容器启动参数、环境变量、常见问题整理)
一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull nacos:2.2.4 2、离线包下载 两种方式: 方式一: -)在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -)导出 # 导出镜像到…...
使用 postman 测试思源笔记接口
思源笔记 API 权鉴 官方文档-中文:https://github.com/siyuan-note/siyuan/blob/master/API_zh_CN.md 权鉴相关介绍截图: 对应的xxx,在软件中查看 如上图:在每次发送 API 请求时,需要在 Header 中添加 以下键值对&a…...
