博客雲 2024-09-10 15:08 采纳率: 60%
浏览 3
已采纳

搭建静态web服务器出问题了


import socket

if __name__ == '__main__':
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    tcp_server_socket.bind(('', 8080))
    tcp_server_socket.listen(128)
    while True:
        tcp_server_socket.accept()
        new_socket, ip_port = tcp_server_socket.accept()
        recv_data = new_socket.recv(4096)
        print(recv_data)
        
        with open('js/index.html', 'rb') as f:
            file_data = f.read()
        response_line = "HTTP/1.1 200\r\n"
        response_header = 'Server: PWS/1.0\r\n'
        response_body = recv_data

        response = response_line + response_header + '\r\n' + str(response_body)
        response_data = response.encode('utf-8')
        new_socket.send(response_data)
        new_socket.close()

输出乱码了,怎么转码?

b'\x16\x03\x01\x06\xf2\x01\x00\x06\xee\x03\x03\x0e\x9d"\xb3\xad\xec%\xe5\xd5\x1d\xfb|\x08\x95\xd3\xba(pi\xf6\xd0\x95\xc9#\xfc\x06U\x82\xear\xf1\xdf \x05\xea\x1e\x17\\-~\t\xba8\xbbn\xcc\xec\xe2\xe3\x0e\xee\x7f)O\xc0\xe2\xd6\x0e\x1c\xa4DL\xc9\xa4\xe5\x00 \n\n\x13\x01\x13\x02\x13\x03\xc0+\xc0/\xc0,\xc00\xcc\xa9\xcc\xa8\xc0\x13\xc0\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x06\x85\xfa\xfa\x00\x00Di\x00\x05\x00\x03\x02h2\x00\r\x00\x12\x00\x10\x04\x03\x08\x04\x04\x01\x05\x03\x08\x05\x05\x01\x08\x06\x06\x01\x00\x0b\x00\x02\x01\x00\x00\x17\x00\x00\xff\x01\x00\x01\x00\x00\x12\x00\x00\x00\x10\x00\x0e\x00\x0c\x02h2\x08http/1.1\x00\x1b\x00\x03\x02\x00\x02\x00\x00\x00\x0e\x00\x0c\x00\x00\tlocalhost\xfe\r\x00\xfa\x00\x00\x01\x00\x01W\x00 \x80\xfb\xfe\riwm\x04\xf5\xc9\t\xcf\xbd\xf9\xfb \xf9\x86\xc4[\x8a\xb4\xa1\xd4\x9d\xdaH\xd5\xceDWS\x00\xd0\xc8\xb3\xdc\xbc=\xddc#\x10\x80\xc1;\xcf\x8d\x19u\x127A\xf7\xfd5\xa0\xbb\xbfe\xa08\x8d\xd1E\x0c+5\xf2H2\xd8\x12n\xff\xbdb\xba&\x12Q\xa6\x85\xe0\t\xd2?o\xf8\x0e\x1e?Y\x0f\x19*\xe9\x12K\xea\x08\\\x06\xa0\xdeJa\x8bB\x17\xcb\x07\xc7\xcd\xdf\x04@Ni\xd0\xd4\x8e\x82\x17\xdf\xfa\x88\xedSJ\xc8\xcd\x84\xbak\xd0\\\xfa<\x16\xae+\x8dG\xb0\xfbX\xa6\x11q/\xc8\x1b.\xdc\x80\xa9\x17\xd6\x92\xa8\xf2\x8e\xf2\x1c\xbd\x81\xab\x07\x94\x1aiUz|\x18\xe3\x827\xca1\xeb\xd5y\xaa\xeb*\x8b=\x07\xb4(\x1c\x01?J\xf3\x91\xec\xc5\xea}\xc0\xca\xbd\xef\xa2\xfb\xbf\xd4\xf9\x11t\r#6\xf5\xa7\xd2JWh\xd5\x8f\xfd\tUBt"\x1eu\xa7\xbdO\x14\x8a\t.y\xa5\n\x003\x04\xef\x04\xedZZ\x00\x01\x00c\x99\x04\xc0\x05\xc6[\xf78\xb3\xacH\xef\xa4\xb3\x95\xfa\x91\x94S\x0co\xee9E7u\x89\xa4e-J\x0e\x08\xfe\t\x88p#\'\xcbX.\x92$\x9aUip\xa4v\xad"\x88U\x81\n@\xb1\xcee\xb6&\xc9\x1c=\xd3"h\xba\x01\xc8\xa4@FVJ\xb0\x82D\x90J\xfb\x12N\x0c_\x90\x12\x0fP<\xb4^\xe4\xa3X\xb1u\xb19FY\xb6G\xc0@eQ\x01S9JE\x01\x87\xb9G\xfb\xab\xe7\xc8\xc5\xba\x08\x86\x9d\xb9K\xae\xc9.-uD\xfc|\xca\x80\xf9\x86\xc9\x91c\x8d\xe3\x16l\xa6\x90\xd4\x02f\xcb"\xb8^+9\xed\xf5\x03\xf1\x11\r\xd4\xc8312\xc7\x87z\x1e\xd6\xd1\xbf\x17Y<z\x0c\x89\xf8\xeb\xbd\xc9\x03\xc2\xa7\xe5zgu\x87"\xfcwg\xc6z\x9b\x02]c\xf7\x0eiR\xcd^\xfcPv\xf9\x04\xb0gm\x12\xe4\xc5\xfd\xd8\n\x1fb\xae\x16\x04\xba\xda\xc6I}\x8c\x9e\xb0:\xc4\xfe\xd9B\xec\x89\x19>\xc4\x16\xed6\xcd\xa4\xf7\x8c&\x93\x1f"\xb3\xba:\xd4\x84G\xe3P\xa7\x17\xcf\xfc\xa9\x96\xbe\xb0\xa8\x18\x0c\x01\x8dfJ[\xd4\x85\x1c\x92(IE\xa1oZj9\x85\xa8\xa4E\x12H\xa2\x12kT\xac\x8a|\x0eKf\x13\xd5\xd4\xa3,K\x82>+W,\x05\x947 \xa0\x95)\x89\xd1w|Kkg\xa9&\xb3r\x9c<\xfa\xd1\x9d\x84u\x85\x85\xfc\xa2]\x05\x858\xba\xab\x80\xc6u3\xf6h\x8b\xc6\x97p\x1b2\xcd\xf2\xb4\xb7&\x7fi\xa3;\xbc\xe1\x95\x8e<\x89\xe4To\x08\x8a\x8e\xb0\xd5\xcd\x0c\xb3\xcb\x85[\xc8\xf3\x12<sI5\xb4l/]\xc1\x15Fs\x9f)tse\xa9`\xadv_n"ME\x94\xa4\x0bY&\xd3\xc4\xcca\x15\x9a\xbe\x15.\x92\x0c\xb1R\x81\r\xaf\xc4;d\x06\xa5\x89\xa3Q\xf8\xf1\xc1\xbf\xea\x941\x8b\x93\xa0\x83\x9cD{P\x9c\xe9\xa96\xb6\x91\x11\x99X\x9c\x97}"\xc3\x06\xde\xa1\x8b}\x04O!G}\xb2\xd5;<G\x16a\xeb"L+|\x01\xeb\'NdQ>\xd6\x0eX\x14\xb9\x933\x9dj\xf2z\xb8\xca\x10\r\x03\xc6\xf2iMnq\xac\x07\x94p\xb4\xa6;\xd8\t\xb5\xebj\xc9!\xd5pb\xfa\x9c\xf0\xb3]\x08\xc4vGf\xcf\xfc\xb1\x10\x88\xa4j\x1a\xbc\x0c\xfa\x96E\x8a0d\xdf\xf3\x05\xef\x98\r\xdd\x01\xcd\x92\xb7\xc2+\x12\xb7\x00i\x8e\x00\xdb\x83\x03\xf8\xc4K\x03DFAWW\xb3\xc9\x8fjWf\x07\x0f\x8b\x12\x96\xc5\x01\x1c\x18\x83\xc7\xc4Dj\xc1\x8c\x00\xd6k~\xa8*\xb6$\x85\xa7-\xf2\x81o\xb9r\xdd\xd6"Y\x07\x8e\x1f\xc9a\x1f\xdaZya\xabN\x12/X\x8aW\xe1\x9b}y\x14\x0f\xb3\x16\xa3\x94\x9c\xc5\xab\xebF\xa2+\xb1<\xb8Wz\x83?\x01\x08\xb8UD8\xa6\x03\x01_c\x94f\x0cv\xd8\xc2\t\xf0\x82"\x80u_\xefX\xc7\xbf\xa4\tW\xe9P\x86\xd5\xc2\xad\xb2z\xa83\xb3\xf5\x17 \x07\xf9y\xa0\xc9\x8d\x91xS\xfd\xd0x\xaba"\xfe5\xcfy9\x12\xfa\xc6_\x0bf\x88\xbd\x81\x8b\xca\xd4\xb8\x8c\x82yk\xca\xc3\x0f\xfa\x9aF\xcc\x85\xb7 \x11\x01\xb2yy\xd4\xbc#;\x98\xd1|?[i`\x08\xc4\x010\xc7:\x87\x83\x94i\x18\x8e\x96w$\x1e\x96;\x1d\x8cg]\xf2\x1e\xef\xb0>\x1f57\xa4\xb7S\xec\x95M\x9f\x9c\xaf\xd2\xc9\xc0\x0b\'O\xad\x03\xaa\xb4D\x89\xfc\xd5:#\xcb\xc9\x84\x17\xb0"\x0b\x82\xf3\xd6\xad\xdb!\xbdM@7\x8a\xa4@\xd4\xfc\x85\xedZW\x86\xaa=\x02\xbc\xb5\xfeB\xa4\xa6U\xb5\xb3\xe2\x8d\xce\xc0\x85\x17"\x91\xb6*k\x0b\x87\xad`HM\xc6\x1ah\x17\x9c\xca\xddI/jUt*\x1a\x0cE\xe9\x04\xd9\xa9V\x11\xab?\x8a\t\x04\x070!#\x89\xcc}\xbc\xc0\x88g\x951CZz\x8cj\r\xa6;(l\x06u\xd8\xa2\x065c\xef`>I\xca\x7f\xab\xbc\xba\xa6\x17\x8eL\xd5"\x06\x052\x01#N1A\x17\x12\x9a\x04~\xd1\x88y\x1b\xb3\xa5\xa7]\xd7Y\x1f2+\x9c\xb0l\xad\x0c\xa3\x1e\xdaj\x14\xdc\x80\'\x7f\xc8\xb4\x95A\x07%\xaa2t1\x8d\xc9\xc2\xc1~\xe9\xafb\x14[\xc0\xe2\x12\xa3 lj%z\xc7\x1bt\xe4\x01I\x11h,\xd7Q$5\xb3h\x8b\xe5\x98.f\x8d\xb4\xf0\x82\x15xO\x9f\x0b\xb4\x8f#\r\xb9@\xb9\xc1pmm\xc9\x0b\x12h\'\x89\x02b\xe7\xb7"BlCm\xa4D\xae\xfb\x08\xa2\x99\xb3\xf2\x08n\xa7:~\xb5\x97\xa6\x87\xe2?\xfdLP\x8fAB\x83\xe7RFI\x13\x1f\xf2\x0b\x9a\xd9\x92]\x1a\xc9\n\'R\x0e\x17\x82\x7f\x00\xba\x9d\xf1\x8e8\'\xb5\x10*\xc6p+S\xa2\xa5\x7f\x1c\xc8\x89\xd3\xb3\x9f\xaf7\xadve\x0c\x92"{\xd9,9\x9aJ\x83\x1bE\xa6D\xb9\xc5\xa5_\xbf\xd6\x917%\xe8\x87E\x9bs\xa5\x0e&Qu$\x12-\x00\x1d\x00 -\xce-\x8e\xee\x88~\x82\x1dKec<\xdc\xa7j\x98\xca\xe7\xdcy\xb9\x9e\x1f\x7fjT-/\x16\xfd\x01\x00-\x00\x02\x01\x01\x00\x05\x00\x05\x01\x00\x00\x00\x00\x00#\x00\x00\x00+\x00\x07\x06zz\x03\x04\x03\x03\x00\n\x00\x0c\x00\nZZc\x99\x00\x1d\x00\x17\x00\x18\xaa\xaa\x00\x01\x00'


