Basics

The following command creates a simple HTTP server from CMD:

@echo off
:main
(type index.html) | nc -w 1 -l -p 80 
goto :main

Here index.html is the file that is displayed to whoever accesses the webpage. It can be viewed by typing localhost in the browser on the same computer or your computer's IP address on any other computer on the network.

The first two lines of index.html must be the following to ensure proper working:

HTTP/1.0 200 OK
Content-Type: text/html

This is the file which I use for testing:

HTTP/1.0 200 OK
Content-Type: text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii">
        <title>Hi!</title>
    </head>
<body>
    <h1>Hello World!</h1>
    <p>Congrats! Your server is working!</body>
</html>

Advanced

You can also get information via POST requests!

HTML Body:

<body>
    <h1>hello world</h1>
    <form method="post">
    send something: <input type="text" name="postText" />
    <input type="submit" value="Submit" />
    </form>
</body>

And on the backend:

(type files\index.html) | nc -w 1 -l -p 80 | findstr "postText"

However, this just displays the output. In order to fetch the input in a variable so that you can carry out further operations, try this:

(type files\index1.html) | nc -w 1 -l -p 80 | findstr "postText" > par.txt 
for /f "delims== tokens=1,2" %%G in (par.txt) do set %%G=%%H 
        echo User input: %postText%

There is a bug in this code though. Often browsers will send the information multiple times, and will also sometimes send empty requests. To get around this, we can use the following code:

set postPrev=rahul2001BLEH
(type files\index.html) | nc -w 1 -l -p 80 | findstr "postText" > par.txt 
for /f "delims== tokens=1,2" %%G in (par.txt) do set %%G=%%H 
if NOT %postText% == "" (
    if NOT %postText% == %postPrev% (
        echo User input: %postText%
        set postPrev=%postText%
    )
)

This will ignore empty requests and those identical to the previous ones.

Complete Code

server.cmd:

@echo off
set postPrev=rahul2001BLEH
:main
(type files\index.html) | nc -w 1 -l -p 80 | findstr "postText" > par.txt 
for /f "delims== tokens=1,2" %%G in (par.txt) do set %%G=%%H 
if NOT %postText% == "" (
    if NOT %postText% == %postPrev% (
        echo User input: %postText%
        set postPrev=%postText%
    )
)
goto :main

index.html:

HTTP/1.0 200 OK
Content-Type: text/html


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii">
        <title>hello</title>
    </head>
<body>
    <h1>hello world</h1>
    <form method="post">
    send something: <input type="text" name="postText" />
    <input type="submit" value="Submit" />
    </form>
</body>
</html>

Enjoy!

I have a script which runs remotely on a school PC, which is part of a renderfarm I build for my friend. I needed it to be able to upload the rendered file to my server. Here's how I managed to do this:

On my server I have a page with this simple form to upload the file:

<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="rfile" />
<input type="submit"/>
</form>

This following command send a file via a POST request:

curl --form rfile=@renderedfile.jpg --form press=submit http://example.com/upload.php

This script is platform-independent. Enjoy!

Hi! This is a simple databaseless script to save form data to a file. The code is split into four parts:
- The HTML form
- The PHP code
- The data file
- The .htaccess file



The HTML:
Your document should contain a similar form:

<form novalidate="" method="post" action="submit.php" id="SchoolDetails">
<label for="School">School School:</label>
<input id="School" name="School" type="text" placeholder="School" value="" spellcheck="false" class="">
<br />
<label for="TeamSchool">Team Name:</label>
<input id="Team" name="Team" type="text" placeholder="Team" value="" spellcheck="false" class="">
</form>
<input id="submit" name="submit" type="submit" value="Submit!">

Every Input must have the 'name' attribute. Remember to change submit.php according to the name of your PHP file


The PHP:
This is the PHP code that does the actual work:

<?php
    header("Location: thanks.html"); //This is the page to which the user will be redirected...
    $handle = fopen("userdata.txt", "a"); //this is the name of the text file in which all the data will get stored...
    $post = $_POST;
    $post['----------=User Information'] = '----------';
    $post['User IP'] = $_SERVER['REMOTE_ADDR']; //Saves the IP Address
    $post['Browser/UserAgent'] = $_SERVER['HTTP_USER_AGENT']; //Saves the User Agent
    $post['Referrer'] = $_SERVER['HTTP_REFERER']; //Saves the URL of the page which contains the form
    $post['HTTPS'] = $_SERVER['HTTPS']; //Is the script queried through a secure HTTP protocol?   
    $post['Date&Time'] = date("l jS \of F Y h:i:s A"); //Saves the date and time at which the form was submitted
    //add more global variables here
    $post['========================END'] = '=======================';
    //Save all the form data as Input_Name=Input_Value
    foreach($post as $variable => $value) 
    {
        fwrite($handle, $variable);
        fwrite($handle, "=");
        fwrite($handle, $value);
        fwrite($handle, PHP_EOL);
    }
    fwrite($handle, PHP_EOL);
    fclose($handle);
    exit;
?>

You can add many more PHP global variables. Change thanks.html to point to the webpage to which the users are redirected once they submit the form. userdata.txt is the file to which everything is stored. You can name it anything, but be sure to change the file name everywhere in the code.


The data file:
Just create an empty file called userdata.txt or whatever you want to call it and everything will be saved to it.
Note: It doesn't have to be a .txt file, it can be any format, just make sure it isn't .php because that can be a big security vulnerability.


The .htaccess file:
Now, you have to make a decision. Do you want to be able to see the result on the go without logging in every time? If so, rename your data file to something guessable like MyUserData5566789334.txt so that only you know the URL. After this, just visit the file in your web browser to see the entries. However, if you want something more secure, edit the .htaccess file in the directory in which your file is stored to contain the following:

<Files "userdata.txt">
Order Allow,Deny
Deny from all
</Files>

The downside of this is that you will have to use FTP or your server's web-based administration system to view the file every time.

That's it! Enjoy your new submission form!

Yet another one of my little projects...

Link

Here's a handy script to check the installation of Java:

REM get javaw.exe from the registry entry
for /f tokens^=2^ delims^=^" %%i in ('reg query HKEY_CLASSES_ROOT\jarfile\shell\open\command /ve') do set JAVAW_PATH=%%i

REM if reg entry is not found, java is not installed
if "%JAVAW_PATH%"=="" ( goto java_error ) else ( goto java_installed )

If java doesn't exist, java_error is called. If it exists, java_installed is called

UPDATE: 3rd June 2016 - Fixed typo

Another project that I have been working on for the past few days...

Link

A simple Windows command line utility I coded a few days ago.

I meant to put it up earlier, but I was busy planning my fifteenth birthday :)

Link