如何在不使用任何库的情况下使用Python实现简单的Web服务器?

ant*_*pug 8 python sockets webserver http websocket

我需要在Python中实现一个非常简单的类似Web服务器的应用程序,它将执行基本的HTTP请求和响应,并在网页上显示非常基本的输出.我并不太关心用Python编写它,但我不知道从哪里开始?如何设置?一个文件?多个文件?我想我不知道如何处理这是一个"服务器"的事实 - 所以我不熟悉如何处理HTTP请求/套接字/处理请求等等.任何建议?资源?

quo*_*tor 10

您应该查看SimpleHttpServer(py3:http.server)模块.

根据您要执行的操作,您可以使用它,也可以查看模块的源(py2,py3)以获取创意.

如果你想获得更多低级别,SimpleHttpServer扩展BaseHttpServer(源代码)使其正常工作.

如果你想获得甚至低水平,看看SocketServer的(来源:PY2,PY3).

人们经常会像python -m SimpleHttpServer(或python3 -m http.server)那样运行python,如果他们只想共享一个目录:它是一个功能齐全且简单的服务器.


pri*_*tam 5

为此,可以使用套接字编程。以下代码段创建了一个tcp套接字,并在端口9000上侦听http请求:

from socket import *

def createServer():
    serversocket = socket(AF_INET, SOCK_STREAM)
    serversocket.bind(('localhost',9000))
    serversocket.listen(5)
    while(1):
        (clientsocket, address) = serversocket.accept()
        clientsocket.send("HTTP/1.1 200 OK\n"
         +"Content-Type: text/html\n"
         +"\n" # Important!
         +"<html><body>Hello World</body></html>\n")
        clientsocket.shutdown(SHUT_WR)
        clientsocket.close()

    serversocket.close()

createServer()
Run Code Online (Sandbox Code Playgroud)

启动服务器,$ python server.pyhttp://localhost:9000/在您的网络浏览器(充当客户端)中打开。然后,在浏览器窗口中,您可以看到文本“ Hello World”(http响应)。

编辑**先前的代码仅在chrome上进行了测试,正如你们对其他浏览器的建议,该代码被修改为:

  1. 要使响应类似于http,您可以使用HTTP版本1.1,状态代码200 OK和内容类型text / html的纯标题发送。
  2. 一旦提交响应,就必须关闭客户端套接字,因为它是TCP套接字。
  3. 要正确关闭客户端套接字,shutdown()需要称为socket.shutdown vs socket.close

然后,在chrome,firefox(http:// localhost:9000 /)和终端中的简单curl(curl http:// localhost:9000)上对代码进行了测试。

  • -1。你有尝试过吗?这根本行不通;这是一台套接字服务器,但不讲HTTP。 (4认同)
  • 它实际上并没有说HTTP,因此几乎每个浏览器都无法使用HTTP。它在Chrome中不起作用。如果您按“停止”按钮,则它仅在Firefox中有效。这不是Web服务器。 (3认同)
  • @Simon稍微修改了代码。此外,它还在python 2.7.6上进行了测试。如果您使用的是python 3,则字符串为Unicode;但是在网络上传输时,我们需要发送字节字符串。因此,尝试使用编码为utf-8的字符串输出的sendall()而不是send()。#START输出=“有效” clientsocket.sendall(output.encode(“ utf-8”))#END (3认同)