使用Python发送HTTP头部

8 投票
3 回答
30991 浏览
提问于 2025-04-17 07:20

我写了一个小脚本,应该能给客户端提供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")

但是在浏览器里显示成了普通文本。你能告诉我该怎么做吗?我在谷歌上找不到任何有用的信息……

谢谢。

3 个回答

0

这是一个Python 3版本的代码片段,来自@Raymond,可以用来查看浏览器发送的http请求头信息。

import socket

sock = socket.socket()
sock.bind(('', 8080)) # ('127.0.0.1', 8080) for localhost
sock.listen(5)
client, address = sock.accept()

print('Incoming:', address)
print(client.recv(1024))
print()

encoding = 'ascii'
client.send(bytes('HTTP/1.0 200 OK\r\n', encoding))
client.send(bytes('Content-Type: text/html\r\n\r\n', encoding))
client.send(bytes('<html><body><h1>Hello World</h1></body></html>', encoding))
client.close()

print('Answering ...')
print('Finished.')

sock.close()
0

webob 可以帮你处理那些复杂的HTTP细节。

from webob import Response
....

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

响应头应该包含一个表示成功的响应代码。在Content-Type这一行之前,添加:

client.send('HTTP/1.0 200 OK\r\n')

另外,为了让测试结果更明显,可以在页面中放一些内容:

client.send('<html><body><h1>Hello World</body></html>')

在发送完响应后,使用以下代码关闭连接:

client.close()

还有

sock.close()

正如其他人提到的,每一行的结尾要用\r\n来结束,而不是\n

加上这些内容后,我成功地进行了测试。在浏览器中,我输入了localhost:8080

以下是所有的代码:

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

撰写回答