Python POST data using mod_wsgi

前端 未结 2 1924
灰色年华
灰色年华 2020-12-15 07:40

This must be a very simple question, but I don\'t seem to be able to figure out.

I\'m using apache + mod_wsgi to host my python application, and I\'d like to get the

相关标签:
2条回答
  • 2020-12-15 07:41

    Be aware that technically speaking calling read() or read(-1) on wsgi.input is a violation of the WSGI specification even though Apache/mod_wsgi allows it. This is because the WSGI specification requires that a valid length argument be supplied. The WSGI specification also says you shouldn't read more data than is specified by the CONTENT_LENGTH.

    So, the code above may work in Apache/mod_wsgi but it isn't portable WSGI code and will fail on some other WSGI implementations. To be correct, determine request content length and supply that value to read().

    0 讨论(0)
  • 2020-12-15 07:54

    PEP 333 says you must read environ['wsgi.input'].

    I just saved the following code and made apache's mod_wsgi run it. It works.

    You must be doing something wrong.

    from pprint import pformat
    
    def application(environ, start_response):
        # show the environment:
        output = ['<pre>']
        output.append(pformat(environ))
        output.append('</pre>')
    
        #create a simple form:
        output.append('<form method="post">')
        output.append('<input type="text" name="test">')
        output.append('<input type="submit">')
        output.append('</form>')
    
        if environ['REQUEST_METHOD'] == 'POST':
            # show form data as received by POST:
            output.append('<h1>FORM DATA</h1>')
            output.append(pformat(environ['wsgi.input'].read()))
    
        # send results
        output_len = sum(len(line) for line in output)
        start_response('200 OK', [('Content-type', 'text/html'),
                                  ('Content-Length', str(output_len))])
        return output
    
    0 讨论(0)
提交回复
热议问题