Última actualización: 15 de diciembre de 2023

4.5. Solicitud del GET

Ejecute el script print_environment.py nuevamente y esta vez llámelo así:

http://localhost:8051/?age=10&hobbies=software&hobbies=tunning

Compruebe las variables QUERY_STRING y las REQUEST_METHOD en el diccionario environ:

QUERY_STRING: age=10&hobbies=software&hobbies=tunning
REQUEST_METHOD: GET

Cuando el método de solicitud es GET las variables del formulario se enviarán en la URL en la parte llamada cadena de consulta, es decir, todo lo que se encuentra después del caracter ? en la URL.

Observe que la variable hobbies aparece dos veces. Puede ocurrir cuando hay casillas de verificación en el formulario o cuando el usuario escribe la misma variable más de una vez en la URL.

Es posible escribir código para analizar la cadena de consulta y recuperar esos valores, pero es más fácil usar la función cgi.parse_qs() que devuelve un diccionario con los valores como listas.

Siempre tenga cuidado con la entrada del usuario. Desinfectarlo para evitar la inyección de secuencias de comandos. La función cgi.escape() se puede utilizar para eso.

La etiqueta HTML form en este script indica al navegador que realice una solicitud GET (method="get"):

#!/usr/bin/env python

"""
Python's bundled WSGI server

Source code taken and improvements from the
"WSGI Tutorial" by Clodoaldo Pinto Neto at
http://wsgi.tutorial.codepoint.net/parsing-the-request-get
"""
from wsgiref.simple_server import make_server
from cgi import parse_qs, escape

html = """<!DOCTYPE html>
<html>
<body>
   <form method="get" action="">
        <p>
           Age: <input type="text" name="age" value="%(age)s">
        </p>
        <p>
            Hobbies:
            <input
                name="hobbies" type="checkbox" value="software"
                %(checked-software)s
            > Software
            <input
                name="hobbies" type="checkbox" value="tunning"
                %(checked-tunning)s
            > Auto Tunning
        </p>
        <p>
            <input type="submit" value="Submit">
        </p>
    </form>
    <p>
        Age: %(age)s<br>
        Hobbies: %(hobbies)s
    </p>
</body>
</html>
"""


def application(environ, start_response):

    # Returns a dictionary in which the values are lists
    d = parse_qs(environ["QUERY_STRING"])

    # As there can be more than one value for a variable then
    # a list is provided as a default value.
    age = d.get("age", [""])[0]  # Returns the first age value
    hobbies = d.get("hobbies", [])  # Returns a list of hobbies

    # Always escape user input to avoid script injection
    age = escape(age)
    hobbies = [escape(hobby) for hobby in hobbies]

    response_body = html % {  # Fill the above html template in
        "checked-software": ("", "checked")["software" in hobbies],
        "checked-tunning": ("", "checked")["tunning" in hobbies],
        "age": age or "Empty",
        "hobbies": ", ".join(hobbies or ["No Hobbies?"]),
    }

    status = "200 OK"

    # Now content type is text/html
    response_headers = [
        ("Content-Type", "text/html"),
        ("Content-Length", str(len(response_body))),
    ]

    start_response(status, response_headers)
    return [response_body]


httpd = make_server("localhost", 8080, application)

# Now it is serve_forever() in instead of handle_request()
httpd.serve_forever()

Importante

Usted puede descargar el código usado en esta sección haciendo clic aquí.

Truco

Para ejecutar el código get_request.py, abra una consola de comando, acceda al directorio donde se encuentra el mismo, y ejecute el siguiente comando:

python3 get_request.py

El servidor estará atendiendo peticiones en la dirección en http://localhost:8080


Ver también

Consulte la sección de lecturas suplementarias del entrenamiento para ampliar su conocimiento en esta temática.


¿Cómo puedo ayudar?

¡Mi soporte está aquí para ayudar!

Mi horario de oficina es de lunes a sábado, de 9 AM a 5 PM. GMT-4 - Caracas, Venezuela.

La hora aquí es actualmente 7:35 PM GMT-4.

Mi objetivo es responder a todos los mensajes dentro de un día hábil.

Contrata mi increíble soporte profesional