深入Python网络编程:从基础到实践

news/2024/11/23 3:29:00/

Python,作为一种被广泛使用的高级编程语言,拥有许多优势,其中之一就是它的网络编程能力。Python的强大网络库如socket, requests, urllib, asyncio,等等,让它在网络编程中表现优秀。本文将深入探讨Python在网络编程中的应用,包括了基础的socket编程,到高级的异步IO网络编程,以及我们如何能够充分利用这些工具来开发网络应用。

文章目录

  • Socket编程基础
  • Socket编程基础及其实践
  • HTTP网络请求
  • HTTP网络请求及其高级用法
  • 异步IO网络编程
  • Web开发
  • FTP服务
  • One More Thing...

Socket编程基础

Socket是网络编程的基石。Python的socket模块提供了一套简单的API,可以帮助我们快速地建立网络连接。让我们先来看一个简单的服务器和客户端之间通信的例子:

服务器端:

import socket# 创建 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定端口
s.bind(('localhost', 12345))# 设置最大连接数,超过后排队
s.listen(5) while True:# 建立客户端连接c, addr = s.accept()      print ('Got connection from', addr)# 发送数据c.send('Thank you for connecting'.encode())# 关闭连接c.close()  

客户端:

import socket              # 创建 socket 对象
s = socket.socket()         # 连接到服务器
s.connect(('localhost', 12345))# 接收数据
print (s.recv(1024).decode())
s.close()                    

运行服务器端代码,然后运行客户端代码,输出如下:

Got connection from ('127.0.0.1', 51768)
Thank you for connecting

这里使用的是TCP协议进行通信,TCP是一种面向连接的协议,它保证了两台计算机之间的稳定通信。

Socket编程基础及其实践

如上所述,Socket是网络编程的基石。Python的socket模块提供了一套简单的API,以帮助我们快速地建立网络连接。让我们通过一个聊天室应用来更深入地理解socket编程:

# 这是一个简单的命令行聊天室服务器import socket
import selectserver_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen(10)
inputs = [server_socket]while inputs:rs, _, _ = select.select(inputs, [], [])for r in rs:if r is server_socket:client_socket, _ = r.accept()inputs.append(client_socket)else:msg = r.recv(1024)if not msg:inputs.remove(r)else:for socket in inputs:if socket is not server_socket:socket.send(msg)

这个服务器使用select模块来同时处理多个socket连接。当新的客户端连接进来时,它就将这个新的socket添加到输入列表中。当服务器收到一个消息时,它就将这个消息转发给所有其他的客户端。

HTTP网络请求

在Python中,我们常常使用requests库进行HTTP请求。它的使用方法非常直观,让我们看一个简单的例子:

import requests# 发起 GET 请求
response = requests.get('https://www.example.com')# 输出响应的文本信息
print(response.text)

HTTP网络请求及其高级用法

在Python中,我们常常使用requests库进行HTTP请求。然而,requests库除了基础的GET,POST请求之外,还支持更多高级的功能,比如session对象、cookie处理和代理设置等。

比如我们可以使用session对象来维持一个会话,这在需要登录后才能访问的网站上非常有用:

import requestss = requests.Session()# 先进行登录
s.post('http://httpbin.org/post', data = {'key':'value'})# 然后访问需要登录后才能看到的页面
r = s.get('http://httpbin.org/cookies')
print(r.text)

异步IO网络编程

Python的 asyncio 库为我们提供了异步IO的能力,让我们可以在网络编程中实现更高效的IO操作。下面是一个简单的异步网络请求的例子:

