第一节 请求与响应

2023-05-16

请求

由客户端发往服务器,分为四个部分:请求头,请求方法,请求网址URL,请求体。当我们在浏览器中输入一个网址或点击一个链接时,浏览器会向服务器发送请求,请求获取指定的资源,比如 HTML 页面、CSS 文件、JavaScript 文件、图片、视频等等。
网络请求过程通常包括以下几个步骤:

  1. DNS 查询:浏览器首先需要将域名解析为 IP 地址,这个过程叫做 DNS 查询。
  2. 建立连接:浏览器与服务器建立连接,可以是 HTTP 连接、HTTPS 连接、WebSocket 连接等。
  3. 发送请求:浏览器向服务器发送请求,请求方式包括 GET、POST、PUT、DELETE 等。
  4. 接收响应:服务器处理请求后,会返回一个响应,包括状态码、响应头和响应体等信息。
  5. 处理响应:浏览器接收到响应后,根据响应内容进行相应的处理,比如渲染 HTML 页面、显示图片或视频等。
    通过网络请求,客户端可以与服务器交互,获取所需的数据和资源。在前端开发中,我们通常使用 AJAX 或 Fetch 等技术来发送网络请求,从而实现异步加载数据、动态更新页面等功能。

请求方法

在 HTTP 协议中,请求方法指的是客户端向服务器发起请求的方式。常见的 HTTP 请求方法有 GET、POST、PUT、DELETE 等。
GET 和 POST 是最常用的 HTTP 请求方法之一,它们的主要区别在于:

  1. 参数传递方式不同:GET 请求将参数编码在 URL 中,而 POST 请求则将参数放在请求体中。
  2. 请求的语义不同:GET 请求用于获取资源,通常不应该产生副作用(即不会改变资源状态),而 POST 请求则用于提交数据,可能会改变服务器上的资源状态。
  3. 安全性不同:GET 请求的参数暴露在 URL 中,可能会被第三方截获,而 POST 请求的参数放在请求体中,相对安全。
    具体来说,GET 请求常用于数据的查询和读取,而 POST 请求常用于数据的提交和修改。在实际开发中,我们需要根据具体的业务需求来选择合适的请求方法。
    除了 GET 和 POST,还有 PUT 和 DELETE 等请求方法,它们分别用于更新和删除资源。这些请求方法的使用需要遵循 HTTP 协议规范,保证服务器能够正确处理请求并返回合适的响应。

请求头

请求头(Request Header)是客户端向服务器发送请求时,携带的一些额外信息,用来描述请求的各种属性和要求。
常见的请求头参数包括:

  1. User-Agent:表示浏览器的类型,供服务器识别。编写爬虫时如果加上此信息,可以伪装成浏览器,如果不加很可能被识别为爬虫,从而拒绝正确响应请求。
  2. Accept:指定客户端可接受的 MIME 类型(比如 text/html、application/json 等)。
  3. Authorization:用于身份验证,通常包括用户名和密码。
  4. Referer:表示请求来源的 URL,常用于防盗链和统计分析。
  5. Content-Type:表示请求体的 MIME 类型,常用于指定表单数据的编码方式。在http协议的消息头中,它可以用来表示具体请求的媒体类型信息。例如,text/html代表HTML格式;image/gif代表GIF图片;application/json代表JSON类型
  6. Cookie:表示客户端的会话信息,通常用于保持用户登录状态。在一些需要登录之后才有权限请求到的资源,很多都通过cookie内的信息,同时与服务器端的session信息对应,校验用户的登录状态。

请求网址

请求的网址我们一般将其称为URL
URL(Uniform Resource Locator,统一资源定位符)是互联网上用于定位和访问资源的地址。它由协议、域名(或IP地址)、端口号(可选)、路径、查询参数和片段组成。
具体来说,一个URL的组成如下:

  1. 协议:指定客户端与服务器之间通信的协议类型,如http、https、ftp等。
  2. 域名或IP地址:标识了资源所在的服务器,可以是域名或IP地址形式。如果是域名形式,需要通过DNS解析转换为IP地址。
  3. 端口号:默认为80端口,但是如果服务器开启了其他端口,需要指定相应的端口号进行访问。
  4. 路径:指定服务器上资源所在的路径,例如 /images/logo.png。
  5. 查询参数:向服务器传递一些特定的参数,格式为?key1=value1&key2=value2。可以通过"?“和”&"符号与URL路径分隔符相连接。
  6. 锚点: 指在网页内部设置的一个跳转点,用户可以通过点击链接或执行 JavaScript 等方式跳转到锚点所在的位置。锚点通常通过在 URL 中添加 # 号及其后面的文本来定义

