| 30天学会Python编程:16.Python网络编程
					当前位置:点晴教程→知识管理交流
					
					→『 技术文档交流 』
					
				 
 
 | 
Python标准库中的HTTP客户端实现:
from http.client import HTTPConnection
conn = HTTPConnection("example.com")  # 创建连接
conn.request("GET", "/")  # 发送GET请求
resp = conn.getresponse()  # 获取响应
print(resp.status, resp.reason)  # 状态码和原因短语
print(resp.read().decode()[:100])  # 读取响应内容
第三方库,提供更简洁的API:
import requests
# GET请求示例
resp = requests.get("https://api.github.com/events")
print(resp.json()[0]['id'])  # 解析JSON响应
# POST请求示例
resp = requests.post("https://httpbin.org/post", 
                    data={'key': 'value'},  # 表单数据
                    headers={'X-Test': 'true'})  # 自定义请求头
print(resp.json())  # 输出JSON响应
HTTP编程技巧:
WebSocket提供全双工通信通道,适合实时应用。
import asyncio
import websockets
# 服务端实现
asyncdefecho(websocket):
    asyncfor message in websocket:
        await websocket.send(f"Echo: {message}")
asyncdefws_server():
    asyncwith websockets.serve(echo, "localhost", 8765):
        await asyncio.Future()  # 永久运行
# 客户端实现
asyncdefws_client():
    asyncwith websockets.connect("ws://localhost:8765") as ws:
        await ws.send("Hello WebSocket!")
        print(await ws.recv())  # 接收响应
# 启动服务端和客户端
asyncdefmain():
    server = asyncio.create_task(ws_server())
    await asyncio.sleep(1)  # 等待服务端启动
    await ws_client()
    server.cancel()
asyncio.run(main())
WebSocket特点:
异步I/O允许单线程处理多个并发连接。
import asyncio
asyncdefhandle_echo(reader, writer):
    data = await reader.read(100)  # 异步读取数据
    message = data.decode()
    writer.write(data.upper())  # 发送响应
    await writer.drain()  # 等待写入完成
    writer.close()  # 关闭连接
asyncdefasync_tcp_server():
    server = await asyncio.start_server(
        handle_echo, '127.0.0.1', 8888)
    asyncwith server:
        await server.serve_forever()  # 永久运行
asyncdefasync_tcp_client():
    reader, writer = await asyncio.open_connection(
        '127.0.0.1', 8888)
    writer.write(b"hello world")  # 发送数据
    data = await reader.read(100)  # 等待响应
    print(f"Received: {data.decode()}")
    writer.close()  # 关闭连接
asyncdefmain():
    server = asyncio.create_task(async_tcp_server())
    await asyncio.sleep(1)  # 等待服务器启动
    await async_tcp_client()
    server.cancel()  # 停止服务器
asyncio.run(main())
异步编程优势:
关键概念:
from http.server import HTTPServer, BaseHTTPRequestHandler
import json
classAPIHandler(BaseHTTPRequestHandler):
    defdo_GET(self):
        ifself.path == '/api/data':
            self.send_response(200)  # 成功状态码
            self.send_header('Content-Type', 'application/json')
            self.end_headers()
            data = {'status': 'ok', 'data': [1,2,3]}
            self.wfile.write(json.dumps(data).encode())  # 发送JSON响应
        else:
            self.send_error(404)  # 资源未找到
defrun_server():
    server = HTTPServer(('localhost', 8000), APIHandler)
    print("Server started on http://localhost:8000")
    server.serve_forever()  # 启动服务器
import socket
import time
from concurrent.futures import ThreadPoolExecutor
defcheck_port(host, port, timeout=1):
    """检查端口是否开放"""
    try:
        with socket.create_connection((host, port), timeout=timeout):
            returnTrue
    except (socket.timeout, ConnectionRefusedError):
        returnFalse
defnetwork_scanner(host, ports, max_workers=50):
    """多线程端口扫描器"""
    open_ports = []
    
    defworker(port):
        if check_port(host, port):
            open_ports.append(port)
            print(f"Port {port} is open")
    
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        executor.map(worker, ports)  # 并行执行端口检查
    
    returnsorted(open_ports)
# 使用示例
if __name__ == '__main__':
    host = 'example.com'
    ports = range(1, 1025)  # 扫描1-1024端口
    start = time.time()
    open_ports = network_scanner(host, ports)
    print(f"扫描完成,耗时 {time.time()-start:.2f}秒")
    print(f"{host} 开放端口: {open_ports}")
网络工具开发技巧:

学习路径建议:
掌握Python网络编程是开发现代分布式应用的基础技能。通过本指南,我们已学习从底层Socket通信到高级异步网络应用的全面知识。继续实践这些概念,够构建高效、可靠的网络应用和服务。
阅读原文:原文链接