Sending http headers with python

孤街醉人 提交于 2021-02-06 11:36:50

问题


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.


回答1:


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()



回答2:


webob does the dirty http details for you as well

from webob import Response
....

client.send(str(Response("<html><body></body></html>")))


来源:https://stackoverflow.com/questions/8315209/sending-http-headers-with-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!