翼度科技»论坛 编程开发 python 查看内容

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

3

主题

3

帖子

9

积分

新手上路

Rank: 1

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

Socket是网络编程的基石。Python的socket模块提供了一套简单的API,可以帮助我们快速地建立网络连接。让我们先来看一个简单的服务器和客户端之间通信的例子:
服务器端:
  1. import socket
  2. # 创建 socket 对象
  3. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  4. # 绑定端口
  5. s.bind(('localhost', 12345))
  6. # 设置最大连接数,超过后排队
  7. s.listen(5)
  8. while True:
  9.     # 建立客户端连接
  10.     c, addr = s.accept()      
  11.     print ('Got connection from', addr)
  12.    
  13.     # 发送数据
  14.     c.send('Thank you for connecting'.encode())
  15.    
  16.     # 关闭连接
  17.     c.close()               
复制代码
客户端:
  1. import socket              
  2. # 创建 socket 对象
  3. s = socket.socket()         
  4. # 连接到服务器
  5. s.connect(('localhost', 12345))
  6. # 接收数据
  7. print (s.recv(1024).decode())
  8. s.close()                     
复制代码
运行服务器端代码,然后运行客户端代码,输出如下:
  1. Got connection from ('127.0.0.1', 51768)
  2. Thank you for connecting
复制代码
这里使用的是TCP协议进行通信,TCP是一种面向连接的协议,它保证了两台计算机之间的稳定通信。
Socket编程基础及其实践

如上所述,Socket是网络编程的基石。Python的socket模块提供了一套简单的API,以帮助我们快速地建立网络连接。让我们通过一个聊天室应用来更深入地理解socket编程:
  1. # 这是一个简单的命令行聊天室服务器
  2. import socket
  3. import select
  4. server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  5. server_socket.bind(('localhost', 12345))
  6. server_socket.listen(10)
  7. inputs = [server_socket]
  8. while inputs:
  9.     rs, _, _ = select.select(inputs, [], [])
  10.     for r in rs:
  11.         if r is server_socket:
  12.             client_socket, _ = r.accept()
  13.             inputs.append(client_socket)
  14.         else:
  15.             msg = r.recv(1024)
  16.             if not msg:
  17.                 inputs.remove(r)
  18.             else:
  19.                 for socket in inputs:
  20.                     if socket is not server_socket:
  21.                         socket.send(msg)
复制代码
这个服务器使用select模块来同时处理多个socket连接。当新的客户端连接进来时,它就将这个新的socket添加到输入列表中。当服务器收到一个消息时,它就将这个消息转发给所有其他的客户端。
HTTP网络请求

在Python中,我们常常使用requests库进行HTTP请求。它的使用方法非常直观,让我们看一个简单的例子:
  1. import requests
  2. # 发起 GET 请求
  3. response = requests.get('https://www.example.com')
  4. # 输出响应的文本信息
  5. print(response.text)
复制代码
HTTP网络请求及其高级用法

在Python中,我们常常使用requests库进行HTTP请求。然而,requests库除了基础的GET,POST请求之外,还支持更多高级的功能,比如session对象、cookie处理和代理设置等。
比如我们可以使用session对象来维持一个会话,这在需要登录后才能访问的网站上非常有用:
  1. import requests
  2. s = requests.Session()
  3. # 先进行登录
  4. s.post('http://httpbin.org/post', data = {'key':'value'})
  5. # 然后访问需要登录后才能看到的页面
  6. r = s.get('http://httpbin.org/cookies')
  7. print(r.text)
复制代码
异步IO网络编程

Python的 asyncio 库为我们提供了异步IO的能力,让我们可以在网络编程中实现更高效的IO操作。下面是一个简单的异步网络请求的例子:
  1. import asyncio
  2. import aiohttp
  3. async def fetch(session, url):
  4.     async with session.get(url) as response:
  5.         return await response.text()
  6. async def main():
  7.     async with aiohttp.ClientSession() as session:
  8.         html = await fetch(session, 'http://python.org')
  9.         print(html)
  10. loop = asyncio.get_event_loop()
  11. loop.run_until_complete(main())
复制代码
网络数据抓取

Python的网络编程能力也使其成为网络数据抓取的绝佳工具。比如我们可以使用BeautifulSoup库来解析HTML,并抓取我们需要的信息:
  1. import requests
  2. from bs4 import BeautifulSoup
  3. # 发起请求
  4. r = requests.get('http://example.com')
  5. # 解析HTML
  6. soup = BeautifulSoup(r.text, 'html.parser')
  7. # 抓取所有的链接
  8. links = [a['href'] for a in soup.find_all('a', href=True)]
  9. print(links)
复制代码
Web开发

Python在Web开发方面也表现出色。比如我们可以使用Flask库来快速地开发一个web应用:
  1. from flask import Flask, render_template
  2. app = Flask(__name__)
  3. @app.route("/")
  4. def hello():
  5.     return render_template('index.html')
  6. if __name__ == "__main__":
  7.     app.run()
复制代码
Flask可以让我们快速地创建一个web应用,而且它还支持路由、模板渲染和静态文件等web开发的基础功能。
FTP服务

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

最后,让我分享一个很有用但又很少人知道的技巧:使用Python的http.server模
块快速创建一个简单的web服务器。只需要在命令行中输入以下命令:
  1. python -m http.server
复制代码
这条命令将在你的机器上启动一个简单的HTTP服务器,默认端口为8000。这对于快速分享文件或者进行一些简单的web开发非常有用。
以上就是Python在网络编程方面的基础知识和一些高级用法,希望这些信息能对你有所帮助。
如有帮助,请多关注
个人微信公众号:【Python全视角】
TeahLead_KrisChang,10+年的互联网和人工智能从业经验,10年+技术和业务团队管理经验,同济软件工程本科,复旦工程管理硕士,阿里云认证云服务资深架构师,上亿营收AI产品业务负责人。

来源:https://www.cnblogs.com/xfuture/p/17502303.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具