暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python编程进阶(一):Python网络编程基础

一如老师 2024-11-23
347

Python编程进阶(一):Python网络编程基础


前言

亲爱的读者朋友们,大家好!👋

欢迎回到一如老师的公众号,今天是我们的第二十七天更新。在前面的学习中,我们已经掌握了Python的基础知识,并通过项目实战巩固了所学内容。本期,我们将进入Python编程的进阶部分,首先探讨Python网络编程基础

网络编程是当今软件开发的重要组成部分,无论是开发Web应用、网络爬虫,还是实现网络通信,都需要掌握网络编程的相关知识。让我们一起开启Python网络编程的探索之旅吧!🌐🚀


一、网络编程概述

1. 什么是网络编程?

网络编程是指编写程序,实现网络通信的过程。通过网络编程,程序可以在网络上发送和接收数据,实现不同设备或应用之间的交互。

2. 常见的网络协议

  • TCP/IP:传输控制协议/互联网协议,是互联网的核心协议。
  • UDP:用户数据报协议,提供无连接的、不可靠的数据传输。
  • HTTP/HTTPS:超文本传输协议,用于万维网数据传输。

3. Python中的网络编程模块

  • socket:Python标准库中的套接字接口,支持底层网络通信。
  • requests:第三方库,简化了HTTP请求的处理。

二、使用 socket
模块进行网络编程

1. 套接字简介

套接字(socket)是网络通信的端点,可以在网络中发送或接收数据。

2. 基本使用步骤

  • 创建套接字
  • 绑定地址和端口(服务器端)
  • 监听连接(服务器端)
  • 连接服务器(客户端)
  • 发送和接收数据
  • 关闭套接字

3. 示例:创建一个简单的TCP服务器和客户端

服务器端代码(server.py)

import socket

def tcp_server():
    # 创建TCP套接字
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定地址和端口
    server_socket.bind(('localhost'8888))
    # 开始监听
    server_socket.listen(5)
    print("服务器已启动,等待客户端连接...")

    while True:
        # 接受客户端连接
        client_socket, addr = server_socket.accept()
        print(f"客户端已连接:{addr}")
        # 接收数据
        data = client_socket.recv(1024).decode('utf-8')
        print(f"收到客户端消息:{data}")
        # 发送回复
        client_socket.send("服务器已收到你的消息!".encode('utf-8'))
        # 关闭客户端套接字
        client_socket.close()

if __name__ == '__main__':
    tcp_server()

客户端代码(client.py)

import socket

def tcp_client():
    # 创建TCP套接字
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 连接服务器
    client_socket.connect(('localhost'8888))
    # 发送数据
    client_socket.send("你好,服务器!".encode('utf-8'))
    # 接收回复
    data = client_socket.recv(1024).decode('utf-8')
    print(f"收到服务器回复:{data}")
    # 关闭套接字
    client_socket.close()

if __name__ == '__main__':
    tcp_client()

运行结果

  • 服务器端
服务器已启动,等待客户端连接...
客户端已连接:('127.0.0.1', 12345)
收到客户端消息:你好,服务器!

  • 客户端
收到服务器回复:服务器已收到你的消息!


三、使用 requests
库发送HTTP请求

1. requests
库简介

requests
是一个用于发送HTTP请求的第三方库,简化了网络请求的处理,被称为Python最友好的HTTP库。

2. 安装 requests

pip install requests

3. 发送GET请求

import requests

response = requests.get('https://api.github.com')
print(response.status_code)  # 输出状态码
print(response.headers['content-type'])  # 输出响应头
print(response.text)  # 输出响应内容

4. 发送POST请求

import requests

payload = {'username''testuser''password''testpass'}
response = requests.post('https://httpbin.org/post', data=payload)
print(response.json())  # 输出JSON响应内容

5. 处理响应

import requests

response = requests.get('https://api.github.com')

# 检查响应状态码
if response.status_code == 200:
    data = response.json()
    print(data)
else:
    print(f"请求失败,状态码:{response.status_code}")


四、实践案例

1. 网络爬虫:爬取网页标题

需求描述

使用 requests
获取网页内容,使用 re
模块提取网页标题。

示例代码

import requests
import re

def get_page_title(url):
    response = requests.get(url)
    if response.status_code == 200:
        html = response.text
        # 使用正则表达式提取<title>标签内容
        title = re.search(r'<title>(.*?)</title>', html, re.IGNORECASE)
        if title:
            print(f"网页标题:{title.group(1)}")
        else:
            print("未找到网页标题。")
    else:
        print(f"请求失败,状态码:{response.status_code}")

url = input("请输入网址:")
get_page_title(url)

运行结果

请输入网址:https://www.python.org
网页标题:Welcome to Python.org

2. 简单的HTTP服务器

需求描述

使用 http.server
模块创建一个本地HTTP服务器,提供简单的网页服务。

示例代码

from http.server import HTTPServer, SimpleHTTPRequestHandler

def run_server():
    server_address = (''8000)
    httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)
    print("HTTP服务器已启动,监听端口8000...")
    httpd.serve_forever()

if __name__ == '__main__':
    run_server()

运行结果

在浏览器中访问 http://localhost:8000
,即可看到当前目录下的文件列表。


五、小结

通过本节的学习,我们初步了解了Python网络编程的基础知识。我们学习了如何使用 socket
模块进行TCP通信,实现简单的服务器和客户端。同时,我们学习了如何使用 requests
库发送HTTP请求,获取网络资源。

网络编程是一个广阔的领域,后续我们将深入学习更高级的网络编程技术,如多线程网络编程、异步IO,以及使用高级框架进行网络应用开发。


六、实践与思考

实践:

  1. UDP通信

    使用 socket
    模块,实现一个简单的UDP服务器和客户端,完成消息的发送和接收。

  2. 网页内容分析

    编写程序,获取指定网页的内容,提取其中的所有链接,并保存到文件中。

思考:

  • 网络协议选择

    在网络编程中,如何根据应用需求选择合适的网络协议(TCP/UDP)?

  • 异常处理与网络安全

    在网络通信中,如何处理各种异常情况,并保证通信的安全性和可靠性?


七、加入我们的知识星球!

想要获取更多的学习资源和指导吗?加入我们的 「一如老师的编程与设计星球」,你将获得:

  • 独家学习资料:丰富的教程、源码、笔记等资源。
  • 答疑解惑:一对一的学习问题解答,助你突破难点。
  • 项目实战:参与真实项目,提升实战能力,积累经验。
  • 职业指导:提供就业、面试等方面的建议,助你迈向理想职业。

扫码立即加入,和更多志同道合的伙伴一起成长!

 


八、加入我们的学习群!

为了更好地交流和学习,欢迎大家加入 「一如老师编程设计交流中心」,与更多的朋友一起进步!

  • QQ群号:965696190
  • 微信群:扫描下方二维码加入

 


九、期待你的反馈!

如果你在学习过程中有任何疑问,或者有好的建议和想法,欢迎在下方留言。我会尽快回复你的疑问。


十、下期预告

下一期,我们将继续学习Python编程进阶(二):多线程与多进程编程。我们将探讨如何使用线程和进程来提高程序的性能和效率。敬请期待!


版权声明

本文为原创内容,转载请注明出处。


喜欢这篇文章吗?

如果觉得本篇内容对你有帮助,请点击右下角的“赞”和“在看”,并分享给更多的朋友!你的支持是我持续创作的动力!❤️


文章转载自一如老师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论