Skip to main content

Simple HTTP Server in Python

Have you ever come across a need to share a file over a local network to a number of machines? Have you ever felt the need to share output of a task in text files available at a web-endpoint? Often, there is a requirement to quickly setup a light-weight web-server for such requirements. Python provides the easiest way to setup a simple HTTP server for such use cases with a single command.

Python comes pre-installed with Linux as many of the linux libraries use python in background. Therefore there is no extra overhead of installing python. With support for python2 getting stopped in April 2020, many of the newer versions of linux distros come with default python3. Therefore this post will focus on setting up an HTTP server using both python2 and python3. We will be using Ubuntu 16.04, however it will work for majority of the linux systems where python comes pre-installed.

Preparation

Steps to follow before starting the server:
  1. Make sure you are in the directory which you want to share via server. If you aren't, navigate to an existing location or create a new directory.
  2. Create or move the files and subdirectories that you want to share in the parent directory on which the server will run.
Once all the files and directories to be shared over web-server are in one place and you are in that parent directory, we are good to go ahead and start the server.

For the purposes of this post, I have setup httpserver_demo directory in my /root directory which contains following files and subdirectories:


Python 2

Execute the following python2 command to start a server on port 23456.
python -m SimpleHTTPServer 23456


Of course you can choose a port of your choice between 0 and 65536 but make sure not to use any of the reserved ports or ports in use.

I have setup my server on a virtualbox VM. The following is the output when I hit the port from web-browser on my host machine:

Python 3

Let's start this server on the same host but on a different port, say 65432. Execute following command for python3
python3 -m http.server 65432


Following is the browser output for directory python_files:


Permanent Setup

While the server is working, you might have noticed that the server process is started in the foreground i.e. the shell in which you have started the server doesn't give back the shell prompt after executing the command. It keeps on showing you the access logs of the server. This is problematic if you need to keep the server on even after you log out of the system or your ssh connection to the remote host (if you are working on a remote system) breaks. In such cases, to prevent the web-server from terminating, the web-server must be started in a background process or an alternative process detached from your shell session.

Starting the process in background

This is the simplest solution. Just append an "&" at the end of the above commands and it will start the web-server in a background process.

Starting the server in a screen or tmux session

This is the solution that you may use if you want to keep all the access logs in one place and want to check them later by connecting back to the process in the future. However, the details are out of the scope of this post.

Practical Uses

Python http server has come in handy many times in my day-to-day requirements. When I was conducting lab sessions for one of the courses in my university as a teaching assistant, python http server was my primary tool to share big files and starter code with all the students. And it was the fastest way considering the file transfers happened over internal network. I also used this option to publish daily reports about code differences between code on version control system and code in production during my job. These reports were further used to alert users using an alerting service. There are many such possible uses of this simple light-weight web-server.

Do give it a try and let me know your experience.

Comments

Popular posts from this blog

My Entry into the World of Credit Cards

After joining my job in June 2018, my salary account was opened in ICICI Bank. During the account opening process, I was offered a Life Time Free (LTF) credit card. Simply put, this was my first chance to get into the credit world without any extra hassle because first of all, neither was I aware of the concept of credit scores nor I had any credit history and secondly, I was just curious about credit cards after seeing of my father use his credit cards with extra caution and the monthly event of credit card bill payment that used to happen at my home. And in that sudden moment of joy, I made my first mistake in the credit world. Representative Image (Source: https://jessepollak.github.io/card/) Now if your guess is that I started spending crazy amounts of money which I couldn't repay, then you are WRONG! I am a miserly person. Money doesn't leave my hands and in general, my credit utilization has never exceeded 5% of my credit limit. So coming back to my first mis...

ICICI Credit Limit Increase Offer

Recently, ICICI Bank offered me a free credit limit increase for my Lifetime Free ICICI Platinum Chip Credit Card. My limit is being increased by ~31%. For last couple of weeks, I was seeing increased available credit limit on my ICICI net-banking page. I also received an SMS stating that they are offering me a free credit limit increase, after the bill for the latest credit cycle was generated. The same limit enhancement offer is visible in iMobile app as well. See the last SMS message in the above screenshot In the Latest Bill tab you will see the Manage Limit option just above My Rewards. I have been using the card for around 10-11 months. Although this increase seems low, considering utilization, it seems fair. The highest credit utilization was around 15% once, while for the last couple of months, it was <1%. On average it was in 2-3% range. One can accept the increase through any of the three modes, SMS, netbanking or iMobile. It will immediately update the lim...

The Japanese Constitution - Chapter 1

Chapter 1 - The Emperor Article 1 The Emperor shall be the symbol of the State and of the unity of the People, deriving his position from the will of the people with whom resides sovereign power. This article makes the post of emperor a symbolic one just like the post of Queen in UK or the post of president in a parliamentary democracy. It also emphasizes that the real power resides in the hands of people making it clear that there will be a democratic order of governance in Japan. Article 2 The Imperial Throne shall be dynastic and succeeded to in accordance with the Imperial House Law passed by the Diet. This article describes how the people will control the position of emperor through their elected representatives. Article 3 The advice and approval of the Cabinet shall be required for all acts of the Emperor in matters of state, and the Cabinet shall be responsible therefor. Article 4 The Emperor shall perform only such acts in matters of state as are provided for in th...