10-11-2018, 10:49 PM
(Última modificación: 10-11-2018, 10:51 PM por calvicius.
Razón: ortografia
)
hola,
estoy haciendo unas pruebas para incluir un mini-servidor web con el modulo http.server y necesito usar el cgi-bin.
el servidor arranca y funciona, y me ve el fichero .py pero me muestra el codigo fuente como texto plano. En la documnetacion oficial dicen que por defecto el metodo CGIHTTPRequestHandler usa los directorios /cgi-bin y, creo recordar, el /htbin.
yo lo he redirigido a uno llamado web (creo que lo he hecho bien, pero... )
Se me olvidaba decir que estoy en windows.
He revisado el tema y no me parece ver nada raro. La versión que uso es Python 3.6.1 para wundows. Instalación estandar.
A ver si alguien me puede iluminar.
La estructura de directorio es la siguiente:
d:\
\pruebas\
\servidor.py
\web dir.
favicon.ico
index.html
script_cgi.py
a continuación pongo los codigos y las salidas que muestran:
codigo servidor.py:
La respuesta que me da el servidor es 200 (correcta), tanto con el html como con cgi .py
el codigo html es un formulario que manda los datos con el metodo GET
los datos los envia bien ya que en la barra de direcciones se muestran los datos:
el script cgi es el siguiente:
estoy haciendo unas pruebas para incluir un mini-servidor web con el modulo http.server y necesito usar el cgi-bin.
el servidor arranca y funciona, y me ve el fichero .py pero me muestra el codigo fuente como texto plano. En la documnetacion oficial dicen que por defecto el metodo CGIHTTPRequestHandler usa los directorios /cgi-bin y, creo recordar, el /htbin.
yo lo he redirigido a uno llamado web (creo que lo he hecho bien, pero... )
Se me olvidaba decir que estoy en windows.
He revisado el tema y no me parece ver nada raro. La versión que uso es Python 3.6.1 para wundows. Instalación estandar.
A ver si alguien me puede iluminar.
La estructura de directorio es la siguiente:
d:\
\pruebas\
\servidor.py
\web dir.
favicon.ico
index.html
script_cgi.py
a continuación pongo los codigos y las salidas que muestran:
codigo servidor.py:
Código:
import os
try:
# python 2
from SimpleHTTPServer import SimpleHTTPRequestHandler
from BaseHTTPServer import HTTPServer as BaseHTTPServer
except ImportError:
# python 3
from http.server import HTTPServer as BaseHTTPServer, SimpleHTTPRequestHandler, CGIHTTPRequestHandler
class HTTPHandler(CGIHTTPRequestHandler):
def translate_path(self, path):
path = CGIHTTPRequestHandler.translate_path(self, path)
relpath = os.path.relpath(path, os.getcwd())
fullpath = os.path.join(self.server.base_path, relpath)
return fullpath
class HTTPServer1(BaseHTTPServer):
def __init__(self, base_path, server_address, RequestHandlerClass=HTTPHandler):
self.base_path = base_path
BaseHTTPServer.__init__(self, server_address, RequestHandlerClass)
if __name__ == '__main__':
web_dir = os.path.join(os.path.dirname(__file__), 'web')
httpd = HTTPServer1(web_dir, ("", 8080))
httpd.serve_forever()
La respuesta que me da el servidor es 200 (correcta), tanto con el html como con cgi .py
el codigo html es un formulario que manda los datos con el metodo GET
Código:
<!DOCTYPE html>
<html>
<head>
<title>una prueba</title>
</head>
<body>
<div style="text-align:center;">
<h1>Usuario login</h1>
<form action="script_cgi.py" method="get">
usuario : <input type="text" name="usuario" style="text-align:center;">
<br><br>
password : <input type="password" name="contrasenia" style="text-align:center;">
<br><br><br>
<input type="submit" value="Submit">
</form>
</div>
</body>
</html>
los datos los envia bien ya que en la barra de direcciones se muestran los datos:
Código:
http://localhost:8080/script_cgi.py?usuario=zzz&contrasenia=xxx
el script cgi es el siguiente:
Código:
#!"C:\Python361\python.exe -u"
import cgi, cgitb
cgitb.enable() ## para depurar posibles errores en el navegador
form = cgi.FieldStorage()
## obtengo los datos del formulario
first = form.getvalue('usuario')
last = form.getvalue('contrasenia')
print("Content-type: text/html")
print('')
if 'usuario' not in form or 'contrasenia' not in form:
print("""
<html>
<head></head>
<body>
<b> no hay username </b>
</body>
</html>
""")
else:
print("<html>")
print("<head><title>Datos introducidos</title></head>")
print("<body>")
print("<div>")
print("<h1>usuario y contrasenia</h1>")
print("<b>Nombre : </b>" + first + "<br>")
print("<br><b>Apellidos : </b>" + last + "<br>")
print("")
print("</div>")
print("</body>")
print("</html>")