How can my Python 2.7 CGI program find the URL that caused the program to be called?

I have a program that creates a JPG or PNG file on the fly, and needs to construct a URL to it. I know the path relative to my program is, for example, "../temp/tmpiicack.png" (the filename generated by tempfile.NamedTemporaryFile). From this, I want to generate a URL for the image so it can be displayed.

I invoke My CGI program (in testing) with the URL http://localhost:8000/cgi-bin/query.py?tmtype=s&tmnumber=76044902. It is usually invoked using a form at http://localhost:8000/cgi-bin/query.py, which generates the URL, but can also be invoked by directly going to the URL with parameters specified (I want to be able to email a complete URL, for example). In this instance, the URL I want to generate would be http://localhost:8000/temp/tmpiicack.png. The problem is, my program does not know the "http://localhost:8000"; part.

Module urlparse has facilities for generating a URL from relative parts, but requires that I know a base URL to begin with. I've looked in os.environ to see if anything is presented, but the only thing close is os.environ['HTTP_REFERER'], which is only populated if the program is invoked from the form-click, not if directly entered (e.g. copy/paste).

(That's my fall-back solution; but it will mean the image-support will fail if a URL is entered directly, and will work only if invoked from a form.)

I've also checked os.environ['PATH_INFO'] as suggested in a post on stackoverflow,[1] but that is not populated. (I can't recall whether it's a zero-length string or None, but it has nothing useful).

I'm testing using CGIHTTPServer as my server, if it matters.


[1] http://stackoverflow.com/questions/4939067/catching-the-url-path-following-a-python-cgi-script/4939137#4939137

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to