首页 > 解决方案 > 通过http服务器显示html-但是127.0.0.0.1:8008无法连接

问题描述

当我想通过简单的http服务器显示html,但是127.0.0.1:8008无法连接

python3.7和Pycharm

import socket
import threading

server = socket.socket() 

server.bind(("127.0.0.1",8008))

server.listen()

def handle_sock(sock,addr):
    while True:
        tmp_data = sock.recv(1024)  
        print(tmp_data.decode("utf8"))
        response_template = '''HTTP/1.1 200 OK

<html>
    <head>
        <title>Build A Web Server</title>
    </head>
    <body>
        Hello World!
    </body>
</html>

'''
        sock.send(response_template.encode("utf8"))


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

'''
console in pycharm:
GET / HTTP/1.1
Host: 127.0.0.1:8008
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
'''

我希望 html 代码可以在 chrome 中显示,但页面没有响应

标签: python-3.x

解决方案


稍微改变一下handle_sock,页面现在在 Chrome 中完成加载。注意sock.shutdown(socket.SHUT_RDWR)通话。哦,我删除了while True位。

def handle_sock(sock,addr):
    tmp_data = sock.recv(4096)  
    print(tmp_data.decode("utf8"))
    response_template = '''HTTP/1.1 200 OK

<html>
    <head>
        <title>Build A Web Server</title>
    </head>
    <body>
        Hello World!
    </body>
</html>

'''
    sock.send(response_template.encode("utf8"))
    sock.shutdown(socket.SHUT_RDWR)

推荐阅读