The Python 3 Equivalent of SimpleHTTPServer
Introduction
In this article, we'll explore Python's built-in HTTP servers. We will discuss the SimpleHTTPServer
module, its Python 3 equivalent, and how to run these servers via the command line. This knowledge is crucial for developers who need to quickly set up a server for testing or sharing files.
What is the SimpleHTTPServer?
The SimpleHTTPServer
module is a Python 2.x built-in module that allows you to create a simple HTTP server. This server can serve files from the directory it's run in, making it a nice tool for testing web pages or even sharing files.
# Python 2.x
$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
The http.server in Python 3
With the advent of Python 3, the SimpleHTTPServer
was replaced by the http.server
module. The http.server
module provides similar functionality to the SimpleHTTPServer
but is updated to work with Python 3.
The http.server
module also includes a more robust HTTP request handler than SimpleHTTPServer
, offering more control over HTTP responses.
# Python 3.x
$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 ...
Running the Server via Command Line
Running the server via the command line is straightforward. In Python 2.x, you would use the SimpleHTTPServer module like so:
$ python -m SimpleHTTPServer
In Python 3.x, you would use the http.server
module instead:
$ python3 -m http.server
Both commands will start a server on port 8000, serving files from the current directory. If you want to specify a different port, you can do so by adding the port number at the end of the command:
$ python3 -m http.server 8080
Running a Basic HTTP Server in Python 3
With Python 3, running a basic HTTP Server is as simple as using the http.server
module. This module is a straightforward and efficient way of serving up files and directories on your machine. Here's how you can do it:
$ python3 -m http.server
Once you run this command, you should see something like this:
$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
This means your HTTP server is up and running. You can then access it by going to http://localhost:8000
in your web browser. By default, the server is set to port 8000, but you can specify a different port by appending it to the command:
$ python3 -m http.server 8080
This command will start the server on port 8080.
CGI Handling in Python 3
In earlier versions of Python, the CGIHTTPServer
module was commonly used to handle CGI (Common Gateway Interface) scripts. Starting a CGI server was as simple as running the command:
$ python -m CGIHTTPServer
However, starting with Python 3.3, the CGIHTTPServer
module was removed, and its functionality was incorporated into the http.server
module. This was done in order to simplify the HTTP server capabilities in the standard library.
The modern equivalent for starting a CGI server in Python 3.3 and later versions is:
$ python3 -m http.server --cgi
By using the --cgi
option with the http.server
module, you can enable the same CGI handling functionality that was available with CGIHTTPServer
. This should make migrating over to Python 3 much easier.
Differences Between SimpleHTTPServer and http.server
While SimpleHTTPServer
and http.server
essentially perform the same function, there are a few key differences between them. The most significant difference is that SimpleHTTPServer
is only available in Python 2, while http.server
is available in Python 3.
Another notable difference is that http.server
is more secure than SimpleHTTPServer
. The http.server
module does not execute or interpret any code, making it safer to use. On the other hand, SimpleHTTPServer
can potentially execute arbitrary Python code present in the web directory. Because of this, I'd highly recommend you use http.server
when possible.
Be careful! Always be cautious when serving files and directories from your personal or development computer, especially when doing so over a network. Never serve sensitive information or allow server access to untrusted individuals.
Conclusion
Python 3's http.server
module is a simple and effective tool for running an HTTP server. It's a more secure and updated version of Python 2's SimpleHTTPServer
, and it's just as easy to use. Whether you're testing a website, sharing files over a network, or just playing around, http.server
is a great tool to have at your disposal.