ArtsAutosBooksBusinessEducationEntertainmentFamilyFashionFoodGamesGenderHealthHolidaysHomeHubPagesPersonal FinancePetsPoliticsReligionSportsTechnologyTravel

how to make a very simple hello world cgi based html form using iinet isp

Updated on March 8, 2010

cgi hello world

Feb 2010

It took me ages with the limited information available from iinet to work out how to get cgi scripts working. This is an unsupported feature from iinet so you are pretty much alone when it comes to troubleshooting, and the exact way that it has to be done is dependent on how iinet set up their apache web server. What you need to get started is a proven simple proof of concept that works on their servers.

This article describes the simplest proof-of-concept web page and cgi script that I can think of. The idea is to make it so simple that there is very little to go wrong.

This simplicity is important because as you will soon learn, like all roads lead to roam, all errors lead to one error message for cgi scripts.

500 Internal Server Error:

There is plenty already on the internet about this, so I won't repeat it here.

The aim is to give a simple example so that you can start off with a working baseline. Although I am using iinet, this information is likely to be useful for other ISPs.

Create the calling web page.

You need a web page that uses forms to call the cgi script. Create a plain text file

called testcgi.html

Here it is:

  <meta content="text/html; charset=ISO-8859-1" 

 <form action="cgi-bin/mycgi.cgi">
 <input name="Firstname" type="text">
 <input value="OK" type="submit">


Strictly,we could get away without

<input name="Firstname" type="text">

but when you use this line, you can observe the URL field at the top of your browser and see how the contents of a form are passed to the cgi script. Our cgi script will NOT do anything with this data because that would complicate matters, and the idea here is to keep it simple. There are plenty of pre-build forms-parsers available already.

Now create the test cgi script

Here is the test script. It is very important to print the content type. In this case I am creating a plain text output, but if you are creating a web page, then the type should be HTML.

Create a plain text file called mycgi.cgi

print "Content-type: text/plain\n\n";
print "That worked\n";

Note: For HTML output, you need

print "Content-type: text/html\n\n";

Then of course you need to print valid and well formed HTML with the tags.

How to upload it.

I will make a few assumptions that you have come here already armed with a home page on iinet, and therefore know how to upload files and make directories on their server.

The script will fail if it has the wrong permissions, and it needs to be in a directory called


which also has the correct permissions.

Using an ftp client such as filezilla,

  • upload testcgi.html to the top-level of your account.
  • create a directory called cgi-bin
  • upload mycgi.cgi to cgi-bin
  • change the permissions of cgi-bin to 755

Sample permissions:

testcgi.html ( file ) -rw-r--r--
cgi-bin ( directory ) drwxr-xr-x 

The cgi-bin directory contains your perl cgi script.

mycgi.cgi (file) -rwx-rx-rx


Browse to your home page


You will see a form. Type xxxx into it and click the OK button.

The URL line will change to


The page will display

That worked

Going further

You will need a forms parser. One can be found here. Start with this to understand how to pass data from the web page to the server's cgi script.

Then, when you get more confident, there is a tutorial about sending mail here.

If you know of any more links that are useful, please put them in the comments below.

