Sending http headers with python
26,212
The response header should include a response code indicating success. Before the Content-Type line, add:
client.send('HTTP/1.0 200 OK\r\n')
Also, to make the test more visible, put some content in the page:
client.send('<html><body><h1>Hello World</body></html>')
After the response is sent, close the connection with:
client.close()
and
sock.close()
As the other posters have noted, terminate each line with \r\n
instead of \n
.
Will those additions, I was able to run successful test. In the browser, I entered localhost:8080
.
Here's all the code:
import socket
sock = socket.socket()
sock.bind(('', 8080))
sock.listen(5)
client, adress = sock.accept()
print "Incoming:", adress
print client.recv(1024)
print
client.send('HTTP/1.0 200 OK\r\n')
client.send("Content-Type: text/html\r\n\r\n")
client.send('<html><body><h1>Hello World</body></html>')
client.close()
print "Answering ..."
print "Finished."
sock.close()
Author by
Niklas R
Updated on July 09, 2022Comments
-
Niklas R almost 2 years
I've set up a little script that should feed a client with html.
import socket sock = socket.socket() sock.bind(('', 8080)) sock.listen(5) client, adress = sock.accept() print "Incoming:", adress print client.recv(1024) print client.send("Content-Type: text/html\n\n") client.send('<html><body></body></html>') print "Answering ..." print "Finished." import os os.system("pause")
But it is shown as plain text in the browser. Can you please tell what I need to do ? I just can't find something in google that helps me..
Thanks.
-
werewindle over 12 years... and don't forget to replace \n\n to \r\n\r\n, since HTTP needs CRLF to be send after headers.
-
dmitry over 12 yearsand better to use '\r\n\r\n' instead of '\n\n'
-
Niklas R over 12 yearsWow, thats it. Thank you ! Are there any related documents about the exchange between server and client with the http protocol ?
-
Raymond Hettinger over 12 years@NiklasR You can start with an overview on wikipedia en.wikipedia.org/wiki/Hypertext_Transfer_Protocol and then get the details at w3.org/Protocols/rfc2616/rfc2616.html
-
Gary Gauh about 11 years@RaymondHettinger,I was wondering how the browser could recognize the end of http response
body
withoutContent-Length
in the http responseheader
-
Raymond Hettinger about 11 years@GaryGauh Content-Length is necessary if you leave the connection open. But if you close the connection as we do above, the browser can interpret "hanging-up the phone" as the "there is no more content coming".
-
Martin Geisler over 9 yearsNote that webob uses
\n
to separate lines instead of the correct\r\n
. This is #146. Browsers don't seem to care, though, so your solution will work fine in most cases.