Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python HTTP服务器-不使用HTTP模块创建_Python_Sockets_Http_Server - Fatal编程技术网

Python HTTP服务器-不使用HTTP模块创建

Python HTTP服务器-不使用HTTP模块创建,python,sockets,http,server,Python,Sockets,Http,Server,我可以创建一个HTTP服务器而不使用 python -m http.server [port number] 使用带有插座等的老式样式 最新的代码和错误 import socketserver response = """HTTP/1.0 500 Internal Server Error Content-type: text/html Invalid Server Error""" class MyTCPHandler(socketserver.BaseRequestHandler):

我可以创建一个HTTP服务器而不使用

python -m http.server [port number]
使用带有插座等的老式样式

最新的代码和错误

import socketserver

response = """HTTP/1.0 500 Internal Server Error
Content-type: text/html

Invalid Server Error"""

class MyTCPHandler(socketserver.BaseRequestHandler):
    """
    The RequestHandler class for our server.

    It is instantiated once per connection to the server, and must
    override the handle() method to implement communication to the
    client.
    """


    def handle(self):
        # self.request is the TCP socket connected to the client
        self.data = self.request.recv(1024).strip()
        self.request.sendall(response)

if __name__ == "__main__":
    HOST, PORT = "localhost", 8000
    server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()

TypeError:“str”不支持缓冲区接口

是的,您可以,但这是一个糟糕的想法——事实上,即使
http.server
充其量也只是一个玩具实现

您最好编写任何您想要的web应用程序作为标准WSGI应用程序(大多数Python web框架都是这样做的——Django、Pyramid、Flask……),并使用Python现有的几十个生产级HTTP服务器中的一个来为其提供服务

uWSGI()是我个人的最爱,Gevent紧随其后


如果您想了解有关如何完成的更多信息,我建议您阅读CherryPy服务器()的源代码。虽然没有前面提到的uWSGI强大,但它是一个用纯Python编写的很好的参考实现,它通过线程池为WSGI应用提供服务。

当然可以,像这样的服务器已经这样做了。
对于仅能执行HTTP/1.0获取请求并一次仅处理单个请求的简单测试服务器,一旦您了解了HTTP协议的基础知识,就不应该那么难了。但如果你对性能有一点在意,它很快就会变得复杂。

你可能会。试一试,如果你遇到问题,问一个问题。我们不会为你做的。你可以,但为什么?如果你想制造一辆自行车,你不是从制造轮子开始的——你得到一个轮子,然后你在自行车上工作。如果你想做一个更好的轮子,你才开始做轮子。我想不知道从哪里开始。找不到任何不引用方法的帮助,因此一个起点就更好了,或者您正在询问如何在不使用
python-m
CLI帮助程序的情况下创建一个简单的HTTP服务器?然后看下面的例子。基本上是试图重新发明轮子。。。不使用HTTP.server模块的简单HTTP服务器在这种情况下,创建一个简单的TCP服务器,然后在其顶部创建一个最小的HTTP/1.0堆栈,该堆栈从接受的连接读取请求,直到获得
\r\n\r\n
并发送回响应。然后关闭连接。它不快,但很简单。@CaseyJames22然后使用
http
模块。或者你真的想实现所有的和你自己吗?这实际上是一个很好的练习来熟悉协议。过一段时间后,您可能会充分理解,为什么一个全面且性能良好的服务器要复杂得多,但您在将来调试HTTP问题时学到了很多:)当然,关于如何编写服务器的真正细节,您必须自己弄清楚,如果您不想使用http模块,这里是一个用Perl编写的小型服务器。请不要期望我们为您编写Python服务器,但是您可以从这个最小的Perl服务器学习一些基础知识。而且你一定要熟悉HTTP协议。