6

I have a python CGI script that receives a POST request containing a specific HTTP header. How do you read and parse the headers received? I am not using BaseHTTPRequestHandler or HTTPServer. I receive the body of the post with sys.stdin.read(). Thanks.

2 Answers 2

5

It is possible to get a custom request header's value in an apache CGI script with python. The solution is similar to this.

Apache's mod_cgi will set environment variables for each HTTP request header received, the variables set in this manner will all have an HTTP_ prefix, so for example x-client-version: 1.2.3 will be available as variable HTTP_X_CLIENT_VERSION.

So, to read the above custom header just call os.environ["HTTP_X_CLIENT_VERSION"].

The below script will print all HTTP_* headers and values:

#!/usr/bin/env python

import os

print "Content-Type: text/html"
print "Cache-Control: no-cache"
print

print "<html><body>"
for headername, headervalue in os.environ.iteritems():
    if headername.startswith("HTTP_"):
        print "<p>{0} = {1}</p>".format(headername, headervalue)


print "</html></body>"
Sign up to request clarification or add additional context in comments.

Comments

0

You might want to look at the cgi module included with Python's standard library. It appears to have a cgi.parse_header(string) function that you might find to be helpful in trying to get the headers.

4 Comments

cgi.parse_header('X-GitHub-Event') doesn't return the header. It doesn't return any header I have tried.
@AlecFenichel I believe its purpose is to parse the headers after you have gotten them.
Yes. But how do you get them?
This does nothing. You can't parse a header if you haven't even gotten them.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.