Sending HTML through Python Socket Server

20,629

Use triple-quote string:

c.send("""
    <html>
    <body>
    <h1>Hello World</h1> this is my server!
    </body>
    </html>
""") # Use triple-quote string.

Beside the syntax error, there's multiple issues in the code. Following is a modified version (while loop only, see comments to see what modification made)

while True:
    # Establish connection with client.    
    c, (client_host, client_port) = s.accept()
    print 'Got connection from', client_host, client_port
    #c.send('Server Online\n') # This is invalid HTTP header
    c.recv(1000) # should receive request from client. (GET ....)
    c.send('HTTP/1.0 200 OK\n')
    c.send('Content-Type: text/html\n')
    c.send('\n') # header and body should be separated by additional newline
    c.send("""
        <html>
        <body>
        <h1>Hello World</h1> this is my server!
        </body>
        </html>
    """) # Use triple-quote string.
    c.close()
Share:
20,629
Goose
Author by

Goose

CEO at Quantum Labs (www.quantumlabs.us) Contact me at on Twitter - https://twitter.com/usgoose or email at Quantum Labs.

Updated on September 20, 2020

Comments

  • Goose
    Goose over 3 years

    I am trying to learn some HTTP/CGI stuff and I want to print HTML on the webpage when you view it in your browser but am not sure what the correct syntax is when using the socket library:

    #!/usr/bin/env python
    import random
    import socket
    import time
    
    s = socket.socket()         # Create a socket object
    host = socket.getfqdn() # Get local machine name
    port = 9082
    s.bind((host, port))        # Bind to the port
    
    print 'Starting server on', host, port
    print 'The Web server URL for this would be http://%s:%d/' % (host, port)
    
    s.listen(5)                 # Now wait for client connection.
    
    print 'Entering infinite loop; hit CTRL-C to exit'
    while True:
        # Establish connection with client.    
        c, (client_host, client_port) = s.accept()
        print 'Got connection from', client_host, client_port
        c.send('Server Online\n')
        c.send('HTTP/1.0 200 OK\n')
        c.send('Content-Type: text/html\n')
        c.send(' """\
            <html>
            <body>
            <h1>Hello World</h1> this is my server!
            </body>
            </html>
            """ ')
        c.close()
    

    The first three c.send lines work and then there is a syntax issue with the last line where I put in HTML.