2017-04-03 5 views
0

"index"という名前のカレントディレクトリでhtmlファイルを取得し、コードを読んでそれを応答として送信するPython Webサーバーを作成していましたが、画像を表示したい、それは動作しませんでした、誰かが私を助けることができますか?私のpython Webサーバーは画像をレンダリングしません

#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() 

とここで私はのURLから直接画像を得ることなく行うことが可能であったならば、それはまた望ましいだろう

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

を表示したいhtmlコードです。 ありがとうございます。

+0

「httpserver」のような組み込みのWeb環境や、より合理的で堅牢なweb.pyのようなライブラリを使用することはできませんか? –

答えて

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() 

ただ1ページ以上を提供したい場合は、Django、FlaskなどのいくつかのWebフレームワークを見てください。

関連する問題