学Python的漫画漫步进阶 -- 第十四步.网络通信

学Python的漫画漫步进阶 -- 第十四步.网络通信

  • 十四、网络通信
    • 14.1 基本的网络知识
      • 14.1.1 TCP/IP
      • 14.1.2 IP地址
      • 14.1.3 端口
      • 14.1.4 HTTP/HTTPS
    • 14.2 搭建自己的Web服务器
    • 14.3 urllib.request模块
      • 14.3.1 发送GET请求
      • 14.3.2 发送POST请求
    • 14.4 JSON数据
      • 14.4.1 JSON文档的结构
      • 14.4.2 JSON数据的解码
    • 14.5 动动手——下载图片示例
    • 14.6 动动手——返回所有备忘录信息
    • 14.7 练一练

十四、网络通信

本章讲解如何通过Python访问互联网上的资源,这也是网络爬虫技术的基础。

Python是一种通用的编程语言,具有易于学习和使用的特性,因此在网络通信方面也有广泛的应用。

网络通信是指在不同设备之间传输数据和信息的过程。为了实现网络通信,需要遵循一些协议和规范,其中最常见的协议是TCP/IP协议和HTTP/HTTPS协议。

TCP/IP协议是互联网的基础协议,包括TCP和IP两个协议。TCP协议负责数据的可靠传输,IP协议负责数据的路由和寻址。在Python中,可以使用socket模块实现TCP/IP协议的网络通信。

HTTP/HTTPS协议是一种基于TCP/IP协议的应用层协议,用于Web浏览器和Web服务器之间的通信。HTTP/HTTPS协议定义了浏览器和服务器之间的请求和响应格式,常见的HTTP方法包括GET和POST等。在Python中,可以使用urllib、requests等库实现HTTP/HTTPS协议的网络通信。

JSON是一种常用的数据交换格式,可以用于在不同设备之间传输数据。在Python中,可以使用json模块处理JSON数据。

综上所述,Python中常见的网络通信协议包括TCP/IP协议、HTTP/HTTPS协议等,可以使用socket模块、urllib库、requests库等实现网络通信。JSON是一种常用的数据交换格式,可以用于在不同设备之间传输数据。

在这里插入图片描述

14.1 基本的网络知识

程序员在进行网络编程前,需要掌握基本的网络知识,本节会介绍这些内容。

14.1.1 TCP/IP

在网络通信中会用到一些相关协议,其中,TCP/IP是非常重要的协议,由IP和TCP两个协议构成。IP(Internet Protocol)是一种低级的路由协议,它将数据拆分在许多小的数据包中,并通过网络将它们发送到某一特定地址,但无法保证所有包都抵达目的地,也不能保证包按顺序抵达。
在这里插入图片描述

由于通过IP传输数据存在不安全性,所以还需要通过TCP(Transmission Control Protocol,传输控制协议)进行网络通信。TCP是一种高层次的协议,是面向连接的可靠数据传输协议,如果有些数据包没被收到,则会重发,对数据包的内容准确性进行检查并保证数据包按顺序抵达。所以,TCP能够保证数据包安全地按照发送时的顺序送达目的地。

在这里插入图片描述

14.1.2 IP地址

为了实现网络中不同计算机之间的通信,每台计算机都必须有一个与众不同的标识,这就是IP地址,TCP/IP使用IP地址来标识源地址和目的地址。
在这里插入图片描述

最初,所有的IP地址都是由32位数字构成的,由4个8位的二进制数组成,每8位之间用圆点隔开,例如192.168.1.1,这种类型的地址通过IP v4指定。现在有一种新的地址模式,叫作IPv6,IPv6使用128位数字表示一个地址。尽管IPv6比IPv4有很多优势,但是由于习惯的问题,很多设备还是采用IPv4。
另外,我们有时还会用到一个特殊的IP地址127.0.0.1,127.0.0.1叫作回送地址,指本机。回送地址主要用于网络软件测试及本机的进程间通信,只发送数据,只进行本机进程间通信,不进行任何网络传输。

14.1.3 端口

一个IP地址标识一台计算机,每一台计算机又有很多网络通信程序在运行,提供网络服务或进行通信,这就需要不同的端口进行通信。如果把IP地址比作电话号码,那么端口就是分机号码,在进行网络通信时不仅要指定IP地址,还要指定端口号。

在这里插入图片描述
TCP/IP系统中的端口号是一个16位的数字,它的范围是 0~65535。将小于1024的端口号保留给预定义的服务,例如HTTP是80,FTP是21,Telnet是23,Email是25,等等。除非要和那些服务进行通信,否则不应该使用小于1024的端口。

14.1.4 HTTP/HTTPS

