【python】如何自己开发 一个Web服务器

PythonWeb开发项目完整案例(详细教程) PythonWeb开发是使用Python语言进行Web应用程序开发的过程。Python是一种简洁、易读且功能强大的编程语言,因此在Web开发领域广受欢迎。 阅读详情
  • HTTP 请求报文格式:
Host: 127.0.0.1:8888
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

image
- HTTP 响应报文格式:

HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Wed, 14 Mar 2018 09:52:48 GMT
Server: BWS/1.1

image

采用 TCP 协议创建 socket 套接字对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 复用端口
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # 绑定 IP 和端口
    server_socket.bind(('', 8888))
    # 开启监听,由主动模式变为被动模式
    server_socket.listen()
等待客户端的连接,并接收客户端请求数据
        # 等待客户端连接
        new_socket, client_addr = server_socket.accept()
        # 接收浏览器发送的请求
        recv_data = new_socket.recv(1024).decode()
        # 防止客户端下线导致bug
        if not recv_data:
            print("客户端下线!")
            new_socket.close()
            continue
解析请求并返回数据
        # 从请求行获取路径信息
        data_list = recv_data.splitlines()
        request_line = data_list[0]
        regex = re.match(r'.* (.*) .*', request_line)
        file_path = regex.group(1)
        if file_path == '/':
            file_path = '/myWeChat.html'
        try:
            # 采用二进制读取本地文件内容(方便读取图片等非文本文件)
            with open(f'.{file_path}', 'rb') as f:
                response_body = f.read()
        except Exception as reason:
            # 没有相关文件资源时返回 404 错误
            response_line = "HTTP/1.1 404 Not Found\r\n"
            response_headers = "Server: WASPVAE/6.6\r\n"
            response_headers += "Connection: Keep_Alive\r\n"
            response_headers += "Content-Type: text/html;charset=utf-8\r\n"  # 解决中文乱码问题
            response_headers += "\r\n"
            response_body = f'<h2>404 {reason}</h2>'.encode()
        else:
            # 解析请求
            response_line = "HTTP/1.1 200 OK\r\n"
            response_headers = "Server: WASPVAE/6.6\r\n"
            response_headers += "Connection: Keep_Alive\r\n"
            response_headers += "Content-Type: text/html;charset=utf-8\r\n"  # 解决中文乱码问题
            response_headers += "\r\n"
        finally:
            # 响应请求并返回数据
            response = response_line + response_headers
            new_socket.send(response.encode() + response_body)
            # 关闭
            new_socket.close()
        # 从请求行获取路径信息
        data_list = recv_data.splitlines()
        request_line = data_list[0]
        regex = re.match(r'.* (.*) .*', request_line)
        file_path = regex.group(1)

该代码可以显示指定页面

if file_path == '/':
    file_path = '/myWeChat.html'

该代码可以设置默认首页

完整代码:
import re
import socket


if __name__ == '__main__':
    """返回固定的页面数据"""
    # 采用 TCP 协议创建 socket 对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 使端口重复使用
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # 绑定 IP 和端口
    server_socket.bind(('', 8888))
    # 开启监听,由主动模式变为被动模式
    server_socket.listen()
    while True:
        # 等待客户端连接
        new_socket, client_addr = server_socket.accept()
        # 接收浏览器发送的请求
        recv_data = new_socket.recv(1024).decode()
        # 防止客户端下线导致bug
        if not recv_data:
            print("客户端下线!")
            new_socket.close()
            continue
        # 从请求行获取路径信息
        data_list = recv_data.splitlines()
        request_line = data_list[0]
        regex = re.match(r'.* (.*) .*', request_line)
        file_path = regex.group(1)
        if file_path == '/':
            file_path = '/myWeChat.html'
        try:
            # 采用二进制读取本地文件内容(方便读取图片等非文本文件)
            with open(f'.{file_path}', 'rb') as f:
                response_body = f.read()
        except Exception as reason:
            response_line = "HTTP/1.1 404 Not Found\r\n"
            response_headers = "Server: WASPVAE/6.6\r\n"
            response_headers += "Connection: Keep_Alive\r\n"
            response_headers += "Content-Type: text/html;charset=utf-8\r\n"  # 解决中文乱码问题
            response_headers += "\r\n"
            response_body = f'<h2>404 {reason}</h2>'.encode()
        else:
            # 解析请求
            response_line = "HTTP/1.1 200 OK\r\n"
            response_headers = "Server: WASPVAE/6.6\r\n"
            response_headers += "Connection: Keep_Alive\r\n"
            response_headers += "Content-Type: text/html;charset=utf-8\r\n"  # 解决中文乱码问题
            response_headers += "\r\n"
        finally:
            # 响应请求并返回数据
            response = response_line + response_headers
            new_socket.send(response.encode() + response_body)
            # 关闭
            new_socket.close()

