john pfeiffer
  • Home
  • Categories
  • Tags
  • Archives

httpgetV4 1

/* john pfeiffer 07mar08 http (1.0) client in c 
httpget.c.exe domain url e.g. httpget.c.exe whatismyip.org

use gcwinsock.bat (gcc.exe -o %1.exe %1 -lws2_32 -lwsock32 -Iinclude -Llib)
lws2_32.a and lwsock32.a are from my bloodshed mingw port lib folder
*/

#include <stdio.h>
#include <stdlib.h>     /* for file functions */
#include <winsock.h>    /* you MUST load obj files C:\devcpp\Lib\libwsock32.a & lws2_32.a
                        gcc.exe -o %1.exe %1 -lws2_32 -lwsock32 -Iinclude -Llib        */
#define BUFFERMAX 1024

void zerobuffer(char buffer[BUFFERMAX])
{   int i;
    for(i =0; i< BUFFERMAX; i++)
    {   buffer[i] = 0; }
}/* end of func zerobuffer */

int main(int argc, char* argv[])
{
    int bytes_rcvd=0;
    int get_socket_result=0;
    char buffer[BUFFERMAX];
    char command[32];            /* get or post */
    struct sockaddr_in a;        /* sockaddr_in(ternet) */
    struct hostent* Hostnameptr; /* if the parameter is a name, not an ip addr */
    WSADATA ws;
    SOCKET s;

    if( argc < 3 )
    {   printf("Error, proper usage is: \nhttpget.c.exe domain url \nhttpget.c.exe whatismyip.org / \n");  
        exit(1);   }

    get_socket_result = WSAStartup(0x0202,&ws);     /* addr family internet, stream, TCP = 0 */        
    s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  /* get handle to socket (should be > 0) */

    a.sin_family = AF_INET;                 /* internet protocol addressing */
    a.sin_port = htons(80);                 /* connect to port 80           */
    a.sin_addr.s_addr = inet_addr(argv[1]);

    if( a.sin_addr.s_addr == INADDR_NONE )    /* non existent ip address? */
    {   Hostnameptr = gethostbyname(argv[1]); /* gethostbyname must be in lowercase! */
        a.sin_addr.s_addr = *(u_long *) Hostnameptr->h_addr_list[0]; /* extract the hostname after lookup */    
    }
    printf("WSAStartup = %d, ",get_socket_result);                           
    get_socket_result = connect( s, (struct sockaddr *) &a, sizeof(a) );         /* must cast */
    printf(" SOCKET = %d, Connected? %d (should be: 0)\n",s,get_socket_result);                           
    if( get_socket_result < 0 ){    printf("\nERROR GETTING SOCKET\n");  exit(1);  }

    puts("httpget in c by John Pfeiffer, ver 4\n");
    strcpy(buffer, "GET ");                     /* command is to get something */
    strcat(buffer,argv[2]);                     /* parameter tells what to get */
    strcat(buffer," HTTP/1.1\r\n");             /* what version of http */
    strcat(buffer,"Host: ");                    /* host: is REQUIRED! */
    strcat(buffer,argv[1]);
    strcat(buffer,"\r\n");    
    strcat(buffer, "User-agent: Mozilla/5.0\r\n");


    puts(buffer);               /* displays commands for console window*/
    strcat(buffer,"\r\n");      /* denotes end of msg */

    send(s,buffer,sizeof(buffer),0);      /* the zero at the end?  */

    do{
        zerobuffer(buffer);
        bytes_rcvd = recv(s,buffer,BUFFERMAX-1,0);

        if ( bytes_rcvd > 0 )
            puts(buffer);
        else if ( bytes_rcvd == 0 )
            printf("Connection closed\n");
        else
            printf("recv failed: %d\n", WSAGetLastError());

    }while( bytes_rcvd > 0 );   
    puts(buffer);

    shutdown(s,1);          /*better than close()  */
    closesocket(s);
    WSACleanup();

    return 0;
} /*end main*/

  • « mysitemap
  • dirnamesV2 dynamic »

Published

Mar 7, 2008

Category

c

~297 words

Tags

  • c 95
  • gcc 9
  • httpgetv4 2
  • lwsock32 1