对互联网的访问大多基于HTTP/HTTPS,HTTP/HTTPS是TCP/IP的一种协议。
1 HTTP
HTTP(Hypertext Transfer Protocol,超文本传输协议)属于应用层协议,其简捷、快速的方式适用于分布式超文本信息传输。HTTP是无连接协议,即在每一次请求时都建立连接,服务器在处理完客户端的请求后,会先应答客户端,然后断开连接,不会一直占用网络资源。

HTTP/1.1共定义了8种请求方法:OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE和CONNECT。GET和POST方法最常用。

1) GET方法:用于向指定的资源发出请求,被发送的信息“显式”地跟在URL后面。它一般只用于读取数据,例如静态图片等。GET方法有点像使用明信片给别人写信,将“信的内容”写在外面,接触到的人都可以看到,因此是不安全的。

在这里插入图片描述

2) POST方法:用于向指定的资源提交数据,请求服务器进行处理,例如提交表单或者上传文件等。数据被包含在请求体中。POST方法像是把“信的内容”装入信封中,接触到该信封的人都看不到信的内容,因此是相对安全的。

在这里插入图片描述
2 HTTPS

HTTPS(Hypertext Transfer Protocol Secure,超文本传输安全协议)是超文本传输协议和SSL的组合,用于提供加密通信及对网络服务器身份的鉴定。简单地说,HTTPS是加密的HTTP。

在这里插入图片描述

HTTPS与HTTP的区别是:HTTPS使用https://代替http://,HTTPS使用端口443,而HTTP使用端口80与TCP/IP通信。

14.2 搭建自己的Web服务器

在这里插入图片描述

搭建Web服务器的步骤如下。

1 安装JDK(Java开发工具包)
我们的Web服务器是Apache Tomcat,是支持Java Web技术的Web服务器。Apache Tomcat的运行需要Java运行环境,而JDK提供了Java运行环境,因此我们首先需要安装JDK。
我们可以从本章配套代码中找到JDK安装包jdk-8u211-windows-i586.exe。具体安装步骤不再赘述。

2 配置Java运行环境

Apache Tomcat在运行时需要用到JAVA_HOME环境变量,因此需要先设置JAVA_HOME环境变量。
首先,打开Windows系统环境变量设置对话框,打开该对话框有很多方式,如果是Windows 10系统,则在桌面上用鼠标右键单击“此电脑”图标,弹出Windows系统对话框,之后如下图所示操作。

在这里插入图片描述
在这里插入图片描述

3 安装Apache Tomcat服务器
我们可以从本章的配套代码中找到Apache Tomcat安装包apache-tomcat-9.0.13.zip,只需将apache-tomcat-9.0.13.zip解压即可安装Apache Tomcat服务器。

4 启动Apache Tomcat服务器
在Apache Tomcat解压目录的bin目录下找到startup.bat文件,双击startup.bat即可启动Apache Tomcat。

在这里插入图片描述

启动Apache Tomcat成功后会看到如下信息:

在这里插入图片描述

5 测试Apache Tomcat服务器
打开浏览器,在地址栏中输入http://localhost:8080/NoteWebService/,在打开的页面上介绍了当前Web服务器已经安装的Web应用(NoteWebService)的具体使用方法。
在这里插入图片描述
打开浏览器,在地址栏中输入网址http://localhost:8080/NoteWebService/note.do,在打开的页面上可以查询所有数据。
在这里插入图片描述

在这里插入图片描述

14.3 urllib.request模块

我们要想在Python中访问互联网资源,则可以使用官方内置的urllib.request模块。

14.3.1 发送GET请求

如果要发送HTTP/HTTPS的GET请求,则可以使用urllib.request模块的Request对象。

在这里插入图片描述
示例代码如下:
在这里插入图片描述

参考14.2节启动Web服务器,然后通过Python指令运行文件:

在这里插入图片描述

14.3.2 发送POST请求

如果要发送HTTP/HTTPS的POST请求,则其发送流程与发送GET

请求非常类似。
示例代码如下:
在这里插入图片描述

参考14.2节启动Web服务器,然后通过Python指令运行文件:

在这里插入图片描述

在这里插入图片描述

14.4 JSON数据

14.4.1 JSON文档的结构

构成JSON文档的两种结构为:JSON对象(object)和JSON数组(array)。

在这里插入图片描述
在这里插入图片描述

1 JSON对象

JSON对象类似于Python中的字典类型,示例如下:

14.4.2 JSON数据的解码

JSON数据的解码(decode)指将JSON数据转换为Python数据,当从网络中接收或从磁盘中读取JSON数据时,需要将其解码为Python数据。
在编码过程中,JSON数据被转换为Python数据。

