标签: simplehttpserver

使用Python BaseHTTPServer处理同时/异步请求

我通过创建一个继承自HTTPServer和ThreadingMixIn的类来设置一个线程(使用Python线程)HTTP服务器:

class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
    pass
Run Code Online (Sandbox Code Playgroud)

我有一个继承自BaseHTTPRequestHandler的处理程序类,我用这样的东西启动服务器:

class MyHandler(BaseHTTPRequestHandler):
    ...

server = ThreadedHTTPServer(('localhost', 8080), MyHandler)
# Prevent issues with socket reuse
server.allow_reuse_address = True
# Start the server
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

这一切都非常简单.我遇到的问题是,ThreadingMixIn,ForkingMixIn或其他方式,请求最终阻止请求处理程序返回.通过实现此示例代码可以很容易地看到这一点:

class MyHandler(BaseHTTPRequestHandler):
    def respond(self, status_code):
        self.send_response(status_code)
        self.end_headers()

    def do_GET(self):
         print "Entered GET request handler"
         time.sleep(10)
         print "Sending response!"
         respond(200)
Run Code Online (Sandbox Code Playgroud)

如果服务器同时处理这些,那么我们将能够发送两个请求并看到服务器在发送任何响应之前输入两个GET请求处理程序.相反,服务器将为第一个请求输入GET请求处理程序,等待它返回,然后输入第二个请求(因此第二个请求需要大约20秒才能返回而不是10).

有没有一种直接的方法让我实现一个系统,服务器不等待处理程序返回?具体来说,我正在尝试编写一个系统,在返回任何请求之前等待接收多个请求(一种长轮询)并遇到第一个请求等待阻止任何未来请求连接到服务器的问题.

python simplehttpserver

11
推荐指数
1
解决办法
9220
查看次数

可以使用Python SimpleHTTPServer或cgi上传文件吗?

我想有一个简单的网页,用户可以上传文件.什么是最简单的方法.

我知道如何开始,SimpleHTTPServer但我不知道如何使用上传文件SimpleHTTPServer.我甚至不知道是否有可能.

我找到了一些使用cgi上传文件的代码,但如果我在命令行中执行此代码,它只会在屏幕上打印HTML代码.

python webserver cgi file-upload simplehttpserver

11
推荐指数
1
解决办法
2万
查看次数

麻烦让SimpleHTTPRequestHandler响应AJAX

我最近尝试实施SimpleHTTPRequestHandler根据接受AJAX请求.

虽然一切似乎都可以接收来自客户端的请求,但是当我尝试self.wfile.write("foo")时,我无法将任何内容发送回客户端,我在客户端得到了回复; 但是,XmlObject的响应文本是完全空白的!?!

如果有人能够对此有所了解,那就太棒了!

编辑:我认为我的AJAX调用结构正确,因为我得到了Python的响应(我已经检查过调试模式); 但是,当我得到一个对象时,我没有得到任何回复responseText的消息.

javascript python ajax jquery simplehttpserver

9
推荐指数
1
解决办法
4773
查看次数

Python:如何对自定义HTTP请求处理程序进行单元测试?

我有一个自定义HTTP请求处理程序,可以简化为这样的:

# Python 3:
from http import server

