laur
laur

Reputation: 500

BaseHTTPServer, only receive once my variables post

Hi I have this code for my variables post, I want this always listening and receiving post requests, works fine but after receiving the first varibles follows the script running but no longer get the post varibles.

Only works well once, then have to restart the python script.

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()

thank for all

Upvotes: 2

Views: 91

Answers (2)

Nizam Mohamed
Nizam Mohamed

Reputation: 9240

If you call serve_forever you can't do anything in this thread. Do tasks in another thread or loop and call 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))

Upvotes: 1

Mauro Baraldi
Mauro Baraldi

Reputation: 6575

The error is in the end of your script. You take some name to vars, but get another one.

change this

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

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

for this

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

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

Just typo :-)

Upvotes: 1

Related Questions