import asyncio
import aiohttpasync def fetch(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(session, 'http://python.org')print(html)loop = asyncio.get_event_loop()
loop.run_until_complete(main())

网络数据抓取
Python的网络编程能力也使其成为网络数据抓取的绝佳工具。比如我们可以使用BeautifulSoup库来解析HTML,并抓取我们需要的信息:

import requests
from bs4 import BeautifulSoup# 发起请求
r = requests.get('http://example.com')# 解析HTML
soup = BeautifulSoup(r.text, 'html.parser')# 抓取所有的链接
links = [a['href'] for a in soup.find_all('a', href=True)]
print(links)

Web开发

Python在Web开发方面也表现出色。比如我们可以使用Flask库来快速地开发一个web应用:

from flask import Flask, render_templateapp = Flask(__name__)@app.route("/")
def hello():return render_template('index.html')if __name__ == "__main__":app.run()

Flask可以让我们快速地创建一个web应用,而且它还支持路由、模板渲染和静态文件等web开发的基础功能。

FTP服务

你知道Python还可以作为一个FTP服务器吗?pyftpdlib是一个强大的,高度可配置的FTP服务器库。它支持FTP的大部分命令,而且由于它是纯Python编写的,所以在任何Python支持的平台上都可以运行。

One More Thing…

最后,让我分享一个很有用但又很少人知道的技巧:使用Python的http.server模

块快速创建一个简单的web服务器。只需要在命令行中输入以下命令:

python -m http.server

这条命令将在你的机器上启动一个简单的HTTP服务器,默认端口为8000。这对于快速分享文件或者进行一些简单的web开发非常有用。

以上就是Python在网络编程方面的基础知识和一些高级用法,希望这些信息能对你有所帮助。

在这里插入图片描述


http://www.ppmy.cn/news/570990.html

相关文章

汽车行业项目管理面临的5个挑战及解决方案

汽车行业正跨越式地迈向新的未来。其目前的发展主要由四大趋势驱动:连接性、自动驾驶汽车、共享出行和电气化。这给汽车企业带来了诸多挑战:竞争加剧,快速发展带来的频繁变化,与软件公司建立伙伴关系,以及其他相关问题…

Chrome浏览器对应chromedriver版本 最新2019

直接参考下表,根据自己的浏览器版本去下载对应的Chromedriver: ChromeDriver版本 Support Chrome版本 2.46 V71-73 2.45 V70-72 2.44 V69-71 2.43 V69-71 2.42 V68-70 2.41 V67-69 2.40 V66-68 2.39 V66-68 2.38 V65-67 2.37 V64-…

如何让antv x6兼容IE浏览器

如何让antv x6兼容IE浏览器: 可以学习anvt G6的方法去处理,亲测有效。 链接地址:https://antv-g6.gitee.io/zh/docs/manual/FAQ/supportIE解决方法: 1、在main.js中,引入babel-polyfill import babel-polyfill;2、在…

Windows 11如何使用IE浏览器

Windows 11已经彻底移除了我们一直使用的IE浏览器。但是众所周知有一些网站还是一定要通过IE访问,怎么办?很简单,使用Microsoft Edge内置的IE模式就可以了。 在开启任意网页时只要选择右上角的三个点 开启后,网页旁边会有一个IE地…

win11系统怎么使用ie浏览器

平常在使用电脑的时,有些网址必须使用ie浏览器才可以打开,所以电脑系统升级到win11后给使用者带来不便,但也有解决方法。电脑里有ie浏览器的图标,但点击进去却是Microsoft Edge浏览器,并不是ie浏览器。其实电脑里还是有…

Win11如何使用IE浏览器

1.下载ieframe.dll文件。(文末有链接。) 2.将此文件复制到C:\Windows\System32。 若没有权限右击ieframe.dll文件->属性->安全->编辑 添加->输入对象名称Administrators点击确定。 点击允许,然后将ieframe.dll再复制到C:\Windo…

Win11启动IE浏览器

Win11启动IE浏览器 升级到Win11以后打开IE浏览器会自动跳转到Edge浏览器 下载地址 提取码:wssb 1.运行注册表文件 ieframe.reg 2.到C:/Windows\System32\ieframe.dll右键TrustedInstall赋予权限 3.复制百度云下载的System32文件夹下的ieframe.dll文件进行覆盖 4.到…

win10在哪打开ie浏览器?windows11怎么打开ie浏览器?

这里写自定义目录标题 Win10系统: 现在很多电脑都用Win10甚至Win11了,很多人刚用这些系统的时候,找不到IE浏览器了(Internet Explorer),哎,我们这些苦逼的知产人,啥时候才能摆脱这些…