HTTPGET.C

/*++ 

Copyright 1996 - 1998 Microsoft Corporation

Module Name:

httpget.c

Abstract:

This is a web command line application. It will allow a user to get a
html document from the command line.

Environment:

console app

--*/

#include <windows.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#include "const.h"
#include "proto.h"

void
PrintUsage(void);

#define SOCKETS_METHOD 1

void
_CRTAPI1
main(
int argc,
char * argv[])
{
char * Server;
char * URL;
char * Verb = "GET";
char * Gateway = NULL;
char * AcceptTypes[2] = {"*/*", NULL};
char Headers[] =
"Accept: */*\r\n"
"User-Agent: Httpget\r\n"
"Referer: Httpget\r\n"
"\r\n";
int Method = SOCKETS_METHOD;
BOOL DisplayHeaders = FALSE;
DWORD ClientDataSize = 0;
PSTR pszUserName = "";
PSTR pszPassword = "";
PSTR pszStore = NULL;
PSTR pszPref = NULL;

//
// Parse the command line
//

if (argc < 3)
{
PrintUsage();
return;
}

while (argc > 3)
{
//
// parse options
//

if (argv[1][0] == '-')
{
switch (argv[1][1])
{
case 'V' :
case 'v' :
//
// Input verb
//

Verb = &argv[1][3];

break;

case 'H' :
case 'h' :
//
// Display headers
//

DisplayHeaders = TRUE;

break;

case 'D' :
case 'd' :
//
// Amount of data to send
//

if (sscanf(&argv[1][3], "%u", &ClientDataSize) != 1)
{
PrintUsage();
return;
}
break;

case 'G' :
case 'g' :
//
// Gateway
//

Gateway = &argv[1][3];

break;

case 'M':
case 'm':
// User name
pszPref = &argv[1][3];
break;

case 'N':
case 'n':
// User name
pszUserName = &argv[1][3];
break;

case 'P':
case 'p':
// Password
pszPassword = &argv[1][3];
break;

case 'S':
case 's':
pszStore = &argv[1][3];
break;

default:
PrintUsage();
return;
break;
}
}
else
{
PrintUsage();
return;
}

argc --;
argv ++;
}

Server = argv[1];

URL = argv[2];

switch (Method)
{
case SOCKETS_METHOD:
HttpGetSocket(
Verb,
Server,
URL,
DisplayHeaders,
ClientDataSize,
pszUserName,
pszPassword,
pszStore,
pszPref );
break;
}

return;
}

void
PrintUsage()
{
fprintf(stderr,
"httpauth [-h] [-d:<size>] [-m:<methodlist>] [-v:<verb>] [-n:<username>]\n"
"\t [-p:<password>] [-g:gateway] [-s:storefile] <server> <path>\n"
"\t-h - display result headers\n"
"\t<size> - amount of client data to send\n"
"\t<verb> - HTTP verb to use (default is GET)\n"
"\t<username> - user name for authentication\n"
"\t<password> - password for authentication\n"
"\t<methodlist> - comma separated list of authentication methods in order\n"
"\t of preference (Default is to use first supported method\n"
"\t returned by the HTTP server (e.g., -m:NTLM,BASIC)\n"
"\t<storefile> - file where to store result message body\n"
"\t<server> - web server to connect to (without http:)\n"
"\t<path> - resource to get (e.g., /default.htm)\n"
);
}