[英]Python BaseHTTPRequestHandler server works for first GET request only
I'm working on trying create a super basic python webserver based on BaseHTTPRequestHandler. 我正在尝试基于BaseHTTPRequestHandler创建一个超级基本的python网络服务器。 When I perform the GET request to the address 127.0.0.1/a for the first time, everything works well and I recover an image on my browser.
第一次执行对地址127.0.0.1/a的GET请求时,一切正常,并且在浏览器中恢复了图像。
However, when I repeat this GET request a second time, I do not get anything. 但是,当我第二次重复此GET请求时,我什么也没得到。 Tracing the code, I can see that the code itself is running through the entire do_GET(self) segment.
跟踪代码,我可以看到代码本身正在整个do_GET(self)段中运行。
I'm really confused as to why the webserver would work the first time and not the next. 我真的很困惑为什么Web服务器会在第一次而不是下次运行。
Any and all help is much appreciated. 任何帮助都将不胜感激。
from http.server import BaseHTTPRequestHandler, HTTPServer
from os import curdir, sep
imagefile = "a.jpg"
imagepage =open(curdir+sep+imagefile, 'rb')
notfound = "File not found"
class webserverHandler(BaseHTTPRequestHandler):
def do_OPTIONS(self):
self.send_response(200)
self.send_header('Access-Control-Allow-Origin', '*')
self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
self.send_header("Access-Control-Allow-Headers", "X-Requested-With")
def do_GET(self):
if self.path == "/a":
print("getting thg jpg file")
self.send_response(200)
self.send_header("Content-type","image/png")
self.end_headers()
self.wfile.write(imagepage.read())
else:
self.send_error(404, notfound)
def main():
try:
port = 1234
server = HTTPServer(('127.0.0.1', port), webserverHandler)
print("Web server is running on port {}".format(port))
server.serve_forever()
except KeyboardInterrupt:
print("^C entered, stopping web server...")
finally:
if server:
print("closing server")
server.socket.close()
if __name__ == '__main__':
main()
Thank you! 谢谢!
def do_GET(self):
notfound = "File not found"
if self.path == "/a":
print("getting thg jpg file")
self.send_response(200)
self.send_header("Content-type","image/png")
self.end_headers()
imagefile = "fig1.png"
imagepage =open(curdir+sep+imagefile, 'rb')
self.wfile.write(imagepage.read())
else:
self.send_error(404, notfound)
Please read file in each request. 请阅读每个请求中的文件。
Why: 为什么:
imagepage.read()
make file seek to end of the image file, So, we cannot read any data with next imagepage.read()
from second request. imagepage.read()
使文件查找到图像文件的末尾,因此,我们无法从第二个请求中读取下一个imagepage.read()
任何数据。
Or 要么
We can use imageContent = imagepage.read()
at first, 首先,我们可以使用
imageContent = imagepage.read()
,
and we can send imageContent
every request from http.server import BaseHTTPRequestHandler, HTTPServer 我们可以从http.server导入BaseHTTPRequestHandler,HTTPServer的每个请求发送
imageContent
from os import curdir, sep 从os import curdir,sep
imagefile = "fig1.png"
imagepage =open(curdir+sep+imagefile, 'rb')
imageContent = imagepage.read() # Read Image here
notfound = "File not found"
class webserverHandler(BaseHTTPRequestHandler):
def do_OPTIONS(self):
self.send_response(200)
self.send_header('Access-Control-Allow-Origin', '*')
self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
self.send_header("Access-Control-Allow-Headers", "X-Requested-With")
def do_GET(self):
if self.path == "/a":
print("getting thg jpg file")
self.send_response(200)
self.send_header("Content-type","image/png")
self.end_headers()
self.wfile.write(imageContent)
else:
self.send_error(404, notfound)
def main():
try:
port = 1234
server = HTTPServer(('127.0.0.1', port), webserverHandler)
print("Web server is running on port {}".format(port))
server.serve_forever()
except KeyboardInterrupt:
print("^C entered, stopping web server...")
finally:
if server:
print("closing server")
server.socket.close()
if __name__ == '__main__':
main()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.