|
| | Усредненное движение валют - Передача расчетов на сайт (С++) | << | >> |
#include "CHttpLoader.h"
#include "Utils.h"
#include "stdio.h"
#include "string.h"
CHttpLoader::CHttpLoader()
{
}
CHttpLoader::~CHttpLoader()
{
}
void CHttpLoader::reset()
{
bufSnd[0] = 0;
bufSndPrm[0] = 0;
httpAnswer = 0;
errorNetwork = 0;
serverAnswer = 0;
}
void CHttpLoader::addPrmOut(char* key, char* value)
{
encode(value);
char t[512];
sprintf(t,"%s=%s&", key, value);
strcat(bufSndPrm, t);
}
void CHttpLoader::encode(char* s)
{
int n = strlen(s);
for(int i= 0; i < n; i++)
{
char c = s[i];
switch(c)
{
case ' ': s[i] = 'a'; break;
case '.': s[i] = 'b'; break;
case ':': s[i] = 'c'; break;
case '-': s[i] = 'd'; break;
}
}
}
#define ADD_HDR_LINE(x) sprintf(t,"%s\r\n",x); strcat(bufSnd,t);
#define ADD_HDR_POST(x,y)sprintf(t,"POST http://%s/%s HTTP/1.0\r\n",x,y); strcat(bufSnd,t);
#define ADD_HDR_CONTET_LEN(x) sprintf(t,"Content-Length: %i\r\n",x); strcat(bufSnd,t);
#define ADD_HDR_NL() strcat(bufSnd,"\r\n");
#define ADD_POST_PARAM() strcat(bufSnd,bufSndPrm);
#define IF_TO_SAVE(x) if(!strcmp(x,a)){zData->setValue(a,b);break;}
#define SRV_RESPONSE_BEGIN "responseBegin"
#define SRV_RESPONSE_END "responseEnd"
#define SRV_VER "v1"
int CHttpLoader::load()
{
int len = strlen(bufSndPrm);
char* serverHttp = "*******.**";
ADD_HDR_POST(serverHttp,"*******.***");
ADD_HDR_LINE("Accept: */*");
ADD_HDR_LINE("User-Agent: Fibonachi.ru v1");
ADD_HDR_LINE("Proxy-Connection: close");
ADD_HDR_LINE("Connection: close");
ADD_HDR_LINE("Content-Type: application/x-www-form-urlencoded");
ADD_HDR_CONTET_LEN(len)
ADD_HDR_NL();
ADD_POST_PARAM();
connectHttp(sock, serverHttp);
if(!sock){ errorNetwork = 1; return 0; }
wHttpSock(sock, bufSnd, strlen(bufSnd));
if(!sock){ errorNetwork = 2; return 0; }
char line[1024];
char a[1024], b[1024];
int kodAnswer = 0;
int c;
int i = 0;
int j = 0;
int u = 0;
int k = 0;
memset(line,0,sizeof(line));
memset(bufRcv,0,sizeof(bufRcv));
while(1)
{
c = rSockChar(sock);
if(c == -1) break;
bufRcv[i] = c;
i++;
if(i > 60000) break;
if((c < 32)&&(c != 10)) continue;
if(c!=10)
{
line[j] = c;
j++;
if(j > 1000) break;
continue;
}
line[j] = 0;
if(u > 1)
{
*a=0; *b = 0;
k = sscanf(line,"<%s %[^>]",a,b);
if(k != 2)
{
j = 0;
continue;
}
}
switch(u)
{
case 0:
k = sscanf(line,"HTTP%*s %i",&httpAnswer);
if((k == 1)&&httpAnswer)
{
u++;
break;
}
u = 5;
break;
case 1:
if(strlen(line) == 0) u++;
break;
case 2:
if( !strcmp(SRV_RESPONSE_BEGIN,a) && !strcmp(SRV_VER,b) )
{
u++;
}
break;
case 3:
if( !strcmp(SRV_RESPONSE_END,a))
{
serverAnswer = atoi(b);
u++;
break;
}
break;
}
j=0;
}
bufRcv[i] = 0;
closeTcpSocket(sock);
}
|
|