HTTPGET.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:4k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*++
  2. Copyright 1996-1997 Microsoft Corporation
  3. Module Name:
  4.     httpget.c
  5. Abstract:
  6.     This is a web command line application.  It will allow a user to get a 
  7.     html document from the command line.
  8. Environment:
  9.     console app
  10. --*/
  11. #include <windows.h>
  12. #include <stdio.h>
  13. #include <io.h>
  14. #include <fcntl.h>
  15. #include <stdlib.h>
  16. #include <time.h>
  17. #include <malloc.h>
  18. #include "const.h"
  19. #include "proto.h"
  20. void
  21. PrintUsage(void);
  22. #define SOCKETS_METHOD 1
  23. void
  24. _CRTAPI1
  25. main(
  26.     int argc,
  27.     char * argv[])
  28. {
  29.     char *        Server;
  30.     char *        URL;
  31.     char *        Verb = "GET";
  32.     char *        Gateway = NULL;
  33.     char *        AcceptTypes[2] = {"*/*", NULL};
  34.     char          Headers[] = 
  35.                       "Accept: */*rn"
  36.                       "User-Agent: Httpgetrn"
  37.                       "Referer: Httpgetrn"
  38.                       "rn";
  39.     int           Method = SOCKETS_METHOD;
  40.     BOOL          DisplayHeaders = FALSE;
  41.     DWORD         ClientDataSize = 0;
  42.     PSTR          pszUserName = "";
  43.     PSTR          pszPassword = "";
  44.     PSTR          pszStore = NULL;
  45.     PSTR          pszPref = NULL;
  46.     //
  47.     // Parse the command line
  48.     //
  49.     if (argc < 3) 
  50.     {
  51.         PrintUsage();
  52.         return;
  53.     }
  54.     while (argc > 3) 
  55.     {
  56.         //
  57.         // parse options
  58.         //
  59.         if (argv[1][0] == '-') 
  60.         {
  61.             switch (argv[1][1]) 
  62.             {
  63.             case 'V' :
  64.             case 'v' :
  65.                 //
  66.                 // Input verb
  67.                 //
  68.                 Verb = &argv[1][3];
  69.                 break;
  70.             case 'H' :
  71.             case 'h' :
  72.                 //
  73.                 // Display headers
  74.                 //
  75.                 DisplayHeaders = TRUE;
  76.                 break;
  77.             case 'D' :
  78.             case 'd' :
  79.                 //
  80.                 // Amount of data to send
  81.                 //
  82.                 if (sscanf(&argv[1][3], "%u", &ClientDataSize) != 1) 
  83.                 {
  84.                     PrintUsage();
  85.                     return;
  86.                 }
  87.                 break;
  88.             case 'G' :
  89.             case 'g' :
  90.                 //
  91.                 // Gateway
  92.                 //
  93.                 Gateway = &argv[1][3];
  94.                 break;
  95.             case 'M':
  96.             case 'm':
  97.                 // User name
  98.                 pszPref = &argv[1][3];
  99.                 break;
  100.             case 'N':
  101.             case 'n':
  102.                 // User name
  103.                 pszUserName = &argv[1][3];
  104.                 break;
  105.             case 'P':
  106.             case 'p':
  107.                 // Password
  108.                 pszPassword = &argv[1][3];
  109.                 break;
  110.             case 'S':
  111.             case 's':
  112.                 pszStore = &argv[1][3];
  113.                 break;
  114.             default:
  115.                 PrintUsage();
  116.                 return;
  117.                 break;
  118.             }
  119.         } 
  120.         else 
  121.         {
  122.             PrintUsage();
  123.             return;
  124.         }
  125.         argc --;
  126.         argv ++;
  127.     }
  128.     Server = argv[1];
  129.     URL = argv[2];
  130.     switch (Method) 
  131.     {
  132.     case SOCKETS_METHOD:
  133.         HttpGetSocket(
  134.             Verb,
  135.             Server,
  136.             URL,
  137.             DisplayHeaders,
  138.             ClientDataSize,
  139.             pszUserName,
  140.             pszPassword,
  141.             pszStore,
  142.             pszPref );
  143.         break;
  144.     }
  145.     return;
  146. }
  147. void
  148. PrintUsage()
  149. {
  150.     fprintf(stderr,
  151.         "httpauth  [-h] [-d:<size>] [-m:<methodlist>] [-v:<verb>] [-n:<username>]n"
  152. "t  [-p:<password>] [-g:gateway] [-s:storefile] <server> <path>n"
  153.         "t-h           - display result headersn"
  154.         "t<size>       - amount of client data to sendn"
  155.         "t<verb>       - HTTP verb to use (default is GET)n"
  156.         "t<username>   - user name for authenticationn"
  157.         "t<password>   - password for authenticationn"
  158.         "t<methodlist> - comma separated list of authentication methods in ordern"
  159.         "t               of preference (Default is to use first supported methodn"
  160.         "t               returned by the HTTP server (e.g., -m:NTLM,BASIC)n"
  161.         "t<storefile>  - file where to store result message bodyn"
  162.         "t<server>     - web server to connect to (without http:)n"
  163.         "t<path>       - resource to get (e.g., /default.htm)n"
  164.     );
  165. }