pythonhttphttp.server

How do I make a Python server public?


Using this code:

from http import server
class Serv(server.BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
server.HTTPServer(('host', 80), Serv).serve_forever()

I have tried using my public IP, which didn't work, my private IP, which only worked from the same network, and localhost, which is my PC only. How can I change the host so when someone connects to my IP, it connects to my website (from my code)? Do I need my router to redirect to my PC? I know host can be my private IP or localhost, are there any other hosts I can use? Edit: I saw an answer in another question that used Flask, I'd like to not use any dependencies as of now.


Solution

  • If you want to make it work from anywhere,

    your application should listen on IP address 0.0.0.0

    which means (in short) any IPv4 address at all :

    from http import server
    
    class Serv(server.BaseHTTPRequestHandler):
        def do_GET(self):
            self.send_response(200)
            self.end_headers()
            self.wfile.write(b'Hello, world!')
    server.HTTPServer(('', 80), Serv).serve_forever()
    

    If you are in a recent linux/GNU based OS, you may check listening ports with :

    ss -ltpn

    Note that after that modification, you will depend of any proxy/firewall between you and your server to get your application response.