使用套接字模块服务 html

serving html with the socket module

我使用 python 套接字打开了端口 8080: Sk.bind(ip_addrr, 8080) 但我希望它在那个端口打开一个 html 页面,这样当我在浏览器中导航到 :8080 时,我必须得到一个 web page.Any ideas?

my problem is that I need to get a html page which I created, to be displayed in port 8080.for example I have index.html for port 80 similarly,I need to have a html page in port 8080.How will I do that?

经过一些研究,我能够将非常小的例子放在一起。您也可以在 https://replit.com/@bluebrown/python-socket-html

上找到它
import socket

s = socket.socket()
s.bind(('0.0.0.0', 8080))
s.listen(1)

with open('index.html', 'rb') as file:
  html = file.read()
  while True:    
    conn, addr = s.accept()
    with conn:
      print('Connected by', addr)
      req = conn.recv(1024)
      print('request:', req)
      conn.send('HTTP/1.1 200 OK\nContent-Type: text/html\n\n'.encode())
      conn.sendall(html)

根据您的要求和评论,我已经更进一步了。虽然不多。足以让您了解如何为不同的页面提供服务。

import socket

def parseRequest(request):
  output = {}
  r = request.decode("utf-8").split("\r\n")
  parts = r[0].split(' ')
  output["method"] = parts[0]
  output["path"] = parts[1]
  output["protocol"] = parts[2]
  output["headers"] = { (kv.split(':')[0]): kv.split(':')[1].strip() for kv in r[1:] if (len(kv.split(':')) > 1) }
  return output

s = socket.socket()
s.bind(('0.0.0.0', 8080))
s.listen(1)

while True:    
  conn, addr = s.accept()
  with conn:
    print('Connected by', addr)
    req = conn.recv(1024)
    r = parseRequest(req)
    path = r["path"][1:]
    if (path == ""): 
      path = "index"
    with open(f'{path}.html', 'rb') as file:
      html = file.read()
      conn.send('HTTP/1.1 200 OK\nContent-Type: text/html\n\n'.encode())
      conn.sendall(html)

您可以查看更新后的回复。