Thank you!


    0 of 8192 characters used
    Post Comment

    • Manna in the wild profile imageAUTHOR

      Manna in the wild 

      7 years ago from Australia

      Thanks Pcunix

    • Pcunix profile image

      Tony Lawrence 

      7 years ago from SE MA


      Some of the features that make this wonderfully easy are the ability to test on the command line, easy access to form variables ( param('yourvariable') ), support for cookies, nonparsed headers, being able to limit the overall amount of script data passed (eliminating some denial of service attacks) and crashing out more gracefully when you or your script screws up. .

    • profile image


      8 years ago

      Hi 'd' - It seems your test worked. How is the weather in Caracas?

    • profile image

      8 years ago


    • Manna in the wild profile imageAUTHOR

      Manna in the wild 

      8 years ago from Australia


    This website uses cookies

    As a user in the EEA, your approval is needed on a few things. To provide a better website experience, uses cookies (and other similar technologies) and may collect, process, and share personal data. Please choose which areas of our service you consent to our doing so.

    For more information on managing or withdrawing consents and how we handle data, visit our Privacy Policy at:

    Show Details
    HubPages Device IDThis is used to identify particular browsers or devices when the access the service, and is used for security reasons.
    LoginThis is necessary to sign in to the HubPages Service.
    Google RecaptchaThis is used to prevent bots and spam. (Privacy Policy)
    AkismetThis is used to detect comment spam. (Privacy Policy)
    HubPages Google AnalyticsThis is used to provide data on traffic to our website, all personally identifyable data is anonymized. (Privacy Policy)
    HubPages Traffic PixelThis is used to collect data on traffic to articles and other pages on our site. Unless you are signed in to a HubPages account, all personally identifiable information is anonymized.
    Amazon Web ServicesThis is a cloud services platform that we used to host our service. (Privacy Policy)
    CloudflareThis is a cloud CDN service that we use to efficiently deliver files required for our service to operate such as javascript, cascading style sheets, images, and videos. (Privacy Policy)
    Google Hosted LibrariesJavascript software libraries such as jQuery are loaded at endpoints on the or domains, for performance and efficiency reasons. (Privacy Policy)
    Google Custom SearchThis is feature allows you to search the site. (Privacy Policy)
    Google MapsSome articles have Google Maps embedded in them. (Privacy Policy)
    Google ChartsThis is used to display charts and graphs on articles and the author center. (Privacy Policy)
    Google AdSense Host APIThis service allows you to sign up for or associate a Google AdSense account with HubPages, so that you can earn money from ads on your articles. No data is shared unless you engage with this feature. (Privacy Policy)
    Google YouTubeSome articles have YouTube videos embedded in them. (Privacy Policy)
    VimeoSome articles have Vimeo videos embedded in them. (Privacy Policy)
    PaypalThis is used for a registered author who enrolls in the HubPages Earnings program and requests to be paid via PayPal. No data is shared with Paypal unless you engage with this feature. (Privacy Policy)
    Facebook LoginYou can use this to streamline signing up for, or signing in to your Hubpages account. No data is shared with Facebook unless you engage with this feature. (Privacy Policy)
    MavenThis supports the Maven widget and search functionality. (Privacy Policy)
    Google AdSenseThis is an ad network. (Privacy Policy)
    Google DoubleClickGoogle provides ad serving technology and runs an ad network. (Privacy Policy)
    Index ExchangeThis is an ad network. (Privacy Policy)
    SovrnThis is an ad network. (Privacy Policy)
    Facebook AdsThis is an ad network. (Privacy Policy)
    Amazon Unified Ad MarketplaceThis is an ad network. (Privacy Policy)
    AppNexusThis is an ad network. (Privacy Policy)
    OpenxThis is an ad network. (Privacy Policy)
    Rubicon ProjectThis is an ad network. (Privacy Policy)
    TripleLiftThis is an ad network. (Privacy Policy)
    Say MediaWe partner with Say Media to deliver ad campaigns on our sites. (Privacy Policy)
    Remarketing PixelsWe may use remarketing pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to advertise the HubPages Service to people that have visited our sites.
    Conversion Tracking PixelsWe may use conversion tracking pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to identify when an advertisement has successfully resulted in the desired action, such as signing up for the HubPages Service or publishing an article on the HubPages Service.
    Author Google AnalyticsThis is used to provide traffic data and reports to the authors of articles on the HubPages Service. (Privacy Policy)
    ComscoreComScore is a media measurement and analytics company providing marketing data and analytics to enterprises, media and advertising agencies, and publishers. Non-consent will result in ComScore only processing obfuscated personal data. (Privacy Policy)
    Amazon Tracking PixelSome articles display amazon products as part of the Amazon Affiliate program, this pixel provides traffic statistics for those products (Privacy Policy)