我的python web服务器不会呈现图像

时间:2017-04-03 19:32:10

标签: python html image webserver

我正在创建我的python web服务器,它将把当前目录中的html文件称为“index”,读取代码并将其作为响应发送,但我看到当我想显示图像时,它没有'工作,有人可以帮我吗?

#server.py
import socket

port = 8080

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind(('', port))
listen_socket.listen(1)
print 'Serving on port '+str(port)
while True:
    client_connection, client_address = listen_socket.accept()
    request = client_connection.recv(1024)
    print request

    response = """\
HTTP/1.1 200 OK
Content-type:text/html\r\n\r
"""
    f = open("index.html", 'r')
    content = f.read()

    client_connection.sendall(response+content)
    client_connection.close()

这是我想要显示的HTML代码

<!--index.html-->
<html>
<body>
<p>image:</p>
<img src="img.jpg" />
</body>
</html>

如果可以直接从网址获取图像,也会更好。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

图像未呈现,因为您没有发送您刚刚发送html页面的图像。

您需要识别请求并根据该请求发送资源。 我试着调整你的代码。它正确显示我的图像。

# server.py
import socket

port = 8080

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind(('', port))
listen_socket.listen(1)
print 'Serving on port ' + str(port)
while True:
    client_connection, client_address = listen_socket.accept()
    request = client_connection.recv(1024)
    print request

    if request.split()[1] == '/':
        headers = ("HTTP/1.1 200 OK\r\n"
                   "Content-Type: text/html\r\n"
                   "\r\n")
        f = open("index.html", 'r')
    elif request.split()[1] == '/img.jpg':
        headers = ("HTTP/1.1 200 OK\r\n"
                   "Content-Type: image/jpeg\r\n"
                   "\r\n")
        f = open("img.jpg", 'r')

    content = f.read()
    client_connection.sendall(headers + content)
    client_connection.close()

如果您想要提供的不仅仅是一个页面,请查看Django,Flask等一些Web框架。