在这里插入图片描述
2 JSON数组

JSON数组类似于Python中的列表类型,示例如下:
在这里插入图片描述
在这里插入图片描述

我们使用json模块提供的loads(str)函数进行JSON数据的解码,参数str是JSON字符串,返回Python数据。
重构14.3.1节的示例,代码如下:
在这里插入图片描述
通过Python指令运行文件:

在这里插入图片描述

14.5 动动手——下载图片示例

在这里插入图片描述

参考代码如下:

在这里插入图片描述
参考14.2节启动Web服务器,然后通过Python指令运行文件:

在这里插入图片描述
在文件下载成功后,会在当前目录下看到download.png文件。

14.6 动动手——返回所有备忘录信息

在这里插入图片描述
在这里插入图片描述
参考代码如下:

在这里插入图片描述
参考14.2节启动Web服务器,然后通过Python指令运行文件:

在这里插入图片描述

在这里插入图片描述

14.7 练一练

1 请简述HTTP中POST和GET方法的不同。

2 请编写Python程序,访问你熟悉的Web网站。

3 判断对错:(请在括号内打√或×,√表示正确,×表示错误)。

1)127.0.0.1叫作回送地址,指本机,主要用于网络软件测试及本机进程间通信,使用回送地址发送数据,不进行任何网络传输,只在本机进程间通信。()

2)JSON对象是用大括号括起来的。()

3)JSON数组是用中括号括起来的。()

4)我们在自己编写网络通信程序时,应该使用大于1024的端口。()

5)当向服务器请求发送发大量数据时,应该使用GET()方法请求。()

6)简单地说,HTTPS是加密版的HTTP。()

7)JSON对象解码后返回的是Python中的字典对象。()

8)JSON数组解码后返回的是Python中的列表对象。()

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

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

相关文章

arcgis拓扑检查实现多个矢量数据之间消除重叠区域

目录 环境介绍: 操作任务: 步骤: 1、数据库和文件结构准备 2、建立拓扑规则 3、一直下一页默认参数后,进行拓扑检查 4、打开TP_CK_Topology,会自动带出拓扑要素,红色区域为拓扑错误的地方&#xff1…

【HarmonyOS】元服务卡片router实现跳转到指定页面

【关键字】 元服务卡片、router跳转不同页面 【写在前面】 本篇文章主要介绍开发元服务卡片时,如何实现从卡片中点击事件跳转到指定的应用内页面功能。此处以JS UI开发服务卡片为例,JS卡片支持组件设置action,包括router事件和message事件&…

windows常见的命令行操作

1.查看网络 ipconfig 2.根据任务id关闭进程 1.模糊搜索服务 tasklist | findstr QQ 2.根据模糊搜索结果,获取对应的pid taskkill /F /PID 5128 其他常见命令 若不清楚参数,使用(命令 /?)即可查看help

Java 华为真题-猴子爬山

需求: 一天一只顽猴想去从山脚爬到山顶,途中经过一个有个N个台阶的阶梯,但是这猴子有一个习惯:每一次只能跳1步或跳3步,试问猴子通过这个阶梯有多少种不同的跳跃方式? 输入描述 输入只有一个整数N&#xff…

Digger PRO - Voxel enhanced terrains

资源链接在文末 Digger PRO​​​ 是一个简单但强大的工具,可以直接从 Unity 编辑器或游戏中创建天然洞穴和悬岩。会让你感觉自己手中握有一个体素地形,且毫无瑕疵。它实际上保持着最新、最快且可靠的 Unity 地形系统,并在你需要的地方无缝创建洞穴/悬岩峭壁网格。Digger 内…

Vue3项目中使用插槽

前言&#xff1a; 此文章仅记录插槽的使用&#xff0c;用于自己后期学习查看。 代码实现过程中&#xff0c;HelloWorld为子组件&#xff0c;HomeView为父组件 <slot></slot>元素&#xff1a; 是一个插槽出口&#xff0c;是写在子组件中的&#xff0c;表示了父组件…

ORM框架的发展历史

文章目录 JDBCJDBC操作的特点JDBC优化1.0JDBC优化2.0JDBC优化3.0 Apache DBUtils初始配置基本操作 SpringJDBC初始配置CRUD操作 HibernateORM介绍Hibernate的使用创建项目配置文件CRUD 操作其他方式 Hibernate总结 MyBatis JDBC JDBC操作的特点 最初的时候是直接通过jdbc来直…

【苹果】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本