一个 web 服务器开发完了。等等,这个服务器好像有点问题,当一个客户端连接时其他客户端就没法连接了。我开发服务器并不是为一个人服务,开发服务器也要符合社会主义核心价值观,要为人民服务。

通过多协程实现多用户处理
import re
import socket
from gevent import monkey
import gevent
# 可以简单理解为将一些模块变为非阻塞,具体解释需要上网查阅资料
monkey.patch_all()


def handle_request(new_socket):
        # 接收浏览器发送的请求
        recv_data = new_socket.recv(1024).decode()
        # 防止客户端下线导致bug
        if not recv_data:
            print("客户端下线!")
            new_socket.close()
            return
        # 从请求行获取路径信息
        data_list = recv_data.splitlines()
        request_line = data_list[0]
        regex = re.match(r'.* (.*) .*', request_line)
        file_path = regex.group(1)
        if file_path == '/':
            file_path = '/myWeChat.html'
        try:
            # 采用二进制读取本地文件内容(方便读取图片等非文本文件)
            with open(f'.{file_path}', 'rb') as f:
                response_body = f.read()
        except Exception as reason:
            response_line = "HTTP/1.1 404 Not Found\r\n"
            response_headers = "Server: WASPVAE/6.6\r\n"
            response_headers += "Connection: Keep_Alive\r\n"
            response_headers += "Content-Type: text/html;charset=utf-8\r\n"  # 解决中文乱码问题
            response_headers += "\r\n"
            response_body = f'<h2>404 {reason}</h2>'.encode()
        else:
            # 解析请求
            response_line = "HTTP/1.1 200 OK\r\n"
            response_headers = "Server: WASPVAE/6.6\r\n"
            response_headers += "Connection: Keep_Alive\r\n"
            response_headers += "Content-Type: text/html;charset=utf-8\r\n"  # 解决中文乱码问题
            response_headers += "\r\n"
        finally:
            # 响应请求并返回数据
            response = response_line + response_headers
            new_socket.send(response.encode() + response_body)
            # 关闭
            new_socket.close()
def main():
    """程序主入口,实现 web 服务器功能"""
    # 采用 TCP 协议创建 socket 对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 使端口重复使用
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # 绑定 IP 和端口
    server_socket.bind(('', 8888))
    # 开启监听,由主动模式变为被动模式
    server_socket.listen()
    while True:
        # 等待客户端连接
        new_socket, client_addr = server_socket.accept()
        gevent.spawn(handle_request, new_socket)

if __name__ == '__main__':
    main()

总感觉还是差了点什么,哦,对了,python 是面向对象语言,这个代码没有对象啊,现实中没有对象,写个代码还没有对象,一万点暴击伤害。下面来个终极版的面向对象封装

import re
import socket
from gevent import monkey
import gevent

monkey.patch_all()  # 可以简单理解为使一些模块变为非阻塞,具体原理可以上网查询资料


class WebServer:
    def __init__(self):
        self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
        self.server_socket.bind(('', 8888))
        self.server_socket.listen()

    def handle_request(self, new_socket):
        """处理请求并完成响应操作"""
        # 接收浏览器发送的请求
        recv_data = new_socket.recv(1024).decode()
        # 防止客户端下线导致bug
        if not recv_data:
            print("客户端下线!")
            new_socket.close()
            return
        # 从请求行获取路径信息
        data_list = recv_data.splitlines()
        request_line = data_list[0]
        regex = re.match(r'.* (.*) .*', request_line)
        file_path = regex.group(1)
        if file_path == '/':
            file_path = '/myWeChat.html'
        try:
            # 采用二进制读取本地文件内容(方便读取图片等非文本文件)
            with open(f'.{file_path}', 'rb') as f:
                response_body = f.read()
        except Exception as reason:
            response_line = "HTTP/1.1 404 Not Found\r\n"
            response_headers = "Server: WASPVAE/6.6\r\n"
            response_headers += "Connection: Keep_Alive\r\n"
            response_headers += "Content-Type: text/html;charset=utf-8\r\n"  # 解决中文乱码问题
            response_headers += "\r\n"
            response_body = f'<h2>404 {reason}</h2>'.encode()
        else:
            # 解析请求
            response_line = "HTTP/1.1 200 OK\r\n"
            response_headers = "Server: WASPVAE/6.6\r\n"
            response_headers += "Connection: Keep_Alive\r\n"
            response_headers += "Content-Type: text/html;charset=utf-8\r\n"  # 解决中文乱码问题
            response_headers += "\r\n"
        finally:
            # 响应请求并返回数据
            response = response_line + response_headers
            new_socket.send(response.encode() + response_body)
            # 关闭
            new_socket.close()

    def run(self):
        """运行服务器,接收客户端的请求,处理请求并完成响应操作"""
        while True:
            # 等待客户端连接
            new_socket, client_addr = self.server_socket.accept()
            gevent.spawn(self.handle_request, new_socket)


