/* 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*/