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

news2025/4/6 14:02:25

学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.coloradmin.cn/o/1029890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

方案:TSINGSEE青犀智能分析网关皮带撕裂算法的场景应用

在工地矿山等现实场景中,皮带运输在生产过程中是必不可少的,然而,由于长时间高强度的运转,皮带很容易发生撕裂、破损、跑偏等问题。这些问题会严重影响生产速度,甚至会导致严重的安全事故。为了有效预防此类安全事故发…

短视频抖音账号矩阵系统源码开发者自研(四)

抖音是一款备受欢迎的短视频APP,拥有数亿的用户,其中包括了大量的粉丝。为了让更多的人能够发现和观看到你的视频,抖音SEO是必不可少的一环,特别是对于拥有企业或个人品牌的用户来说。在这个过程中,抖音SEO源码的开源部…

不要动 WindowsApps 文件夹的权限以及更新 win10 版本

前言: 先简单说几句,本来打算开始写论文的,装个 mathtype 到 word 中,word 的安装路径在 WindowsApps 文件夹中,修改权限后导致 wsl 不能使用、微软自带的软件报错(参数错误)以及微软商店不能使…

区块链交易平台开发流程

随着区块链技术的日益发展,越来越多的金融机构和创业公司开始探索开发区块链交易平台的潜力。以下是一篇关于区块链交易平台开发流程的指南。 一、理解区块链技术 在开发区块链交易平台之前,必须深入理解区块链技术的内在机制和原理。区块链是一…

大数据之-Flink学习笔记

Flink Apache Flink — 数据流上的有状态计算。 Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算处理。 任何类型的数据都以事件流的形式生成。信用卡交易、传感器测量、机器日志或网站或移动应用程序 2上的用户交互,…

java复习-10-String类

String 类 实例化 String 本身包装的是一个数组,并且其有两种对象的实例化形式:直接赋值、构造方法实例化。 public class StringDemo {public static void main(String args[]){// 直接赋值String str1 "Hello,World";// 构造方法实例化S…

Web自动化测试理解

最近几天,由于工作需要接触Web自动化测试,所以我从网上找的资料,学习了解,然后自己总结汇总的随笔,如文章中有不足的地方,请大家多多指教;或者文章内容与他人相似,望见谅。 手工测试…

成都瀚网科技有限公司:抖店平台买家怎么修改评价?

在抖音电商平台上,买家的评价对店铺的声誉和销售业绩有着重要影响。然而,有时买家可能会因为某些原因想要修改之前的评价。那么,抖店平台上的买家如何修改评价呢?修改评价对店铺有什么影响?本文将介绍买家如何修改评价…

控制台日志打印console的封装,加入美化、行显示与打印开关,支持node.js环境

控制台日志打印console的封装,加入美化、行显示与打印开关,支持node.js环境 为什么要写这个? 封装这个控制台日志打印工具,主要是在项目中自己做的SDK需要提供给其他开发人员使用,加入了日志美化和打印打开&#xff…

C语言 cortex-A7核UART总线实验

一、C 1)uart4.h #ifndef __UART4_H__ #define __UART4_H__ #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h&quo…

maven清理本地仓库。删除_remote.repositories文件和删除失败的jar包

1.图预览 .bat文件要和仓库在同一平级目录 REPOSITORY_PATH要改成你自己仓库的地址 2、删除.lastUpdated文件(失败的jar包) 使用.bat文件 注明:REPOSITORY_PATHD:\software\Java\maven\repository 改成你仓库的地址 set REPOSITORY_PATHD:\software\Java\maven\rep…

nvm下载安装教程

前言 nvm 官网地址:https://nvm.uihtm.com 一、nvm 下载 进入 nvm github 地址,下载最新版本:https://github.com/coreybutler/nvm-windows/releases 点击选择当前最新版本。 滑动到底部,点击 nvm-setup.exe 下载安装文件。 接…

【C++ 番外】【指针】数组类型的指针,指向数组的指针,数组的元素是指针,这个视频说明白。数组和指针

from: https://www.bilibili.com/video/BV1H34y1K7AM/ 指向数组第一个元素的指针 数组类型指针 数组的类型都是指针 超级混合版本,加深理解

Spring-AOP+入门案例(注解)+AOP切入点语法+AOP通知类型

一、简介工作流程。 简介 SpringAop实际上就是代理模式 工作流程 二、导入依赖 1.spring-aop包 该包是在spring-context依赖下的子包&#xff0c;所以有context就有aop <dependency><groupId>org.springframework</groupId><artifactId>spring-con…

​消费盲返:消费者和商家都受益的消费返利

消费盲返是什么&#xff1f;它是一种新型的消费返利模式&#xff0c;它的核心思想是&#xff1a;消费者在平台购买商品后&#xff0c;可以获得后续一定数量的订单的部分利润作为奖励。这样&#xff0c;消费者不仅可以享受商品的优惠&#xff0c;还有可能赚取更多的钱。这种模式…

第七章 查找 六、平衡二叉树

目录 一、定义 二、最小不平衡子树 1、平衡方法 2、查找效率 三、插入、删除操作 平衡二叉树的插入操作&#xff1a; 平衡二叉树的删除操作&#xff1a; 1、例子1 &#xff08;1&#xff09;若我们要删除9 &#xff08;2&#xff09;若我们要删除55 2、例子2 ​编辑…

高云FPGA系列教程(10):letter-shell移植

文章目录 letter-shell简介letter-shell源码获取letter-shell移植函数和变量应用示例 本文是高云FPGA系列教程的第10篇文章。 shell&#xff0c;中文是外壳的意思&#xff0c;就是操作系统的外壳。通过shell命令可以操作和控制操作系统&#xff0c;比如Linux中的Shell命令就包括…

2023-09-21 LeetCode每日一题(收集树中金币)

2023-09-21每日一题 一、题目编号 2603. 收集树中金币二、题目链接 点击跳转到题目位置 三、题目描述 给你一个 n 个节点的无向无根树&#xff0c;节点编号从 0 到 n - 1 。给你整数 n 和一个长度为 n - 1 的二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示…

Redis学习笔记--001

Redis快速入门 文章目录 Redis快速入门一、初识Redis1.1、NoSQL数据库1.2、Redis介绍1.3、[Redis](https://redis.io/)的安装 二、Redis常见命令2.1、Redis默认启动2.2、指定配置启动2.3、Redis开机自启设置 三、Redis客户端3.1、Redis命令行客户端3.2、图形化桌面客户端 四、r…

Python Opencv实践 - 人脸识别CascadeClassifier

参考资料&#xff1a; 【PythonOpenCV 人脸检测—CascadeClassifier 级联分类器实现】_LPY。的博客-CSDN博客 ‘cv::CascadeClassifier::detectMultiScale‘_只要思想不滑坡办法总比困难多--小鱼干的博客-CSDN博客 import cv2 as cv import matplotlib.pyplot as plt import nu…