You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Server接收GET请求触发脚本失败,报501错误求助

问题分析与解决

让我们一步步拆解你遇到的问题:

核心问题1:服务器未完成HTTP响应流程

你重写了do_GET方法,但没有按照HTTP协议要求发送响应内容。BaseHTTPRequestHandler默认会在未正确处理请求时返回501错误——服务器认为你的GET请求处理逻辑不完整,这就是你看到Unsupported method ('GET')的原因。

核心问题2:脚本路径的转义错误

你写的execfile("root\externalFunc.py")里,Windows下的反斜杠\是转义字符,\e会被解析成特殊字符,导致实际路径和你预期的不符,execfile根本找不到你的脚本文件。

额外小问题:客户端代码缺少必要导入

你的客户端代码里没有导入httplib模块,运行时会直接抛出NameError,这是客户端的低级疏漏。


修正后的服务器代码

#!/usr/bin/env python
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import os

class KodeFunHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 修复路径:用双反斜杠转义,或者直接用正斜杠
        try:
            # 执行外部脚本
            execfile("root\\externalFunc.py")  # 也可以写成 "root/externalFunc.py"
            # 发送成功响应,告诉客户端请求已处理
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            # 可选:给客户端返回执行成功的提示
            self.wfile.write("Script executed successfully!")
        except Exception as e:
            # 发送错误响应,同时在服务器控制台打印错误便于调试
            self.send_response(500)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            error_msg = f"Error executing script: {str(e)}"
            self.wfile.write(error_msg)
            print(error_msg)

def run():
    print('http server is starting...')
    server_address = ('127.0.0.1', 80)
    httpd = HTTPServer(server_address, KodeFunHTTPRequestHandler)
    print('http server is running...')
    httpd.serve_forever()

if __name__ == '__main__':
    run()

修正后的客户端代码

import sys
import httplib  # 补上缺失的导入

http_server = '127.0.0.1'
conn = httplib.HTTPConnection(http_server)
conn.request('GET', '/','')  # 补充请求路径,空字符串可能导致识别异常
rsp = conn.getresponse()
print(rsp.status, rsp.reason)
data_received = rsp.read()
print(data_received)
conn.close()

额外提示

  1. 如果externalFunc.py和服务器脚本不在同一目录,建议使用绝对路径调用,彻底避免路径问题。
  2. 如果你用的是Python 3,BaseHTTPServer已被移到http.server模块,且execfile被移除,需要用exec(open("root/externalFunc.py").read())替代。
  3. 直接执行外部脚本存在安全风险,生产环境中建议添加请求验证逻辑,避免任意请求触发脚本执行。

内容的提问来源于stack exchange,提问作者thib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:51:43