当前位置: 首页 > news >正文

《Python3 网络爬虫开发实战》:二、HTML消息结构

HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。

一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。

一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。

HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。

一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送。

在这里插入图片描述

服务器响应消息
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

在这里插入图片描述
实例
下面实例是一点典型的使用GET来传递数据的实例:

客户端请求

GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi

服务端响应:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

输出结果:
Hello World! My payload includes a trailing CRLF.


HTTP 协议的 8 种请求类型介绍

HTTP 协议中共定义了八种方法或者叫“动作”来表明对 Request-URI 指定的资源的不同操作方式,具体介绍如下:

OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*'的请求来测试服务器的功能性。
HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
GET:向特定的资源发出请求。
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。
PUT:向指定资源位置上传其最新内容。
DELETE:请求服务器删除 Request-URI 所标识的资源。
TRACE:回显服务器收到的请求,主要用于测试或诊断。
CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
虽然 HTTP 的请求方式有 8 种,但是我们在实际应用中常用的也就是 getpost,其他请求方式也都可以通过这两种方式间接的来实现。

相关文章:

  • 调试接口小技巧-通过接口调试工具去下载上传文件
  • 【C指针详解】进阶篇
  • 惊奇发现业务移动端在往小程序化发展
  • 啸叫检测的方法:基于DSP的实现
  • java中比较两个map是否相同
  • C/C++编程工具及实用小软件推荐
  • [项目管理-15]:项目执行中的三大管理者:项目活动管理、职能部门管理、产品架构设计。
  • Code For Better 谷歌开发者之声——基于改进 EfficientDet 的电网线路的识别与检测的设计实现
  • 【for lovelier】IDEA + LeetCode Editor 最佳实践
  • React Native 0.70 版本发布,Hermes 成为默认引擎
  • 【Java基础】时间日期类之Date类、SimplDateFormat类、Calendar类及二月天案例
  • 2023计算机毕业设计SSM最新选题之javaEE的仓库管理系统93c6b
  • 编程路学习书单推荐
  • 【OpenCV】基于cv2的图像阈值化处理【超详细的注释和解释】掌握基本操作
  • SpringBoot整合Canal、RabbitMQ监听数据变更记录
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 11111111
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • AWS实战 - 利用IAM对S3做访问控制
  • create-react-app项目添加less配置
  • eclipse的离线汉化
  • es6--symbol
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java编程基础24——递归练习
  • Markdown 语法简单说明
  • PHP 7 修改了什么呢 -- 2
  • Ruby 2.x 源代码分析:扩展 概述
  • SpringCloud集成分布式事务LCN (一)
  • vue中实现单选
  • Yeoman_Bower_Grunt
  • 阿里云应用高可用服务公测发布
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 人脸识别最新开发经验demo
  • 实现菜单下拉伸展折叠效果demo
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 学习使用ExpressJS 4.0中的新Router
  • 我们雇佣了一只大猴子...
  • ​flutter 代码混淆
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #pragma 指令
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)nsfocus-绿盟科技笔试题目
  • (转)VC++中ondraw在什么时候调用的
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)