浏览器输入https://localhost:8080/index.html显示不安全

img

怀疑是我的response写错了,求解

  • 写回答

1条回答 默认 最新

  • 还是那个同伟伟 Python领域优质创作者 2024-09-10 16:49
    关注

    是因为你直接将接收到的数据 recv_data 作为响应的主体发送回客户端,而没有正确解析和处理 HTTP 请求。HTTP 请求通常包含请求行、请求头和请求体(如果有),你需要解析这些部分并根据请求的内容生成适当的响应。

    import socket
    
    def handle_client(new_socket):
        try:
            # 接收客户端请求数据
            recv_data = new_socket.recv(4096)
            if not recv_data:
                return
            
            # 解析请求数据
            request_data = recv_data.decode('utf-8')
            request_lines = request_data.splitlines()
            request_line = request_lines[0]
            
            # 提取请求的文件路径
            request_method, request_path, request_version = request_line.split()
            
            # 默认返回 index.html
            if request_path == '/':
                request_path = '/index.html'
            
            # 读取文件内容
            try:
                with open('js' + request_path, 'rb') as f:
                    file_data = f.read()
                response_line = "HTTP/1.1 200 OK\r\n"
            except FileNotFoundError:
                response_line = "HTTP/1.1 404 Not Found\r\n"
                file_data = b"404 Not Found"
            
            # 构建响应头
            response_header = 'Server: PWS/1.0\r\n'
            response_header += 'Content-Length: {}\r\n'.format(len(file_data))
            response_header += 'Content-Type: text/html; charset=utf-8\r\n'
            
            # 构建响应
            response = response_line + response_header + '\r\n'
            response_data = response.encode('utf-8') + file_data
            
            # 发送响应
            new_socket.send(response_data)
        finally:
            new_socket.close()
    
    if __name__ == '__main__':
        tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
        tcp_server_socket.bind(('', 8080))
        tcp_server_socket.listen(128)
        
        while True:
            new_socket, ip_port = tcp_server_socket.accept()
            handle_client(new_socket)
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 今天
  • 创建了问题 9月10日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?