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); }