def main():
    """程序主入口,实现 web 服务器功能"""
    web_server = WebServer()
    web_server.run()


if __name__ == '__main__':
    main()

可以在项目当前文件夹添加几个 html 文件在浏览器输入 localhost:8888/xxx.html 或者 127.0.0.1:8888/xxx.html测试下
有兴趣的朋友可以关注下我的微信个人订阅号python数据之路,里面有我之前自学 python 的一些资料和在黑马学习的心得与笔记。

Python之Django框架开发Web应用,并部署到服务器 部署web应用 阅读详情

相关推荐

【100天精通Python】Day47:Python网络编程_Web开发:web服务器,前端基础以及静态服务器

Web开发涵盖了创建和维护在互联网上运行的网站和Web应用程序所需的一系列技术和流程。相较于网络编程,Web编程则更加专注于开发基于Web的应用程序,即使用HTTP协议进行通信的应用程序。Web编程侧重于开发网站、Web应用或Web服务。本文介绍web服务器,前端基础以及静态服务器等相关知识与技术。

qq_35831906的博客 2802

【Python入门系列】第十四篇:Python Web开发

PythonWeb开发是使用Python语言进行Web应用程序开发的过程。Python是一种简洁、易读且功能强大的编程语言,因此在Web开发领域广受欢迎。PythonWeb开发可以涵盖多个方面,包括服务器端开发、数据库管理、前端设计和API开发等。在服务器端开发中,常用的Python Web框架有Django、Flask和Bottle等。这些框架提供了一套工具和结构,使得开发者能够更高效地构建Web应用程序。在PythonWeb开发中,数据库管理也是一个重要的方面。

杰西笔记 1万+

Labview 机器视觉(4)之 图像处理进阶 - 动态ROI与批量保存

本文深入探讨了LabVIEW机器视觉中动态ROI与批量保存两大进阶技术。动态ROI通过模式匹配或粒子分析实现检测区域的自动追踪,解决了产品位置变化带来的挑战。同时,文章详细介绍了如何设计高效的文件命名规则与异步保存机制,以实现海量图像数据的批量保存与管理,从而构建稳定、高效的工业自动化检测系统。

weixin_29234423的博客 219

