python机器学习9--网络服务器

1.有没有更简单的方法让朋友可以直接取得你所开发的Python程序?有两个方法可以使用。第一个方法是使用安装程序,将完整的Python程序安装,另外一个方法就是使用网页服务器的方式,在此将介绍和使用Python创建一个网页服务器,如此一来,用户就可以通过网页的方法来交换数据,也可以通过远程网络IP的方法,即时和你的程序之间做一个链接的交互。

import sys
import socketserver
import http.server
from http.server import SimpleHTTPRequestHandler as RequestHandler
if sys.argv[1:]:
    port=int(sys.argv[1])
else:
    port=8888
print('Server listening on port{}'.format(port))
socketserver.TCPServer.allow_reuse_address=True
httpd=socketserver.TCPServer(("127.0.0.1",port),RequestHandler)
try:
    httpd.serve_forever()
except:
    print("closing the server")
    httpd.server_close()
    raise

下面这个显示的是文本内容

import sys
import time
# 如果在Python 3上运行
import socketserver as socketserver
import http.server
from http.server import SimpleHTTPRequestHandler as RequestHandler
class MyHandler(RequestHandler):
    # 继承原本的HTTP请求处理类
    def do_GET(self):
        # 修改和覆盖原始HTTP GET方法
        self.send_response(200)  # HTTP 200网络响应正确
        self.send_header("Content-type", "text/html")  # 返回内容类型为HTML
        self.end_headers()  # HTML表头处理完毕

        # 网页内容
        output = b""
        output += b"<html><body>Hello</body></html>"

        self.wfile.write(output)  # 将HTML内容写入响应

if sys.argv[1:]:
    # 检查是否有命令行参数
    port = int(sys.argv[1])
else:
    port = 8888  # 内定网络端口为8888
print('Server listening on port {}'.format(port))  # 显示本程序的网络位置和端口

# 允许地址重用
socketserver.TCPServer.allow_reuse_address = True

# 创建HTTP服务器,使用自定义的请求处理器
httpd = socketserver.TCPServer(("127.0.0.1", port), MyHandler)

try:
    httpd.serve_forever()  # 持续运行网络服务器
except:
    print("closing the server.")
    httpd.server_close()  # 关闭网络服务器
    raise

运行可以,但网页不支持这种操作,post,get 都不行

from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import parse_qs

class MyHandler(BaseHTTPRequestHandler):
    def do_HEAD(self):
        # HTTP HEAD请求处理
        self.send_response(405)  # 设置HTTP状态码为405,表示方法不被允许
        self.send_header("Content-type", "text/html")  # 设置响应类型为HTML
        self.end_headers()  # 结束头部信息

    def do_POST(self):
        # 处理HTTP POST请求
        varLen = int(self.headers['Content-Length'])  # 取得POST数据的长度
        name = b""
        password = b""

        if varLen > 0:
            # 读取并解析POST数据
            query_components = parse_qs(self.rfile.read(varLen), keep_blank_values=1)
            print(query_components)  # 打印解析后的数据,用于调试

            # 取得POST数据中的name和password
            # 注意:get方法返回的是一个列表,我们取列表的第一个元素
            name = query_components.post("name", [b""])[0]
            password = query_components.post("password", [b""])[0]

        # 调用do_HEAD方法设置HTTP头部
        self.do_HEAD()

        # 准备HTML输出内容
        output = b""
        output += b"<html><body>Hello, name=\""
        output += name
        output += b"\" password=\""
        output += password
        output += b"</body></html>"

        # 写入响应体
        self.wfile.write(output)

def run(server_class=HTTPServer, handler_class=MyHandler, port=8888):
    server_address = ('', port)
    httpd = server_class(server_address, handler_class)

    print(f'Starting httpd server on port {port}')
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    finally:
        httpd.server_close()

if __name__ == '__main__':
    run()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值