Python的秘密基地--[章节12] Python 网络编程

第12章:Python 网络编程

Python 提供了强大的网络编程能力,从构建简单的客户端与服务器通信,到开发复杂的分布式系统,均能轻松实现。本章将带你深入了解 Python 的网络编程,包括使用标准库构建网络应用、处理 HTTP 请求,以及开发基于异步的高效网络服务。


12.1 网络编程基础

12.1.1 什么是网络编程?

网络编程是通过编写代码实现设备之间的通信,包括:

  1. 客户端:发起请求并接收响应。
  2. 服务器:接收请求并返回响应。

Python 提供了多个内置模块支持网络编程:

  • socket:底层网络接口,支持 TCP/UDP 协议。
  • http.client:HTTP 客户端接口。
  • requests:更高效的第三方 HTTP 请求库。
  • asyncio:支持异步网络编程。

12.1.2 网络协议基础

常用网络协议包括:

  • TCP(传输控制协议):可靠的数据传输协议,面向连接。
  • UDP(用户数据报协议):不可靠的数据传输协议,面向无连接。
TCP 与 UDP 的主要区别
特性TCPUDP
连接方式面向连接无连接
数据传输可靠性高可靠可能丢失数据
速度较慢较快
应用场景文件传输、Web视频流、实时通信

12.2 使用 socket 模块进行网络编程

Python 的 socket 模块是底层网络编程的核心。

12.2.1 构建 TCP 客户端与服务器

TCP 服务器
import socket

# 创建服务器套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8080))
server_socket.listen(5)  # 监听最多 5 个连接
print("Server is running on port 8080...")

while True:
    client_socket, addr = server_socket.accept()
    print(f"Connection established with {addr}")
    client_socket.send(b"Hello, Client!")
    client_socket.close()
TCP 客户端
import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 8080))  # 连接服务器
message = client_socket.recv(1024)  # 接收消息
print(f"Received from server: {message.decode()}")
client_socket.close()

12.2.2 构建 UDP 客户端与服务器

UDP 服务器
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(('localhost', 8080))
print("UDP Server is running on port 8080...")

while True:
    data, addr = server_socket.recvfrom(1024)  # 接收数据
    print(f"Received message: {data.decode()} from {addr}")
    server_socket.sendto(b"Hello, UDP Client!", addr)
UDP 客户端
import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_socket.sendto(b"Hello, Server!", ('localhost', 8080))
message, server_addr = client_socket.recvfrom(1024)
print(f"Received from server: {message.decode()}")
client_socket.close()

12.3 使用 requests 模块进行 HTTP 编程

requests 是一个功能强大的第三方 HTTP 库,支持发送各种类型的 HTTP 请求。

12.3.1 安装 requests

pip install requests

12.3.2 发送 GET 请求

import requests

response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
if response.status_code == 200:
    print(response.json())

12.3.3 发送 POST 请求

import requests

data = {
    "title": "foo",
    "body": "bar",
    "userId": 1
}
response = requests.post("https://jsonplaceholder.typicode.com/posts", json=data)
print(response.status_code)
print(response.json())

12.4 异步网络编程

使用 asyncio 模块,可以高效处理大规模的异步 I/O 操作。

12.4.1 异步 HTTP 请求

示例:使用 aiohttp
import aiohttp
import asyncio

async def fetch_url(session, url):
    async with session.get(url) as response:
        return await response.text()

async def main():
    async with aiohttp.ClientSession() as session:
        html = await fetch_url(session, "https://www.python.org")
        print(html)

asyncio.run(main())

12.4.2 异步 TCP 服务器与客户端

异步 TCP 服务器
import asyncio

async def handle_client(reader, writer):
    addr = writer.get_extra_info('peername')
    print(f"Connection established with {addr}")
    
    writer.write(b"Hello, Async Client!")
    await writer.drain()
    writer.close()

async def main():
    server = await asyncio.start_server(handle_client, 'localhost', 8080)
    print("Async TCP Server is running on port 8080...")
    async with server:
        await server.serve_forever()

asyncio.run(main())
异步 TCP 客户端
import asyncio

async def main():
    reader, writer = await asyncio.open_connection('localhost', 8080)
    data = await reader.read(100)
    print(f"Received: {data.decode()}")
    writer.close()

asyncio.run(main())

12.5 网络安全编程

12.5.1 使用 SSL 加密通信

Python 的 ssl 模块支持安全的 HTTPS 通信。

示例:创建 SSL 套接字
import ssl
import socket

context = ssl.create_default_context()
with socket.create_connection(('www.python.org', 443)) as sock:
    with context.wrap_socket(sock, server_hostname='www.python.org') as ssock:
        print(ssock.version())

12.5.2 防御常见网络攻击

  1. SQL 注入:使用参数化查询。
  2. XSS 攻击:对用户输入进行过滤或转义。
  3. CSRF 攻击:通过添加 CSRF 令牌防护。

12.6 小结

本章内容涵盖了:

  1. 基础网络编程:使用 socket 实现 TCP/UDP 通信。
  2. HTTP 编程:利用 requestsaiohttp 进行 HTTP 请求。
  3. 异步网络编程:基于 asyncio 开发高效的网络服务。
  4. 网络安全编程:介绍 SSL 和常见的安全防护措施。

下一章我们将探讨 Python 数据分析与可视化!📊✨

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上有潜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值