多线程
python原创python基础应用简易http服务大约 2 分钟约 604 字
下载文件显示进度条
# -*- coding: UTF-8 -*-
import requests
from tqdm import tqdm
def download(url: str, fname: str):
# 用流stream的方式获取url的数据
resp = requests.get(url, stream=True)
# 拿到文件的长度,并把total初始化为0
total = int(resp.headers.get('content-length', 0))
# 打开当前目录的fname文件(名字你来传入)
# 初始化tqdm,传入总数,文件名等数据,接着就是写入,更新等操作了
with open(fname, 'wb') as file, tqdm(
desc=fname,
total=total,
unit='iB',
unit_scale=True,
unit_divisor=1024,
) as bar:
for data in resp.iter_content(chunk_size=1024):
size = file.write(data)
bar.update(size)
if __name__ == "__main__":
# 下载文件,并传入文件名
url = "https://autoupdate.termius.com/windows/Termius.exe"
download("https://autoupdate.termius.com/windows/Termius.exe", "haha.exe")
简易http服务
import http.server
class RequestHandlerImpl(http.server.BaseHTTPRequestHandler):
"""
自定义一个 HTTP 请求处理器
"""
def do_GET(self):
"""
处理 GET 请求, 处理其他请求需实现对应的 do_XXX() 方法
"""
# print(self.server) # HTTPServer 实例
# print(self.client_address) # 客户端地址和端口: (host, port)
# print(self.requestline) # 请求行, 例如: "GET / HTTP/1.1"
# print(self.command) # 请求方法, "GET"/"POST"等
# print(self.path) # 请求路径, Host 后面部分
# print(self.headers) # 请求头, 通过 headers["header_name"] 获取值
# self.rfile # 请求输入流
# self.wfile # 响应输出流
# 1. 发送响应code
self.send_response(200)
# 2. 发送响应头
self.send_header("Content-Type", "text/html; charset=utf-8")
self.end_headers()
if "/home"==self.path:
# 3. 发送响应内容(此处流不需要关闭)
self.wfile.write("home\n".encode("utf-8"))
def do_POST(self):
"""
处理 POST 请求
"""
# 0. 获取请求Body中的内容(需要指定读取长度, 不指定会阻塞)
req_body = self.rfile.read(int(self.headers["Content-Length"])).decode()
print("req_body: " + req_body)
# 1. 发送响应code
self.send_response(200)
# 2. 发送响应头
self.send_header("Content-Type", "text/html; charset=utf-8")
self.end_headers()
# 3. 发送响应内容(此处流不需要关闭)
self.wfile.write(("Hello World: " + req_body + "\n").encode("utf-8"))
# 服务器绑定的地址和端口
server_address = ("", 8000)
# 创建一个 HTTP 服务器(Web服务器), 指定绑定的地址/端口 和 请求处理器
httpd = http.server.HTTPServer(server_address, RequestHandlerImpl)
# 循环等待客户端请求
httpd.serve_forever()
# 本地浏览器访问: http://localhost:8000
# curl命令 GET 访问: curl http://localhost:8000/hello/world
# curl命令 POST 访问: curl http://localhost:8000/hello/world -d "name=tom&age=25"
web目录访问
import http.server
import os
from threading import Thread
import time
import webbrowser
port_number = '8000'
def run_on(port):
os.system("python -m http.server " + port)
if __name__ == "__main__":
server = Thread(target=run_on, args=[port_number])
# run_on(port_number) #Run in main thread
# server.daemon = True # Do not make us wait for you to exit
server.start()
time.sleep(2) # Wait to start the server first
def test():
url = "http://localhost:" + port_number
webbrowser.open(url)
print(url + " is opened in browser")
test()