标签: basehttpserver

守护python的BaseHTTPServer

我正在研究一个需要嵌入HTTP服务器的守护进程.我正在尝试使用BaseHTTPServer,当我在前台运行它时,它工作正常,但是当我尝试将守护进程分叉到后台时,它会停止工作.我的主要应用程序继续工作,但BaseHTTPServer没有.

我相信这与BaseHTTPServer将日志数据发送到STDOUT和STDERR这一事实有关.我正在将它们重定向到文件.这是代码片段:

# Start the HTTP Server
server = HTTPServer((config['HTTPServer']['listen'],config['HTTPServer']['port']),HTTPHandler)

# Fork our process to detach if not told to stay in foreground
if options.foreground is False:
    try:
        pid = os.fork()
        if pid > 0:
            logging.info('Parent process ending.')
            sys.exit(0)            
    except OSError, e:
        sys.stderr.write("Could not fork: %d (%s)\n" % (e.errno, e.strerror))
        sys.exit(1)

    # Second fork to put into daemon mode
    try: 
        pid = os.fork() 
        if pid > 0:
            # exit from second parent, print eventual PID before
            print 'Daemon has started …
Run Code Online (Sandbox Code Playgroud)

python daemon basehttpserver

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

使用BaseHTTP使用基本身份验证的Python HTTP Server

我试图让一个基于python的网络服务器工作.

我想进行基本身份验证(发送401标头)并对用户列表进行身份验证.使用"WWW-Authorize"标头发送401响应没有问题,我可以验证用户响应(base64编码的用户名和密码),但是,成功验证后登录框会不断弹出.

import SimpleHTTPServer
import SocketServer
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

class Handler(BaseHTTPRequestHandler):
    ''' Main class to present webpages and authentication. '''
    def do_HEAD(self):
        print "send header"
        self.send_response(401)
        self.send_header('WWW-Authenticate', 'Basic realm=\"Test\"')
        self.send_header('Content-type', 'text/html')
        self.end_headers()

    def do_GET(self):
        ''' Present frontpage with user authentication. '''
        self.do_HEAD()

        if self.headers.getheader('Authorization') == None:
            self.wfile.write('no auth header received')
            pass
        elif self.headers.getheader('Authorization') == 'Basic dGVzdDp0ZXN0':
            self.wfile.write(self.headers.getheader('Authorization'))
            self.wfile.write('authenticated!')
            pass
        else:
            self.wfile.write(self.headers.getheader('Authorization'))
            self.wfile.write('not authenticated')
            pass

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

httpd.serve_forever()

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

在第一次加载(http:// localhost:10001)时,登录框弹出,我输入test,test(正确的用户)用户验证确定,但是框弹出,如果我单击取消,我将进入验证页面. .. …

python http-authentication basehttpserver

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

从BaseHTTPRequestHandler中的HTTP请求获取主机字段

我正在使用BaseHTTPRequestHandler类编写脚本.在do_GET(self)方法中,我需要Host从HTTP请求中获取字段的内容.我可以通过在str(self.headers)这里提出的类似的方法来做到这一点:确定BaseHTTPServer中的站点域,但它有点难看,我想知道是否有更清洁的方法来做到这一点.

提前致谢.

python basehttpserver

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

如何覆盖BaseHTTPRequestHandler log_message()方法以记录到文件而不是控制台(sys.stderr)?

我正在使用BaseHTTPServer.HTTPServer创建Web服务

我想记录以下内容以记录到文件而不是控制台.但我还没有设法找到办法.

10.23.23.19 - - [29/Nov/2013 08:39:06] "GET / HTTP/1.1" 200 -
10.23.23.19 - - [29/Nov/2013 08:39:06] "POST / HTTP/1.1" 200 -
10.24.20.14 - - [29/Nov/2013 08:39:27] "POST / HTTP/1.1" 200 -
10.24.20.14 - - [29/Nov/2013 08:39:31] "POST / HTTP/1.1" 200 -
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样:

from BaseHTTPServer import HTTPServer
from pysimplesoap.server import SoapDispatcher, SOAPHandler
.
# The rest of the code
.
.
httpd = HTTPServer(("", 8059),SOAPHandler)
    httpd.dispatcher = dispatcher
    httpd.serve_forever()
Run Code Online (Sandbox Code Playgroud)

我正在使用Python 2.6

python logging basehttpserver basehttprequesthandler

7
推荐指数
2
解决办法
6467
查看次数

BaseHttpServer和wsgiref.simple_server之间的差异

我正在寻找一个模块,为我提供本地访问的基本http服务器功能.看起来Python有两种方法可以在标准库中实现简单的http服务器:wsgiref.simple_serverBaseHttpServer.

有什么区别?是否有任何强烈的理由偏爱一个而不是另一个?

python basehttpserver wsgiref

6
推荐指数
1
解决办法
818
查看次数

从Python的http.server服务文件-正确响应文件

我只是想从http.server提供PDF文件。这是我的代码:

from http.server import BaseHTTPRequestHandler, HTTPServer

class MyServer(BaseHTTPRequestHandler):

    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'application/pdf')
        self.send_header('Content-Disposition', 'attachment; filename="file.pdf"')
        self.end_headers()

        # not sure about this part below
        self.wfile.write(open('/filepath/file.pdf', 'rb'))


myServer = HTTPServer(('localhost', 8080), MyServer)
myServer.serve_forever()
myServer.server_close()
Run Code Online (Sandbox Code Playgroud)

我不确定file.pdf现在该如何回应,却一无所获。我相信标头是正确的,但我无法设法将实际文件发送过来。

servlets basehttpserver simplehttpserver httpserver python-3.x

6
推荐指数
1
解决办法
4579
查看次数

如何使用Python BaseHTTPServerRequestHandler do_GET方法提供图像内容类型?

我正在使用BaseHTTPServer来提供Web内容.我可以提供内容类型'text/html'或'text/css'甚至'text/js',并在浏览器端呈现.但是当我尝试时

self.send_header('Content-type', 'image/png')

对于.png文件,它根本不呈现.

这是一个示例:

                    if self.path.endswith(".js"):
                            f = open(curdir + sep + self.path)
                            self.send_response(200)
                            self.send_header('Content-type',        'text/javascript')
                            self.end_headers()
                            self.wfile.write(f.read())
                            f.close()
                            return
Run Code Online (Sandbox Code Playgroud)

这适用于javascript

                    if self.path.endswith(".png"):
                            f=open(curdir + sep + self.path)
                            self.send_response(200)
                            self.send_header('Content-type',        'image/png')
                            self.end_headers()
                            self.wfile.write(f.read())
                            f.close()
                            return
Run Code Online (Sandbox Code Playgroud)

当我为客户端标记时,这似乎不会呈现图像内容.它看起来像一个破碎的图像.

有任何想法吗?

python basehttpserver

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

使用ThreadingMixin停止BaseHTTPServer生成的线程

我在这篇文章中已经阅读过使用ThreadingMixin(从SocketServer模块中),您可以创建一个带线程的服务器BaseHTTPServer.我试过了,它确实有效.但是,如何停止服务器生成的活动线程(例如,在服务器关闭期间)?这可能吗?

python multithreading basehttpserver python-2.7

5
推荐指数
1
解决办法
2197
查看次数

javascript客户端到Python服务器:获取请求后XMLHttpRequest responseText为空

我正在尝试编写一个 chrome 扩展,它能够向/从 python 服务器脚本发送/接收数据。目前,我正处于 js 脚本发出 GET 请求的时候,唯一的问题是 .responseText 始终为空(即使 python 脚本正在响应文本)。

弹出窗口.js

document.addEventListener('DOMContentLoaded', function() {  
    var xhr = new XMLHttpRequest();

    xhr.onreadystatechange = function() {
        if (xhr.readyState == xhr.DONE) {           
            var resptxt = xhr.responseText;

            if (resptxt) {
                document.getElementById('texthtm').innerHTML = resptxt;
            } else {
                document.getElementById('texthtm').innerHTML = "no response";
            }
        }
    }

    xhr.open("GET", "http://127.0.0.1:80", true);
    xhr.send();
});
Run Code Online (Sandbox Code Playgroud)

服务器.py

import time
import BaseHTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler

HOST_NAME = "127.0.0.1" 
PORT_NUMBER = 80 

class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_HEAD(self):
        self.send_response(200)
        self.send_header("Content-type", "text/plain")
        self.end_headers()
    def …
Run Code Online (Sandbox Code Playgroud)

javascript python xmlhttprequest basehttpserver responsetext

5
推荐指数
0
解决办法
1129
查看次数

Python BaseHTTPRequestHandler:用JSON响应

我有一个继承BaseHTTPRequestHandler并实现该方法的Python类do_POST

我目前仅使用方法末尾的以下命令以整数状态(例如200)成功响应:

self.send_response(200)
Run Code Online (Sandbox Code Playgroud)

我也尝试发送一些字符串作为响应的一部分。我该怎么办?

python basehttpserver basehttprequesthandler

5
推荐指数
2
解决办法
6883
查看次数