下面是一个具体的url示例:

https://www.example.com:8080/path/to/resource?param1=value1&param2=value2#section1
  • 协议为 https。
  • 主机名为 www.example.com。
  • 端口号为 8080,因为 https 默认使用端口号 443。
  • 路径为 /path/to/resource。
  • 查询字符串为 param1=value1&param2=value2。
  • 锚点为 section1,用于在网页内部跳转。

请求体

用于在客户端向服务器发送数据。一般情况下,请求体主要用于 POST、PUT、PATCH 等请求方法,以及一些需要向服务器传递数据的特殊请求。请求体的内容格式通常取决于请求的具体类型和服务器的要求。常见的请求体格式包括 JSON、XML、form 表单等。

POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
{
  "name": "Alice",
  "email": "alice@example.com",
  "password": "123456"
}

在这个示例中,请求方法为 POST,目标 URL 为 /api/users,请求头中指定了请求体的内容类型为 application/json。请求体的内容为一个 JSON 对象,包含了用户的姓名、邮箱和密码信息。

响应

响应是由服务器发送的数据,用于响应客户端的请求。通常,响应包含响应头、响应状态码和响应体。

响应状态码

响应状态码是指服务器在处理请求后返回的三位数的代码。常见的响应状态码包括:

  • 200 OK:请求成功。
  • 201 Created:请求已经被实现,资源已经被创建。
  • 301 Moved Permanently:请求的URL已经移动到新的URL。
  • 400 Bad Request:请求出现语法错误。
  • 403 Forbidden:服务器拒绝请求。
  • 404 Not Found:请求的资源不存在。
  • 500 Internal Server Error:服务器遇到错误,无法完成请求。

响应体

响应中的主体数据,通常是以HTML、JSON、XML或二进制数据等格式返回。响应体的内容取决于客户端请求的资源类型和服务器响应的资源内容。例如,如果请求的资源是HTML页面,则响应体将包含HTML代码,如果请求的资源是图像,则响应体将包含图像数据。

响应头

响应头是HTTP响应中的元数据,用于提供关于响应的其他信息。常见的响应头参数包括Content-Type、Content-Length、Server、Set-Cookie等

Set-Cookie

Set-Cookie 头信息通常由服务器设置,并将其附加在 HTTP 响应头中。它可以将包含有关用户会话信息的数据存储在客户端,如用户的身份验证状态、偏好设置等。
Set-Cookie 头信息通常包括以下属性:

  • Name:cookie 的名称
  • Value:cookie 的值
  • Expires:cookie 的过期时间
  • Domain:cookie 可用的域名
  • Path:cookie 可用的路径
  • Secure:cookie 是否仅通过安全连接发送
  • HttpOnly:是否只能通过 HTTP 协议访问 cookie
    例如,以下是一个 Set-Cookie 的示例:
Set-Cookie: sessionId=abc123; Expires=Sat, 27 Feb 2023 06:30:00 GMT; Domain=example.com; Path=/; Secure; HttpOnly

这个 Set-Cookie 头信息告诉客户端存储一个名为 sessionId 的 cookie,值为 abc123。它将在 2023 年 2 月 27 日 6:30:00 GMT 过期,并且只能通过安全连接发送,只能通过 HTTP 访问,并且可用于 example.com 域的整个路径。

requests 发送请求

import requests
response = requests.get(url, params=None, **kwargs)
  • url: 要发送请求的URL
  • params (可选): 一个字典或字节序列,作为请求参数发送到URL中
  • **kwargs: 可选参数,可以是headers、data、json等。

处理响应

