================================================================================
HTTPJupiter by TPReal
================================================================================

HTTPJupiter is dedicated for those that are familiar with HTTP protocol and sometimes need to see what exactly happens when they visit some internet page. It can be particularily useful for solving online challenges like Arcanum, slyfx or Mod-X.
The program prepares an HTTP request, connects to some server, sends the request, receives and displays the response. In fact, most of this program's features are not necessary to use it - they are there just to make it easier and less annoying to work with the program.

If you do not want to know what exactly all the options do (I know there's a lot of them), just experiment. With this browser, you cannot get your computer infected in any way! The program only displays the response, it doesn't execute it in any way.

The button C-P-S-R is the fastest way to send the request and read the response.

HTTPJupited is designed to be run in resolution 1024x768.

All settings are stored in INI file, in the directory of a program.

================================================================================
Description of controls:
================================================================================

Connection panel:
Name of the server to connect to (e. g. 'www.slyfx.com'), and the port number (80 for HTTP). Set Host header button is described in Header panel description.

================================================================================

Initial request line panel:
The first line of a request is formed there. For example, if we set Method to 'GET' (a button can be used to do it without typing GET), file to '/index.php', parameters to 'user=TPReal&action=noaction' (Use checkbox must be checked), and HTTP version to 'HTTP/1.1' (again there are buttons to speed up changing it), then these settings describe the following initial request line: 'GET /index.php?user=TPReal&action=noaction HTTP/1.1'.

================================================================================

Header panel:
In the list, there are lines of header of the request. You can add there any line you want, the lines are not compiled in any way by Jupiter (save for what is described at the end of this paragraph), they are just included in the request. Sort of checkboxes on the left allow to include and exclude lines without actually deleting them. To add some new line, click Add and type for example: 'Accept-Encoding: gzip'. The value (the part after the colon) can be changed easily afterwards, in the edit field below the list. Use the small arrows to change order of appearance in the request.
Special header lines:
User-Agent: the header line 'User-Agent: HTTPJupiter' is added automatically to the list, however it doesn't need to be included in the request. And of course there may be another User-Agent header line, with some other value.
Host: this can be set to the same as Server form the Connection panel, by clicking Set Host header button.  If the response says 'The request could not be understood by the server', it's possible that the Host header is wrong (not the same as the server address).
Content-Lenght: this can be set from Content panel by clicking Set Content-Length header, based on actual content.

================================================================================

Content panel:
Content of a request (the part below the header) can be taken from the main field in this panel, or from the specified file. It may also be empty, and in most cases it is.

================================================================================

Request panel:
Here the whole request is prepared. The request can be also typed manually, without using any of the options described above. If content is taken from a file, it is not displayed, only the size indicates the fact. Click Send button to send the request (you should first connect to the server).

================================================================================

Response panel:
If the response consists of printable character, it is displayed exactly as it was received, or else BINARY DATA indicates some nonprintable characters in the response. Save text button saves exactly what is displayed, but if you want to save the content only (also data content (nonprintable)), click To new, Append or Whole to save it to file. To new creates new file, Append appends the content to an existing file and Whole retrieves the whole content (useful when the content is chunked) and saves to a file. There must be the Content-Lenght header line in the response to use these options.
See Examples of use below.
If the response is chunked, click Retrieve to get the next chunk.
The button C-P-S-R connects to the specified server, prepares the request, including setting Content-Lenght header line, sends and retrieves the first chunk of the response.

================================================================================
Examples of use:
================================================================================

1. Let's solve 5b on www.slyfx.com.
First we must login to the site. Type 'www.slyfx.com' as server, set Host header, type '/' as file and C-P-S-R. In the response we see:

    <form action="/cgi-bin/member.cgi" method="POST" name="login">
    <table border="0" cellpadding="0" cellspacing="0" width="307">
    <input type="hidden" name="action" value="login">
      <tr>
        <td><img src="images/shim.jpg" width="103" height="1" border="0"></td>
        <td><img src="images/shim.jpg" width="83" height="1" border="0"></td>
        <td><img src="images/shim.jpg" width="121" height="1" border="0"></td>
        <td><img src="images/shim.jpg" width="1" height="1" border="0"></td>
      </tr>
      <tr valign="top">
        <td colspan="3"><img name="slyfx.com" src="images/logo3_r1_c1.jpg" width="307" height="132" border="0"></td>
        <td><img src="images/shim.jpg" width="1" height="132" border="0"></td>
      </tr>
      <tr valign="top">
        <td background="images/logo3_r2_c1.jpg" align="right" valign="bottom"> 
          <input type="text" name="user" size="8" maxlength="20" onblur="javascript:document.login.pass.focus()">
        </td>
        <td background="images/logo3_r2_c2.jpg" valign="bottom" align="center">
          <input type="submit" name="Submit" value="Login">
        </td>
        <td background="images/logo3_r2_c3.jpg" align="left" valign="bottom"> 
          <input type="password" name="pass" size="8" maxlength="20">
        </td>
        <td><img src="images/shim.jpg" width="1" height="31" border="0"></td>
      </tr>
    </table>
    </form>

Of course, we do not download the images. The next request will be an attempt to login. Settings:
Server: the same
Method: POST
File: /cgi-bin/member.cgi
Content (to fill this we had to find all input fields in the response, we omit only Submit=Login as this is not necessary): action=login&user=TPReal&pass=mypass
Click C-P-S-R. Content-Length is set automatically to the right value. Response:

HTTP/1.1 302 Found
Date: Sat, 17 Jun 2006 11:31:30 GMT
Server: Apache/2.0.54 (Unix) PHP/5.0.4 mod_ssl/2.0.54 OpenSSL/0.9.7e-p1
Set-Cookie: UID=12345; expires=Mon, 01-Jan-2050 00:00:00 GMT; path=/;
Set-Cookie: SESSION=abcdefghijk; expires=Mon, 01-Jan-2050 00:00:00 GMT; path=/;
Set-Cookie: AUTOLOGIN=0; expires=Mon, 01-Jan-2050 00:00:00 GMT; path=/;
Location: http://www.slyfx.com/cgi-bin/level.cgi
Content-Length: 342
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="http://www.slyfx.com/cgi-bin/level.cgi">here</a>.</p>
<hr>
<address>Apache/2.0.54 (Unix) PHP/5.0.4 mod_ssl/2.0.54 OpenSSL/0.9.7e-p1 Server at www.slyfx.com Port 80</address>
</body></html>

Now we have to pretend that our browser creates Cookie files. We add a new header line:
Cookie: UID=12345; SESSION=abcdefghijk; AUTOLOGIN=0
We will include this cookie in each request from now.
It is also worth mentioning that with regular browser we would not see the content of the file member.cgi, as the header line Location makes the browser to jump instantly to some other page. This time the content of member.cgi isn't important for us, but sometimes it may be. Go on:

Method: GET
File: /cgi-bin/level.cgi
Content: unselect Use checkbox (Content-Lenght will be unselected automatically).
C-P-S-R. Response is not necessary for us now, as we want only to solve 5b. We jump there:
File: /cgi-bin/chall.cgi
Params: level=5&part=b
C-P-S-R. Interesting part of the response is:

<p>Here's the <a href='/cgi-bin/others5b.cgi'>link</a> to the solution. What? No really. It is.</p>

If we go to the specified file using a normal browser, we will not see anything interesting. But with Jupiter:
File: /cgi-bin/others5b.cgi
Params: unselect Use.
C-P-S-R, and what we see first is:

HTTP/1.1 200 OK
Date: Sat, 17 Jun 2006 11:43:05 GMT
Server: Apache/2.0.54 (Unix) PHP/5.0.4 mod_ssl/2.0.54 OpenSSL/0.9.7e-p1
Challenge-solution: RINKLEDFEET
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-1

RINKLEDFEET. With regular browser we wouldn't be able to get the solution, because it is not part of the document, but part of the header. Submitting the solution from HTTPJupiter shouldn't be a problem, too.

================================================================================

2. Let's download Garfield comic strip from 1985-07-29, my birthday.
This can be done without Jupiter and it would even be easier, but I want to show how to do it without any other browser.

Server: images.ucomics.com (and set Host header line)
File: /comics/ga/1985/ga850729.gif

The request looks like this:

GET /comics/ga/1985/ga850729.gif HTTP/1.1
Host: images.ucomics.com
User-Agent: HTTPJupiter


And the response is:

HTTP/1.1 200 OK
Server: thttpd/2.25b 29dec2003
Content-Type: image/gif
Date: Sat, 17 Jun 2006 11:49:54 GMT
Last-Modified: Tue, 05 Apr 2005 13:05:07 GMT
Accept-Ranges: bytes
Connection: close
Content-Length: 25284

GIF89aX
BINARY DATA

Now we must save the content to file.
Click To new and select destination. Message appears: '17227 more bytes must be retrieved, then appended to this file.' (or similar). The value is the difference between Content-Lenght (25284) and the actual size of content. That means that the file has been chunked. Click Retrieve, then some next part of the file is received. Click Append, agree that you want to append no more than 17227 bytes, agree that you want to append them to the file specified, and repeat the whole operation from clicking Retrieve until the message 'Done.' appears (repeating the operation consists in nothing more than pressing Enter). Then you can go to the file and open it.
Shorter way is to press Whole instead of pressing To new, at the beginning. If you do so, the operation is automatic, you only have to choose the delay between retrieving chunks. Longer delay usually results in greater chunks.
To stop automatic download, click Retrieve button and wait a moment. However, there is no way to resume downloading this file automatically.

================================================================================

TPReal.