前言 &#x1f34a;缘由 Iphone15来了&#xff0c;两年之约你还记得吗&#xff1f; 两年前&#xff0c;与特别的人有一个特别的约定。虽物是人非&#xff0c;但思念仍在。 遂整合之前iphone13及iphone14的相关抢购代码&#xff0c;完成一个SpringBoot监听Iphone15有货邮件提…

Foxit PDF SDK Windows 9.1 Crack

Foxit PDF SDK 变更日志 Windows/Linux/Mac 2023 年 8 月 新功能/增强功能 在开始签名之前设置外观。支持使用共享字典添加签名。允许在调用 Signature::StartSign() 之前增量保存文档。在签名前修改现有未签名分页印章签名的外观。支持使用共享字典添加分页签名。忽略全角…

51单片机项目(13)——基于51单片机的智能台灯protues仿真

本次设计&#xff0c;使用protues软件进行仿真&#xff0c;详情如下&#xff1a; 1.输入部分:由热释电红外传感器、光敏传感器、超声波测距传感器所构成的子电路组成。 2.输出模块:由1602液晶显示及其蜂鸣器报警系统组成。 3.中央处理器:主要有AT89C52单片机构成。 4.工作过…

TF-A如何支持Firmware镜像放回滚的

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈在TF-A中通过FIP工具打包镜像的时候,会在镜像的content cert中打包进一个Non-Volatile counter,即版本号 trus…

etc目录下的profile.d文件目录设置环境变量和全局脚本

一、设置环境变量 etc目录下的profile.d文件目录 /etc/profile.d 1、编写 vi test.sh文件内容 # jdk变量 export ZHK_HOME/root export PATH$PATH:$ZHK_HOME/test # 可以取出来ZHK_HOME变量给ZZZ_HOME赋值 export ZZZ_HOME${ZHK_HOME}/test2、刷新 执行source /etc/profile …

idea 使用 groovyScript 获取方法参数列表生成方法注释模板遇到的问题。

1、网上好多使用groovyScript来设置获取方法列表生成注释模板的代码&#xff0c;我这篇文章的是想讨论下这种方式存在的一个问题&#xff0c;希望有大佬能提供一个解决方案。 2、设置步骤什么的就省略了直接描述问题。 3、groovyScript代码段如下&#xff1a; groovyScript(…

解决2K/4K高分屏下Vmware等虚拟机下Kail Linux界面显示问题

问题现象 在我们日常使用VirtualBox、Vmware workstation、Hyper-V等虚拟机安装使用Kali系统&#xff0c;在2K/4K高分辨率电脑下Kali系统界面显示太小&#xff0c;包括各种软件及命令终端字体均无法很直观的看出&#xff0c;影响我们的正常测试及使用。 常规处理思路 很多人…

ipad触控笔有必要买原装吗?开学值得买电容笔推荐

要知道&#xff0c;一支苹果的原装电容笔&#xff0c;单单在价格上就要近千元。实际上&#xff0c;平替电容笔对没有太多预算的用户是个不错的选择。一支苹果的电容笔&#xff0c;价格是平替电容笔的4倍左右&#xff0c;但与苹果电容笔相比&#xff0c;在书写方面上&#xff0c…

ptmalloc源码分析 - Top chunk的扩容函数sysmalloc实现(09)

目录 一、sysmalloc函数基本分配逻辑 二、强制try_mmap分配方式 三、非主分配区分配的实现 1. 设置老的Top chunk的参数 2. 尝试使用grow_heap函数 3. 尝试使用new_heap函数 4. 尝试使用try_mmap方式 四、主分配区分配的实现 1. 设置Top扩容的size值 2. brk分配成功的…

RK3568开发板SG90 舵机模块的功能实现-迅为电子

1 模块说明 SG90 舵机模块如下图所示: 常见的舵机转向角度有 0-90 度&#xff0c;0-180 度&#xff0c;0-360 度&#xff0c;可以用在垃圾桶项目开盖用&#xff0c;智能小车的全比例转向&#xff0c;摄像头云台&#xff0c;机械臂等。 2 接线说明 SG90 舵机模块上三条线&…

跨境电商运营的新趋势:自养号测评补单技术解析

当前阶段&#xff0c;亚马逊、速卖通、虾皮、lazada等主流跨境电商平台的主要推广方式仍然是广告投放&#xff0c;毕竟这是平台的主要收入来源之一。然而&#xff0c;随着越来越多的卖家进军跨境市场&#xff0c;市场竞争日趋激烈&#xff0c;传统的广告投入效果逐渐减弱。在这…

如何实现一个简单的深度优先搜索(DFS)算法?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 实现深度优先搜索⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前…

【C语言】指针的进阶(一)

目录 前言 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 5. 函数指针 前言 指针在C语言中可谓是有着举足轻重的…