response.status_code  # 获取状态码
response.content      # 获取响应内容
response.text         # 获取响应内容并自动解码为字符串
response.json()       # 获取响应内容并自动解码为JSON
response.headers      # 获取响应头

爬虫的请求发送时通过python的第三方库requests实现的。本文介绍的requests的用法只是冰山一角,更多的requests库用法可以参考这篇文章

或者官方文档

文中使用到的接口分析技术其实就是我们俗称的抓包,由于本人的水平有限,我的抓包过程描述可能不是很清晰,更多的抓包技巧与训练,我们可以参考这篇文章谷歌浏览器抓包。

如果你还有其他的问题,欢迎给我私信。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第一节 请求与响应 的相关文章

  • #error This file requires compiler and library support for the ISO C++ 2011错误解决办法

    CmakeLists txt 中添如下代码就OK include CheckCXXCompilerFlag CHECK CXX COMPILER FLAG 34 std 61 c 43 43 11 34 COMPILER SUPPORTS
  • docker pull 下来的镜像文件存放的位置

    参考文献 xff1a http www tuicool com articles bENrUf 1 存放在 var lib docker 2 repositories aufs 文件 xff1a 34 Repositories 34 34
  • docker主要命令整理

    docker docker info docker version docker images 展示镜像 docker ps 展示容器 docker ps a 会展示出所有正在运行的和已经停止的容器 docker rmi 镜像ID 删除镜像
  • python xml读写

    1 xml例子 lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt annotation gt lt folder gt VOC2007 lt folder gt lt fil
  • caffe2编译问题:avx、avx2

    caffe2编译问题 xff1a 9898 init intrinsics check cc 54 CPU feature avx is present on your machine but the Caffe2 binary is no
  • 【Hello,电赛】2020电赛从备战到回顾(F题)

    瞎扯几句 2020应该让所有人难忘的一年 赋闲大半年 xff0c 开学两行泪 博主也是突然从大二被迫成了大三老油条 大一的时候身边就有同学开始展露科创竞赛方面的头角 xff0c 后来成了学院有名的带佬 咱当时觉得好玩也是羡慕 xff0c 奈
  • #C++#通过libcurl获取当前次HTTP请求的一些相关信息

    libcurl库是一个非常完整和好用的HTTP请求库 xff0c 通过它 xff0c 我们可以方便的书写HTTP请求程序 xff0c 而且不需要关心HTTP协议内部的细节处理 最近在做一个HTTP监测的程序 xff0c 就是通过libcur
  • 运行Maven Web项目出现 org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException错误

    异常问题描述 xff1a 初学Maven xff0c 新建了一个基于Web骨架的Web项目 xff0c jar 包也导好了 xff0c 作用域也设置正确了 xff0c Tomcat也正常运行了 xff0c 可是就是说编译错误 问题原因 由于
  • 解决mingw-w64外网下载太慢问题,离线包安装配置过程讲解

    常规安装程序下载地址 xff1a http www mingw w64 org doku php 但用安装程序直接安装mingw w64 xff0c 由于国际网络链路问题 xff0c 很难安装成功 xff0c 于是做了打包了一个离线包 xf
  • HTTP安全-nonce和timestamp在Http安全协议中的作用

    http www byywee com page M0 S591 591082 html 写道 前段时间给客户网站做新浪微博账号登录功能 xff0c 对 OAuth协议以及相关的一些安全协议做了一些研究 xff0c 顺便就记录一下学习心得吧
  • NVIDIA TensorRT使用记录

    1 准备工作 1 Pipeline train 在Host PC的GPU上训练test deployment 在TX1 TX2上部署使用 2 主机部署步骤 Running JetPack on the Host JetPack L4T 3
  • 用C语言实现串口通讯程序

    1 首先安装虚拟串口vspd软件 xff0c 用于创建虚拟串口进行互联调试 2 打开vspd软件 xff0c 选择COM1和COM4 xff0c 点击Add pair xff0c 把COM1和COM4互联 3 打开虚拟串口助手 xff0c
  • A2M7雷达在虚拟机的SLAM建图

    准备 Ubuntu18 04 雷达A2M7 一 前期准备 安装 建立工作空间并编译 mkdir p turtlebot ws src cd turtlebot ws src git clone https github com ncnynl
  • linux cmake分别指定编译/运行时动态库链接路径

    1 背景 在树莓派上开发执行程序 xff0c 需要用到opencv curl jsoncpp等库函数支持 xff0c apt get安装好后 xff0c 编译执行正常 但是执行程序挪到别的板子上 xff0c 都要apt get安装这些库 x
  • C语言函数库之字符串连接函数(string.h)

    1 字符串连接函数strcat 函数定义 xff1a char strcat char str1 const char str2 函数功能 xff1a 把str2 包括 39 0 39 拷贝到str1的尾部 连接 xff0c 并返回str1
  • foc学习笔记3——电流环

    foc学习笔记3 电流环 电流环的作用 前文不断强调 xff0c 进行磁场定向控制需要控制的是电流而非电压 xff0c 只是因为我们没有办法直接去控制电流才暂时退而求其次地去控制电压 虽然电压控制的效果也还不错 xff0c 但由于电机不是单
  • ESP32之蓝牙配网blufi

    概览 BluFi 是一款基于蓝牙通道的 Wi Fi 网络配置功能 xff0c 适用于 ESP32 它通过安全协议将 Wi Fi 配置和证书传输到 ESP32 xff0c 然后 ESP32 可基于这些信息连接到 AP 或建立 SoftAP B
  • 机器人学习之项目- Project2 :Where Am I?

    1 项目概述 欢迎来到 Where Am I 我在哪里 定位项目 在这个项目中 xff0c 将学习如何利用ROS AMCL包在Gazebo模拟环境的地图中准确地定位移动机器人 在完成本项目的过程中 xff0c 涉及机器人软件工程的几个方面
  • 将不同类对象指针存放QVector中

    需求 xff1a 将一系列操作步骤放在链表中按需调用 我将每个操作步骤用一个类实现 xff0c 将各类继承于一个基类 xff0c 再将指向各子类的基类指针放在QVector Vector xff0c 即可通过C 43 43 的多态实现调用各
  • 体感摄像头 realsense 系列硬件资料

    一 体感摄像头 Intel的体感摄像机是具有深度图像采集能力的摄像机 xff0c 目前已经出到了400系列 与kinect 2 xff0c ZED xff0c leap motion比较 xff0c 属于比较中庸 手势识别方面不如leap

