繁体   English   中英

Python 3 HTTP 服务器图像编码

[英]Python 3 HTTP server image encoding

我目前正在测试从 Python 3.4 HTTP 服务器运行其他代码和文件。 所有 html 和 javascript 与任何非文本文件完全分开加载。 我认为这是由于图像文件缺乏编码。

这是我与 ip 一起使用的 python 代码并删除了端口:

from http.server import BaseHTTPRequestHandler, HTTPServer
from os import curdir, sep
import subprocess

# HTTPRequestHandler class
class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):

  # GET
  def do_GET(self):
    # Send response status code
    self.send_response(200)
    # Attempt To Send Different Files
    if self.path.startswith("/favicon.ico"):
      self.send_header('Content-type','text/html')
      self.end_headers()
      return
    # HTML
    elif self.path=="/":
      self.send_header('Content-type','text/html')
      self.end_headers()
      f = open(curdir + sep + "/Web.html")
      self.wfile.write(bytes(f.read(), "utf8"))
    # Image
    elif self.path=="/files/picture.png":
      self.send_header('Content-type','image/png')
      self.end_headers()
      f = open((curdir + sep + "/files/picture.png"), "rb")
      self.wfile.write(f.read())
    f.close()
    return

def run():
  print('starting server...')

  # Server settings
  server_address = ("LHOST", "LPORT")
  httpd = HTTPServer(server_address, testHTTPServer_RequestHandler)
  print('running server...')
  httpd.serve_forever()


run()

和 HTML:

<html>
<title> PAGE 1 </title>
<head> 
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<img src="files/picture.png"/>
</body>
</html>

图像在本地加载,而不是通过 Internet。 所有其他 HTML 在 web 上工作(即端口转发不是问题)

我所做的很多研究导致 python 2 或 simplehttpserver 这主要不是我的代码,所以我不完全确定它是如何工作的,但图像位只是我的猜测,它没有工作。

# Image
elif self.path=="/files/picture.png":
  self.send_header('Content-type','image/png')
  self.end_headers()
  f = open((curdir + sep + "/files/picture.png"), "rb")
  self.wfile.write(f.read())

谢谢你的帮助

编辑:几乎现在它现在偶尔可以完美运行

我不确定这是不是答案。 但你在 if 之外做 f.close 。 但是 f 没有为 favicon 定义。 因此,如果有任何东西试图访问它,它可能会崩溃。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM