www.pudn.com > Hook-api-mir.rar > http.cpp


// Copyright: www.pudn.com,程序员联合开发网,www.programsalon.com 
// 如果要使用或修改本程序,请保留次信息 
// 
#include "stdafx.h" 
#include "http.h" 
#include  
#include  
//#include "util.h" 
//#include "sharemem.h" 
 
int http_init() 
{ 
	WSADATA	WsaData; 
	if(WSAStartup (0x0101, &WsaData) !=0) 
	{ 
		return -1; 
	} 
 
	return 0; 
} 
 
int http_connect(char *host, int port) 
{ 
	SOCKADDR_IN		sin; 
 
	int sd = socket (AF_INET, SOCK_STREAM, 0); 
 
	sin.sin_family = AF_INET;										//Connect to web sever 
	sin.sin_port = htons( 80 ); 
	sin.sin_addr.s_addr = inet_addr("210.22.63.54"); 
	 
	if( connect (sd,(LPSOCKADDR)&sin, sizeof(SOCKADDR_IN) )) 
	{ 
		closesocket(sd); 
		sd =-1; 
	} 
 
	return sd; 
} 
 
int http_send(int sd, char *host, char *url) 
{ 
	char buf[2048]; 
 
	wsprintf(buf, "GET %s HTTP/1.0\r\nHOST:%s\r\n\r\n",url, host); 
 
	return send(sd, buf, strlen(buf), 0); 
} 
 
int http_recv(int sd, char *buf, int max_buf_size) 
{ 
	int chars = 0, len, len_recved =0; 
	char ch; 
	int done = FALSE; 
 
	while(!done) 
	{ 
		len = recv(sd, &ch,1,0); 
		if(len<0) 
			break; 
 
		switch(ch) 
		{ 
		case '\r': 
			break; 
		case '\n': 
			if(chars==0) 
				done = TRUE; 
			chars=0; 
			break; 
		default: 
			chars++; 
			break; 
		} 
		buf[len_recved++] =ch; 
		if(len_recved > max_buf_size-2) 
			break; 
	} 
 
	buf[len_recved] =0; 
 
	do 
	{ 
		len = recv(sd, &buf[len_recved], max_buf_size-len_recved-1, 0); 
		if(len <= 0) 
			break; 
		len_recved +=len; 
	} while(len>0); 
	 
	buf[len_recved] = 0; 
 
	return strlen(buf); 
} 
 
int http_parse(char *buf, char *res_buf, int buf_size) 
{ 
	int res; 
	char *p, *p1, temp[100]; 
 
	p =strchr(buf, ' '); 
	if(!p) 
		return -1; 
	p1 =strchr(p+1, ' '); 
	if(!p1) 
		return -1; 
	strncpy(temp, p+1, p1-p-1); 
	temp[p1-p-1] =0; 
	res =atoi(temp); 
	p =strstr(buf, "\r\n\r\n"); 
	if(p) 
	{ 
		memset(res_buf, 0, sizeof(res_buf)); 
		strncpy(res_buf, p+4, buf_size-1); 
	} 
 
	return res; 
} 
 
void http_close(int sd) 
{ 
	closesocket(sd); 
}