class MyHandler(server.BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()

        # Here's where all the complicated logic is done to generate HTML.
        # For clarity here, replace with a simple stand-in:
        html = "<html><p>hello world</p></html>"

        self.wfile.write(html.encode())
Run Code Online (Sandbox Code Playgroud)

我想对这个处理程序进行单元测试(即确保我do_GET没有例外地执行),而不实际启动Web服务器.是否有任何轻量级方法来模拟,SimpleHTTPServer以便我可以测试此代码?

python unit-testing simplehttpserver

9
推荐指数
2
解决办法
3258
查看次数

Haskell相当于python -m http.server?

有没有办法启动http服务器直接使用ghc -e或runhaskell从shell提供静态文件?

haskell simplehttpserver httpserver haskell-warp

9
推荐指数
1
解决办法
326
查看次数

Python SimpleHTTPServer正在制作中

我想用Python提供静态文件.Python 3是否http.server适合在生产中使用?如果没有,为什么不呢?我还有什么选择?

python simplehttpserver

9
推荐指数
1
解决办法
2002
查看次数

Python SimpleHTTPServer 接收文件

我正在使用 SimpleHTTPServer 的 do_POST 方法来接收文件。如果我使用 curl 上传 png 文件,脚本工作正常,但是每当我使用 python 请求库上传文件时,文件上传但会损坏。这是 SimpleHTTPServer 代码

#!/usr/bin/env python
# Simple HTTP Server With Upload.

import os
import posixpath
import BaseHTTPServer
import urllib
import cgi
import shutil
import mimetypes
import re
try:
    from cStringIO import StringIO
except ImportError:
    from StringIO import StringIO

class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):    
    # Simple HTTP request handler with POST commands.

    def do_POST(self):
        """Serve a POST request."""
        r, info = self.deal_post_data()
        print r, info, "by: ", self.client_address
        f = StringIO()

        if r:
            f.write("<strong>Success:</strong>") …
Run Code Online (Sandbox Code Playgroud)

python cgi file-upload simplehttpserver python-requests

9
推荐指数
2
解决办法
2万
查看次数

CSS没有更新本地python httpserver重启

我对web dev和http服务器等世界相当新,但我有一个基本的shell脚本,如下所示:

PORT=2600 
if [[ $1 =~ ^[0-9]+$ ]]
  then PORT=$1
fi

echo "Starting local http server (ctrl-c to exit)"
echo ""
echo "  Demo:   http://127.0.0.1:$PORT/demo"
echo ""
python -m SimpleHTTPServer $PORT
Run Code Online (Sandbox Code Playgroud)

它似乎可以正常工作,但是当我在我的演示中更新css文件时,很少和不一致会更新页面上显示的css.对任何html的更改都很好,并且它偶尔会显示css的变化,但我觉得我在这里做了一些根本错误的事情.思考?

css http simplehttpserver

8
推荐指数
1
解决办法
6270
查看次数

保存日志 - SimpleHTTPServer

如何保存控制台的输出

"192.168.1.1 - - [18/Aug/2014 12:05:59]代码404,消息文件未找到"

到文件?

这是代码:

import SimpleHTTPServer
import SocketServer

PORT = 1548

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

httpd = SocketServer.TCPServer(("", PORT), Handler)

print "serving at port", PORT

httpd.serve_forever()
Run Code Online (Sandbox Code Playgroud)

python logging save simplehttpserver

8
推荐指数
1
解决办法
1万
查看次数

Python SSL 服务器给了我“501 Unsupported method GET”

我已经按照此链接构建了一个带有 SSL 的简单文件服务器。

from http.server import HTTPServer, BaseHTTPRequestHandler
import ssl

httpd = HTTPServer(('localhost', 4443), BaseHTTPRequestHandler)

# openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
httpd.socket = ssl.wrap_socket (httpd.socket, keyfile="key.pem", certfile='cert.pem', server_side=True)

httpd.serve_forever()
Run Code Online (Sandbox Code Playgroud)

我创建了一个证书成功,key.pemcert.pem文件路径都很酷,我可以使用启动服务器python server.py。我被要求输入密码,输入它,然后它冻结了一会儿,然后它似乎运行。

但是,当我输入一些 URL 时,例如https://localhost:4443/index.html我得到500 Unsupported method GET。错误代码解释:HTTPStatus.NOT_IMPLEMENTED - 服务器不支持此操作。我需要做更多的事情来让我的服务器为当前目录提供服务吗?到目前为止,我刚刚使用过python -m http.server 8000SimpleHTTPServer在 Mac 上时)。我使用的是 Python 3。

这是一个将保持本地状态所以不要担心PEM文件和服务器脚本通过它暴露(如果它有效!)。我也同意证书不受信任并指示 Chrome 无论如何访问该页面。我只需要它来允许我访问相机,而不必将我的应用程序部署到具有合法证书的某个地方。

python simplehttpserver python-3.x

7
推荐指数
1
解决办法
8731
查看次数