HTTP内容无法完整呈现

来源:4-12 正确认识http协议 -2

幻汐

2021-09-02

import socket,threading
server=socket.socket()
server.bind(('0.0.0.0',8000))
server.listen()
def recv_send(sock,addr):

    client_data = sock.recv(1024)
    print(client_data.decode('utf8'))
    http_temolate= """HTTP/1.1 200 OK
<html dir="ltr" lang="zh">
  <head>
    <meta charset="utf-8">
    <title>新标签页</title>
    <style>
      body {
        background: #FFFFFF;
        margin: 0;
      }

      #backgroundImage {
        border: none;
        height: 100%;
        pointer-events: none;
        position: fixed;
        top: 0;
        visibility: hidden;
        width: 100%;
      }

      [show-background-image] #backgroundImage {
        visibility: visible;
      }
    </style>
  </head>
  <body>
    <iframe id="backgroundImage"
        src="chrome-untrusted://new-tab-page/custom_background_image?url=">
    </iframe>
    <ntp-app></ntp-app>
    <script type="module" src="new_tab_page.js"></script>
    <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
    <link rel="stylesheet" href="shared_vars.css">
  </body>
</html>
 """
    sock.send(http_temolate.encode('utf8'))
    sock.close()

while True:
    sock,addr=server.accept()
    client_thread=threading.Thread(target=recv_send,args=(sock,addr))
    client_thread.start()


图片描述
上面是使用127.0.0.1:8000连接的玩意源码,很明显没有解析成功,标签不完整,同时页面显示与源代码一样,标签也毫无保留的显示在上面,不知道是为什么

 <style>
      body {
        background: #FFFFFF;
        margin: 0;
      }

      #backgroundImage {
        border: none;
        height: 100%;
        pointer-events: none;
        position: fixed;
        top: 0;
        visibility: hidden;
        width: 100%;
      }

      [show-background-image] #backgroundImage {
        visibility: visible;
      }
    </style>

我的尝试
删除上方代码:可以连接但内容为空
删除删除上方代码,同时在HTTP/1.1 200 OK后加入了空行:可以连接但内容为空

按照我的理解网页上出现的应该是body里面的内容,上面的标签应该是title里面内容,但是不是这样的,请问老师到底是哪里出问题了,同时html代码是copy的谷歌新标签页的源码(我自己先按照视频里面敲了出来的是空白页,以为自己格式错了于是换成了这个)

写回答

1回答

bobby

2021-09-03

这是因为你自己写的html本身就有问题,浏览器是无法解析的

import socket,threading
server=socket.socket()
server.bind(('0.0.0.0',8000))
server.listen()
def recv_send(sock,addr):

    client_data = sock.recv(1024)
    print(client_data.decode('utf8'))
    http_temolate= """HTTP/1.1 200 OK
Content-Type: text/html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>htmltest</title>
    <style>
        .page-header {
            height: 35px;
            background-color: #dddddd;
            line-height: 35px;
        }
 
        .c1 {
            float: left;
            padding-left: 100px;
        }
 
        .c2 {
            float: right;
            padding-right: 200px;
        }
    </style>
</head>
<body style="margin: auto">
<div class="page-header">
    <div class="c1">
 ♥收藏本站
    </div>
    <div class="c2">
        <a>登陆</a>
        <a>注销</a>
    </div>
</div>
</body>
</html>
 """
 sock.send(http_temolate.encode('utf8'))
    sock.close()

while True:
    sock,addr=server.accept()
    client_thread=threading.Thread(target=recv_send,args=(sock,addr))
    client_thread.start()


用这个代码体验一下

0
0

Python爬虫工程师实战 大数据时代必备

慕课网严选精品教程,高质量内容+服务!

2377 学习 · 1158 问题

查看课程