On Sat, 20 Jan 2007, Python wrote:
> On Sat, 2007-01-20 at 10:13 -0800, Danny Yoo wrote: >> The last line of the program looks suspicious. If it helps, let me >> rearrange the program that you've written to: >> >> ############################################### >> print "Content-type: text/html\r\n" >> print "Location: http://python.org/\r\n" >> print "\r" >> ############################################### >> >> The code is missing the critical '\n' that allows the web browser to >> recognize the header. > > That gets supplied from the print - doesn't it?. Hi Lloyd and Paulino, Ah, very true. Ah ha! That's exactly the problem here. Thanks Lloyd! What's happening is that Python's 'print' statement introduces its own newline between the content-type header and the location header. So the bytes that are actually being written to the server look something like: "Content-type: text/html\r\n\nLocation: http://python.org/\r\n\n\r\n" which is wrong: we really want it to be: "Content-type: text/html\r\nLocation: http://python.org/\r\n\r\n" > sys.stdout.write(...) would need the final \n and might actually be > clearer. Yeah, I agree: that's exactly the right thing to use here. (Actually, the right thing to do here is probably to use a separate client library that handles the ugliness, raw details of the CGI protocol.) Paulino, in any case, use sys.stdout.write() rather than the print statement, at least when you're writing out the headers. You need the extra control that sys.stdout.write() gives you: 'print' is introducing newlines that, under normal circumstances, are harmless, but when we're writing headers like this, make it easy to make the mistakes above. Thanks again Lloyd! _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor