我正在研究一个需要嵌入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的网络服务器工作.
我想进行基本身份验证(发送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(正确的用户)用户验证确定,但是框弹出,如果我单击取消,我将进入验证页面. .. …
我正在使用BaseHTTPRequestHandler类编写脚本.在do_GET(self)方法中,我需要Host从HTTP请求中获取字段的内容.我可以通过在str(self.headers)这里提出的类似的方法来做到这一点:确定BaseHTTPServer中的站点域,但它有点难看,我想知道是否有更清洁的方法来做到这一点.
提前致谢.
我正在使用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
我正在寻找一个模块,为我提供本地访问的基本http服务器功能.看起来Python有两种方法可以在标准库中实现简单的http服务器:wsgiref.simple_server和BaseHttpServer.
有什么区别?是否有任何强烈的理由偏爱一个而不是另一个?
我只是想从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
我正在使用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)
当我为客户端标记时,这似乎不会呈现图像内容.它看起来像一个破碎的图像.
有任何想法吗?
我在这篇文章中已经阅读过使用ThreadingMixin(从SocketServer模块中),您可以创建一个带线程的服务器BaseHTTPServer.我试过了,它确实有效.但是,如何停止服务器生成的活动线程(例如,在服务器关闭期间)?这可能吗?
我正在尝试编写一个 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
我有一个继承BaseHTTPRequestHandler并实现该方法的Python类do_POST。
我目前仅使用方法末尾的以下命令以整数状态(例如200)成功响应:
self.send_response(200)
Run Code Online (Sandbox Code Playgroud)
我也尝试发送一些字符串作为响应的一部分。我该怎么办?
basehttpserver ×10
python ×9
daemon ×1
httpserver ×1
javascript ×1
logging ×1
python-2.7 ×1
python-3.x ×1
responsetext ×1
servlets ×1
wsgiref ×1