Python Forum

Full Version: Get http header ?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I'm using the wsgiref module to run an application and I need to get the request header that comes from the client's browser to handle http responses, how could I proceed ?
Hello!

An example from Python official docs:

from wsgiref.util import setup_testing_defaults
from wsgiref.simple_server import make_server

# A relatively simple WSGI application. It's going to print out the
# environment dictionary after being updated by setup_testing_defaults
def simple_app(environ, start_response):
    setup_testing_defaults(environ)
    
    for key in environ.keys(): # Headers here. "environ" is a dictionary !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        print(key)

    status = '200 OK'
    headers = [('Content-type', 'text/plain; charset=utf-8')]

    start_response(status, headers)

    ret = [("%s: %s\n" % (key, value)).encode("utf-8")
           for key, value in environ.items()]
    return ret

with make_server('', 8000, simple_app) as httpd:
    print("Serving on port 8000...")
    httpd.serve_forever()
BASH curl request with a custom heeader
curl --header "X-MyHeader: 123" localhost:8000  
And you can see it printed in the output
Output:
LC_COLLATE CONDA_EXE TERM_PROGRAM SSH_AUTH_SOCK CONDA_DEFAULT_ENV PWD DESKTOP_SESSION GTK_MODULES XDG_SESSION_TYPE SHELL GNOME_DESKTOP_SESSION_ID CONDA_PREFIX COLORTERM GJS_DEBUG_TOPICS CONDA_PYTHON_EXE MOTD_SHOWN HOME LANG XDG_CURRENT_DESKTOP XDG_SEAT_PATH GJS_DEBUG_OUTPUT XDG_SESSION_CLASS GTK_OVERLAY_SCROLLING ORIGINAL_XDG_CURRENT_DESKTOP LOGNAME NO_AT_BRIDGE CONDA_SHLVL XDG_SESSION_PATH DBUS_SESSION_BUS_ADDRESS GIO_LAUNCHED_DESKTOP_FILE GTK3_MODULES XDG_RUNTIME_DIR APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL XDG_VTNR GIO_LAUNCHED_DESKTOP_FILE_PID VSCODE_GIT_ASKPASS_NODE PATH USER SHLVL TERM_PROGRAM_VERSION CONDA_PROMPT_MODIFIER GIT_ASKPASS XAUTHORITY MAIL DISPLAY XDG_SESSION_ID VSCODE_GIT_IPC_HANDLE SESSION_MANAGER VSCODE_GIT_ASKPASS_EXTRA_ARGS GDK_BACKEND VSCODE_GIT_ASKPASS_MAIN XDG_SEAT CINNAMON_VERSION TERM CHROME_DESKTOP SERVER_NAME GATEWAY_INTERFACE SERVER_PORT REMOTE_HOST CONTENT_LENGTH SCRIPT_NAME SERVER_PROTOCOL SERVER_SOFTWARE REQUEST_METHOD PATH_INFO QUERY_STRING REMOTE_ADDR CONTENT_TYPE HTTP_HOST HTTP_USER_AGENT HTTP_ACCEPT HTTP_X_MYHEADER # Here is the custom header !!!!!!!!!!!!!!!! wsgi.input wsgi.errors wsgi.version wsgi.run_once wsgi.url_scheme wsgi.multithread wsgi.multiprocess wsgi.file_wrapper
I guess that all headers are those environ keys starting with "HTTP" near the end of the output