【问题标题】:BaseHTTPServer, only receive once my variables postBaseHTTPServer,仅在我的变量发布后接收
【发布时间】:2015-03-27 19:01:21
【问题描述】:

您好,我的变量帖子有此代码,我希望它始终监听和接收帖子请求,工作正常,但在收到第一个变量后,脚本运行但不再获取帖子变量。

只能运行一次,然后必须重新启动python脚本。

import BaseHTTPServer
import urlparse
import os

HOST_NAME = ''
PORT_NUMBER=8000

postVars = ''

class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):

    def do_POST(s):
        global postVars
        s.send_response(200)
        s.end_headers()
        varLen = int(s.headers['Content-Length'])
        postVars = s.rfile.read(varLen)
        #print postVars

server_class = BaseHTTPServer.HTTPServer
httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)

try:
    httpd.handle_request()
except KeyboardInterrupt:
    pass

#print postVars

qs = dict( (k, v if len(v)>1 else v[0] )
           for k, v in urlparse.parse_qs(postVars).iteritems() )
#print qs

pass = qs['pass']
domain = qs['domain']
user = qs['user']

os.system("./createuser.sh %s %s %s" % (pass,user,domain))
httpd.serve_forever()

谢谢大家

【问题讨论】:

  • 如何发送请求?
  • 看起来不错,所以我也怀疑它可能与发送有关。我在这里使用完全相同的技术,您可以寻找灵感。 bitbucket.org/miohtama/cryptoassets/src/… - 添加一些调试日志?
  • '脚本正在运行,但不再获取 post 变量。'你怎么说你没有得到 POST vars?它永远在运行。你是怎么检查的?
  • 我是检查,遵循代码:**#ps aux | grep server.py ** 我的打印进程正在运行

标签: python python-2.7 python-3.x simplehttpserver basehttpserver


【解决方案1】:

错误出现在脚本的末尾。你为 vars 取了一些名字,但取了另一个名字。

改变这个

pase = qs['pass']
dominio = qs['domain']
usuario = qs['user']

os.system("./createuser.sh %s %s %s" % (pass,user,domain))
httpd.serve_forever()

为此

passwd = qs['pass']
domain = qs['domain']
username = qs['user']

os.system("./createuser.sh %s %s %s" % (passwd, username, domain))
httpd.serve_forever()

只是错字:-)

【讨论】:

  • 编辑我的代码,但仍然错误仍然感谢您的更正
【解决方案2】:

如果您致电serve_forever,您将无法在此线程中执行任何操作。在另一个线程或循环中执行任务并调用handle_request。

HOST_NAME = ''
PORT_NUMBER=8000
postVars = ''
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_POST(s):
        global postVars
        s.send_response(200)
        s.end_headers()
        varLen = int(s.headers['Content-Length'])
        postVars = s.rfile.read(varLen)
        #print postVars

server_class = BaseHTTPServer.HTTPServer
httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)

while True:
    try:
        httpd.handle_request()
    except KeyboardInterrupt:
        pass
    qs = dict( (k, v if len(v)>1 else v[0] )
           for k, v in urlparse.parse_qs(postVars).iteritems() )
    pass = qs['pass']
    domain = qs['domain']
    user = qs['user']

    os.system("./createuser.sh %s %s %s" % (pass,user,domain))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多