BaseHTTPServer, извлечение переменной из одного значения POST

Я хочу знать, как получить содержимое формы переменных, отправленное с помощью html-формы, расположенной на внешнем сервере.

У меня есть этот код:

myserver.py

import BaseHTTPServer

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
httpd.server_close()
postVars is valued during the Handler, but not after MyHandler

В настоящее время он печатает это на консоли

user=jhon&domain=domain.com&pass=mypassword

Я хочу извлечь каждую переменную и использовать их для вызова последующего сценария bash.

пример того, что я хочу сделать:

import os
value1="user"
value2="domain"
value3="pass"
os.system("./usersprivetes.sh %s %s %s" % (value1,value2,value3))

спасибо за ваш комментарий и помощь.


person laur    schedule 27.03.2015    source источник
comment
возможный дубликат http://stackoverflow.com/questions/2490162/parse-http-get-and-post-parameters-from-basehttphandler   -  person dvhh    schedule 27.03.2015
comment
Так что получайте, пост мне интересен, но большое спасибо за помощь   -  person laur    schedule 27.03.2015


Ответы (1)


привет, решил, добавив некоторый код, который обслуживает меня только один раз, после чего переменные передаются обратно, чтобы они больше не функционировали, я думаю, что это порядок, в котором я

#cat server.py
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

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

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

спасибо, это сделало волшебство

qs = dict( (k, v if len(v)>1 else v[0] )
           for k, v in urlparse.parse_qs(postVars).iteritems() )
person laur    schedule 27.03.2015