【小沐学Python】Python实现Web服务器(FastAPI)

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。. 快速 :可与 NodeJS 和 Go 比肩的极高性能(归功于 Starlette 和

爱看书的小沐 6810

FreeRTOS面试题汇总

如果一个低优先级的任务持有一个信号量,高优先级的任务想要用这个信号量,造成的死锁怎么解决。12.FreeRTOS的多任务之间如何去进行通信的,什么方法,它实现原理是什么。任务间数据传输一共有三种形式,用的最多的是消息队列,其次是全局变量和信号量。简历上写了了解RTOS,问了rtos的问题,用过哪些函数。讲解FreeRtos原理,调度机制,底层原理,代码调用。FreeRTOS,你的三个任务控制,请问你是怎么实现的。freertos中EventBits_t是干啥的?freertos使任务切换的方式有哪些?

weixin_45636780的博客 1万+

基于AXI PCIE IP的FPGA PCIE卡示意图

如果在上图中的AXI互联IP上再连接一个带AXI Slave接口的BRAM控制器,这个BRAM控制器连接一个BRAM,Host PC在系统主存中分配了一些不连续的内存,Host PC可以将这些内存段的起始地址(当然要先转为PCIE总线地址)写到AXI总线上的BRAM中,这样AXI CDMA读取BRAM,将读取到的PCIE总线基地址写到AXIPCIE寄存器块中的AXIBAR2PCIEBAR_n寄存器中,这样就实现了SG DMA。通过动态改变AXIBAR2PCIEBAR_n寄存器的值,可以实现多通道DMA。

csdn_gddf102384398的博客 1623

超详细!小白入门PythonWeb开发详解!

FastAPI 是 Python 开发的一个开源 Web 框架,几乎包括了 Web 应用的所有内容,可用于快速搭建高性能、优雅的网站应用。最主要的是,FastAPI 提供了 Web 开发经常使用到的模块,包括自动生成接口文档等,使开发者能够专注业务部分。

weixin_68789096的博客 1万+

STM32H5 USB虚拟串口:用Classic驱动移植CDC实践

USB虚拟串口(CDC)是嵌入式系统最常用的主机通信方式之一,本质是借助USB协议模拟串口收发,无需额外驱动即可在PC上生成COM口。其实现依赖USB设备协议栈完成枚举、控制传输与批量传输。传统USBD Classic库不依赖RTOS,代码轻量、调用链短,非常适合裸机或轻量状态机架构;而USBX功能强大但需要ThreadX内核,资源开销较大。在电机控制器、传感器采集等场景中,日志输出与参数配置仅需简单的双向数据通道,Classic驱动往往更务实。本文基于STM32H5平台,详细梳理了使用Classic驱动移

weixin_29178069的博客 334

Python Web开发入门教程(非常详细)

Python是一种非常流行的编程语言,被广泛应用于数据科学、Web开发、人工智能、机器学习等领域。Python语言易学易用,是许多初学者进入编程世界的入门选择。然而,学习Python并不是一件简单的事情,尤其是对于初学者而言。在本文中,我们将提供一些Python学习方法,以及如何使用Flask框架来深入了解Python的Web开发。首先,学习Python最好的方法之一是通过互动式教程,例如Codecademy、DataCamp等平台。

Python84310366的博客 3144

vue支付项目-APP支付宝支付功能

如果用户已安装支付宝客户端,商家 App 唤起支付宝完成支付,支付完后跳回到商家 App 内,最后展示支付结果。如果用户没有安装支付宝客户端,商家 App 内会调起支付宝网页支付收银台,用户登录支付宝账号,支付完后展示支付结果。1.点击按钮开通或者续费,会验证是否选择会员商品以及对协议是否查看选中(这里根据项目需要自行验证,可忽略),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;1.判断支付方式,如果是2,则是支付宝支付方式。

总结前端开发中遇到的问题,分享前端知识 1万+

Python与CAD系列基础篇(十)图形复制、移动、删除

①通过pyautocad连接AutoCAD进行处理②通过ezdxf处理dxf格式文件。进行图形复制、移动、删除的方法。pyautocad方式。pyautocad方式。

weixin_43894929的博客 2210

pythonweb开发用什么服务器_python做web开发时用的是什么服务器?

python做web开发时用的是什么服务器?为什么说这个问题?今天一个小伙伴提了一个问题,如下图: 这应该是参考我的文章:《Python入门》第一个Python Web程序——简单的Web服务器但是他想访问执行一个 python 文件,结果呢,把源代码显示出来了!创建测试文件:test.py#!/usr/bin/env pythonprint "200 OK"print "Content-Type...

weixin_28829339的博客 949

UniApp 覆盖安装后首次进入 APP pages.json 不生效的解决方案

通过以上步骤,解决了缓存问题导致的首次加载异常。此方案的关键在于强制更新文件名,从根本上避免旧缓存的干扰。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 681

Python开发语言:如何实现一个简单的Web服务器

下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】​​​。

Hacker_Oldv的博客 479

汽车OTA 测试用例

汽车OTA 测试用例

天赐好车的博客 973

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Python 开发一个 Web 服务器

利用 Python 开发一个可以一次处理一个 HTTP 请求的 Web 服务器,该服务器可以接受并解析HTTP 请求,然后从服务器的文件系统中读取被 HTTP 请求的文件,并根据该文件是否存在而向客户端发送正确的响应消息,

mainjay 1713

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

python web开发项目 源码_python + flask 服务器的首选web开发

小编最近开发了:AI人工智能工具 的微信小程序,其中有些服务需要服务器的开发,由于使用功能简单,小编使用了python + flask 作为 了web服务器的开发,为小程序进行后台服务从本期开始,我们一起进入flask的世界吧Flask 是一个微型的 Python 开发的 Web 框架,基于Werkzeug WSGI工具箱和Jinja2 模板引擎。Flask使用BSD授权。Flask也被...

weixin_39633437的博客 352

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

python web 服务器_python做web开发时用的是什么服务器?

python做web开发时用的是什么服务器?qMQ编程技术_踩坑日志_进阶指南_无知人生为什么说这个问题?今天一个小伙伴提了一个问题,如下图:qMQ编程技术_踩坑日志_进阶指南_无知人生qMQ编程技术_踩坑日志_进阶指南_无知人生这应该是参考我的文章:《Python入门》第一个Python Web程序——简单的Web服务器qMQ编程技术_踩坑日志_进阶指南_无知人生但是他想访问执行一个 pytho...

weixin_40006965的博客 162

python的web是用什么容器_Python web开发你需要理解的一些服务器概念

1.Python web开发你需要理解的一些服务器概念前几日在生产服务器上部署Python web.py的一个项目,发现自己对服务器的一些概念不是很明白,遂查资料看了一会,特此做出个人的一些算是笔试的总结吧,以便之后可以回顾2.WSGI全称是Web Server Gateway Interface,WSGI不是服务器,也不是API或者Python的什么模块之类的,它只是一种Python web的一...

weixin_39788703的博客 779

Python高级_第3章_HTTP协议与静态Web服务器开发

**Python高级_第3章_HTTP协议与静态Web服务器开发** 学习目标 一、HTTP协议概述 1、网址URL 2、URL的组成 3、HTTP协议 ☆ 场景导入 ☆ 什么是HTTP协议? ☆ HTTP协议的概念及作用 ☆ 浏览器访问Web服务器的过程 二、HTTP请求报文与响应报文 1、HTTP请求报文 2、GET请求报文格式 3、GET请求报文分析 4、POST请求报文格式 5、POST请求报文分析 6、GET与POST请求报文小结 7、HTTP 响应报文分析(重点) 8、HTTP响应状态码 三、查

无 323

python flask web开发 可视化开发_使用python的flask做WEB开发已经有半个多月的时间了,磨磨唧唧滴做了一个WEB后台,到了服务器部署阶段,一个服务器部署折腾了我五个晚上,下面...

使用python的flask做WEB开发已经有半个多月的时间了,磨磨唧唧滴做了一个WEB后台,到了服务器部署阶段,一个服务器部署折腾了我五个晚上,下面说说遇到的坑!先说下部署环境:1、centos 7系统2、LNMP一键环境包3、python的flask包,使用tornado独立 WSGI 容器最大的坑!网络:centos的YUM源一定要换成国内的,不然在下载其他依赖组件有时会造成错误,下载失败整...

weixin_42332144的博客 140

python web服务器(一):web应用服务的认知、python web开发框架

FLASK 文章目录FLASK一、web应用服务的认知二、python web开发框架三 wsgi案例 一、web应用服务的认知 二、python web开发框架 三 wsgi案例 相关文档: Flask 官方文档:https://flask.palletsprojects.com/en/1.1.x/ Flask 中文文档:https://dormousehole.readthedocs.io/en/latest/ ...

m0_50134014的博客 196

python前端开发服务器_Python 开发web服务器,多线程

https://blog.youkuaiyun.com/u012887259/article/details/102425450https://blog.youkuaiyun.com/u012887259/article/details/102425450https://www.jianshu.com/p/27a8cd3ec0f2https://blog.youkuaiyun.com/u012887259/article/detai...

weixin_39795116的博客 144

使用Python开发轻量级的Web框架以及基于WSGI的服务器来实现一个网站页面

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目说明 二丶数据准备 三丶使用网络TCP开发一个基于WSGI协议的Web服务器 四丶使用python3开发一个轻量级的Web框架 五丶在框架中实现添加股票功能 六丶在框架中实现删除股票功能 七丶在框架中实现修改股票功能 一丶项目说明 1.实现过程 用户通过浏览器向Web服务器请求资源,Web服...

cdtaogang's blog 5万+

python是服务器端语言吗_python做web开发时用的是什么服务器?-Go语言中文社区

python做web开发时用的是什么服务器?为什么说这个问题?今天一个小伙伴提了一个问题,如下图:这应该是参考我的文章:《Python入门》第一个Python Web程序——简单的Web服务器但是他想访问执行一个 python 文件,结果呢,把源代码显示出来了!创建测试文件:test.py#!/usr/bin/env pythonprint "200 OK"print "Content-Type:...

weixin_39733821的博客 615

Python web开发你需要理解的一些服务器概念

1.Python web开发你需要理解的一些服务器概念   前几日在生产服务器上部署Python web.py的一个项目,发现自己对服务器的一些概念不是很明白,遂查资料看了一会,特此做出个人的一些算是笔试的总结吧,以便之后可以回顾 2.WSGI   全称是Web Server Gateway Interface,WSGI不是服务器,也不是...

weixin_33814685的博客 160
上一篇: 一文读懂 with ... as 原理
下一篇: 【python】property 的详细使用方法
Waspvae
博客等级 码龄10年 34粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值