随机推荐

  • C语言进度条的实现

    C语言进度条的实现 buff N xff1a 进度条状态字符串 xff0c N大小决定进度条长度 xff08 自行调整 xff09 xff0c 使用前先将所有字符初始化置零 xff0c 我这里使用的是memset函数 xff1b label
  • numpy下的随机数

    版权声明 xff1a 本文为博主原创文章 xff0c 未经博主允许不得转载 https blog csdn net m0 38061927 article details 75335069 在使用Python进行数据处理时 xff0c 往往
  • 宏函数 可变参数 C/C++

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • 排查ingress 404报错的方法--附:在容器中使用tcpdump抓包

    出现这个问题 xff0c 一般是由于路由不通导致的 xff0c 需要进行抓包排查 首先要解决的问题是 xff0c 如何在 ingress controller 容器中安装抓包工具 1 由于 ingress controller 的mando
  • fastApi介绍与重要版本更新细节

    fastApi介绍 FastAPI 是用于使用 Python 构建 API 的现代 Web 框架 它建立在 Starlette 框架之上 xff0c Starlette 框架是一个轻量级且可扩展的 ASGI xff08 异步服务器网关接口
  • 3. fastApi查询参数详解

    当声明的参数不是路径参数时 xff0c 路径操作函数会把该参数自动解释为查询参数 如下 路径操作函数将参数skip limit解释为查询参数 query parameter span class token decorator annota
  • 4. fastApi请求体详解

    简单介绍网络请求 网络请求是指客户端 xff08 例如浏览器 移动应用程序等 xff09 向服务器发送请求 xff0c 以获取特定资源或执行特定操作的过程 HTTP请求是一种常见的网络请求协议 xff0c 它通过互联网连接客户端和服务器 x
  • python多线程与多进程简略介绍

    GIL介绍 在python中GIL的限制导致不论是在单核还是多核条件下 xff0c 同时刻都只能运行 一个线程 xff0c 这使得Python多线程无法发挥多核并行的优势 GIL全称为Global Interpreter Lock意思是全局
  • 高并发场景下,python各web框架的优劣对比与示例分析

    高并发场景下 xff0c python各个web框架的优劣对比与示例分析 Python有许多适合高并发场景的Web框架 xff0c 下面是其中几个 xff1a Flask Flask是一个轻量级的Web框架 xff0c 由Werkzeug和
  • 6. fastApi文件上传请求处理示例

    需求 xff1a 开发文件上传功能接口 接口路径 files 请求类型 post 响应结果 返回文件的大小 单位bytes 实现方案 使用post类型处理方法 xff0c 指定参数类型为bytes或UploadFile 使用File 方法处
  • 7. fastApi表单数据处理详解与示例

    需求 前端通过表单数据的形式发送用户名与密码到后端 xff0c 后端通过用户信息校验 xff0c 过滤出合法用户 xff0c 并为用户设置cookie 超时时间为24h xff09 接口路径 login 请求类型 post方法发送的文件 响
  • C语言结构体字节对齐规则

    C语言结构体字节对齐规则 基本规则 规则1 xff1a 结构体 xff08 struct xff09 的数据成员 xff0c 第一个数据成员放在offset为0的地方 xff0c 以后每个数据成员存放在offset为该数据成员大小的整数倍的
  • 如何处理C++构造函数中的错误

    用C 43 43 写代码的时候总是避免不了处理错误 xff0c 一般来说有两种方式 xff0c 通过函数的返回值或者抛出异常 C语言的错误处理一律是通过函数的返回值来判断的 xff0c 一般是返回0 NULL 或者 1 表示错误 xff0c
  • 改进后的A星三维路径规划完整算法(matlab语言),包括障碍物模型优化

    改进后的A星三维路径规划完整算法 matlab语言 xff0c 包括障碍物模型优化 xff0c 平滑处理 xff0c 启发函数的改进 xff0c 环境地图可以根据自己的实际情况进行改进 xff0c 算法包含了非常详细的代码注释 ID 695
  • 8. fastApi请求错误处理方式与示例

    请求错误处理 某些情况下 xff0c 需要向客户端返回错误提示 需要向客户端返回错误提示的场景主要如下 xff1a 客户端没有执行操作的权限客户端没有访问资源的权限客户端要访问的项目不存在服务器内部错误 遇到这些情况时 xff0c 通常要返
  • 9. fastApi的json编码器使用示例

    JSON 编码器 有时 xff0c 我们要把 Pydantic 模型等数据类型转换为字典 列表等与 JSON 兼容的格式 例如 xff0c 把 Pydantic 模型存入数据库时就要进行转换 为此 xff0c FastAPI 提供了 jso
  • 10. fastApi数据更新方法

    用 PUT 更新数据 把输入数据转换为 JSON 数据 xff08 例如 xff0c 使用 NoSQL 数据库时 xff09 xff0c 可以使用 jsonable encoder 例如 xff0c 把 datetime 转换为 str P
  • 写在前面--(与各位读者聊聊)

    xff61 xff65 xff65 xff89 xff9e 嗨 xff01 我是jesse xff0c 欢迎来到我的Python爬虫博客专栏 xff01 在本专栏中 xff0c 我将分享Python爬虫技术的各个方面 xff0c 包括基础知
  • 爬虫示例一【简单爬虫实现】

    爬虫构建 回顾以上的接口分析过程 xff0c 整个对我们有用的请求过程是 xff0c 浏览器发送一个GET请求 xff0c 直接获取到了我们想要的数据页面 那么如何通过python代码复现以上的请求过程呢 xff1f 对于这样的简单爬虫 x
  • 第一节 请求与响应

    请求 由客户端发往服务器 xff0c 分为四个部分 xff1a 请求头 xff0c 请求方法 xff0c 请求网址URL 请求体 当我们在浏览器中输入一个网址或点击一个链接时 xff0c 浏览器会向服务器发送请求 xff0c 请求获取指定的