返回web服务器的html,而不是python中的纯文本

返回web服务器的html,而不是python中的纯文本,python,html,Python,Html,这是我的密码: import socket import sys import re import base64 import binascii import time class Serverhttp: def __init__(self): self.GET = re.compile("GET.*?HTTP") self.POST = re.compile("GET.*?HTTP") try : sock = s

这是我的密码:

import socket
import sys
import re
import base64
import binascii
import time
class Serverhttp:
    def __init__(self):
        self.GET = re.compile("GET.*?HTTP")
        self.POST = re.compile("GET.*?HTTP")
        try :
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            server_address = ('localhost', 28000)
            print >>sys.stderr, 'starting up on %s port %s' % server_address
            sock.bind(server_address)
        except :
            time.sleep(2)
            self.__init__()
        # Listen for incoming connections
        sock.listen(1)
        off = 2
        self.message = ""
        while True:
            # Wait for a connection
            print >>sys.stderr, 'waiting for a connection'
            if off == 2 or off == 1:
                connection, client_address = sock.accept()
            try:
                print >>sys.stderr, 'connection from', client_address

                # Receive the data in small chunks and retransmit it
                while True:
                    data = connection.recv(1024)
                    print >>sys.stderr, 'received "%s"' % data
                    if data:
                        self.message = self.traitement(data)
                        connection.sendall(self.message)
                        connection.close()
                        connection, client_address = sock.accept()

                    else:
                        print >>sys.stderr, 'no more data from', client_address
                        break

            finally:
                # Clean up the connection
                connection.close()


    def traitement(self,data):
        url = self.GET.findall(data)
        url = self.POST.findall(data)
        url = url[0].replace("GET","")
        url = url.replace("POST","")
        url = url.replace("HTTP","")
        url = url.replace(" ","")
        print url
        if url == "/favicon.ico":
            return binascii.a2b_base64(
"""AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAA7PT7/3zF6/9Ptu//RbHx/0227/+Tzvb/9vv5/97h0f9JeBz/NHoA/z98Av9AfAD/
PHsA/0F6AP8AAAAA/vz7/1+33/8Mp+z/FrHw/xWy8f8bs/T/Hqrx/3zE7v////7/t8qp/zF2A/87
gwH/P4ID/z59AP8+egD/Q3kA/97s8v8botj/ELn3/wy58f8PtfL/D7Lw/xuz9P8vq+f/8/n///77
9v9KhR3/OYYA/0GFAv88hgD/QIAC/z17AP/0+/j/N6bM/wC07/8Cxf7/CsP7/wm+9v8Aqur/SrDb
//7+/v///P7/VZEl/zSJAP87jQD/PYYA/0OBBf8+fQH///3//9Dp8/84sM7/CrDf/wC14/8CruL/
KqnW/9ns8f/8/v//4OjX/z+GDf85kAD/PIwD/z2JAv8+hQD/PoEA/9C7pv/97uv////+/9Xw+v+w
3ej/ls/e/+rz9///////+/z6/22mSf8qjQH/OJMA/zuQAP85iwL/PIgA/zyFAP+OSSL/nV44/7J+
Vv/AkG7/7trP//7//f/9//7/6/Lr/2uoRv8tjQH/PJYA/zuTAP87kwD/PY8A/z2KAP89hAD/olkn
/6RVHP+eSgj/mEgR//Ho3//+/v7/5Ozh/1GaJv8tlAD/OZcC/zuXAv84lAD/O5IC/z2PAf89iwL/
OIkA/6hWFf+cTxD/pm9C/76ihP/8/v//+////8nav/8fdwL/NZsA/zeZAP83mgD/PJQB/zyUAf84
jwD/PYsB/z6HAf+fXif/1r6s//79///58u//3r+g/+3i2v/+//3/mbiF/yyCAP87mgP/OpgD/zeW
AP85lgD/OpEB/z+TAP9ChwH/7eHb/////v/28ej/tWwo/7tUAP+5XQ7/5M+5/////v+bsZn/IHAd
/zeVAP89lgP/O5MA/zaJCf8tZTr/DyuK//3////9////0qmC/7lTAP/KZAT/vVgC/8iQWf/+//3/
//j//ygpx/8GGcL/ESax/xEgtv8FEMz/AALh/wAB1f///f7///z//758O//GXQL/yGYC/8RaAv/O
jlf/+/////////9QU93/BAD0/wAB//8DAP3/AAHz/wAA5f8DAtr///////v7+/+2bCT/yGMA/89m
AP/BWQD/0q+D///+/////P7/Rkbg/wEA+f8AA/z/AQH5/wMA8P8AAev/AADf///7/P////7/uINQ
/7lXAP/MYwL/vGIO//Lm3P/8/v//1dT2/woM5/8AAP3/AwH+/wAB/f8AAfb/BADs/wAC4P8AAAAA
//z7/+LbzP+mXyD/oUwE/9Gshv/8//3/7/H5/zo/w/8AAdX/AgL6/wAA/f8CAP3/AAH2/wAA7v8A
AAAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAgAEAAA==""")
        else :
            return "Content-type:text/html;charset=utf8\n\n<html><body>test</body></html>"
if __name__ == "__main__":
    s = Serverhttp()
为什么该行:

return "Content-type:text/html;charset=utf8\n\n<html><body>test</body></html>"

在浏览器中显示纯文本而不是html?

我不懂python,但不应该用html编写标题信息。可以使用in标记指定内容类型


我不懂python,但不应该用HTML编写标题信息。可以使用in标记指定内容类型


将return语句替换为以下语句

return "HTTP/1.0 200 OK\r\nContent-type:text/html;charset=utf8\r\n\r\n<html><body>test</body></html>"

注意:您应该了解如何正确响应和处理HTTP请求。如果您在构建自己的web服务器时很认真,那么应该首先阅读并理解HTTP

用以下语句替换返回语句

return "HTTP/1.0 200 OK\r\nContent-type:text/html;charset=utf8\r\n\r\n<html><body>test</body></html>"

注意:您应该了解如何正确响应和处理HTTP请求。如果您在构建自己的web服务器时很认真,那么应该首先阅读并理解HTTP

为什么您要编写自己的web服务器而不是使用其中一个内置服务器?另外,单击帮助您的答案下方的绿色勾号表示感谢。说谢谢是令人愉快的,但并不重要。为什么你要编写自己的web服务器而不是使用内置的服务器呢?此外,通过单击帮助你的答案下面的绿色勾号来表达感谢。说谢谢是愉快的,但并不重要。-1:正确的答案是使用现有的web服务器。这个答案应该说是一个退步,如果你坚持做两倍于必要的工作,那么就替换…@S洛特:在很多情况下是的,但是如果有人试图学习HTTP呢?还有什么比构建自己的更好的方法呢?更好的方法是阅读RFC标准,并阅读现有的web服务器。在没有阅读RFC的情况下随机进行黑客攻击会导致类似这样的问题,RFC中已经回答了a,而b已经通过阅读现有服务器的源代码来回答了。-1:正确答案是使用现有的web服务器。这个答案应该说是一个退步,如果你坚持做两倍于必要的工作,那么就替换…@S洛特:在很多情况下是的,但是如果有人试图学习HTTP呢?还有什么比构建自己的更好的方法呢?更好的方法是阅读RFC标准,并阅读现有的web服务器。在没有阅读RFC的情况下随机进行黑客攻击会导致类似这样的问题,RFC中已经回答了a,而b已经通过阅读现有服务器的源代码回答了b。