1、
/************************************************************************/
/* PocGateWay: HttpConnect.h */
/************************************************************************/
#include <string>
#include <iostream>
using namespace std;
class HttpConnect
{
public:
HttpConnect();
~HttpConnect();
void socketHttp(std::string host, std::string request,int port);
void postData(std::string host, std::string path, std::string post_content,int port);
void getData(std::string host, std::string path, std::string get_content,int port);
public:
char* buf_len;
char* HttpBuf;
char* buff_root;
char* buff_head;
};
int RecvBoneID();
/************************************************************************/
2、
/************************************************************************/
/* PocGateWay: HttpConnect.cpp */
/************************************************************************/
#include "PLog.h"
#include "PocConfig.h"
#include "stdafx.h"
#include "HttpConnect.h"
#include "WininetHttp.h"
#include "winsock.h"
#ifdef WIN32
#pragma comment(lib,"ws2_32.lib")
#endif
#pragma warning(disable:4996)
using namespace std;
#define BUF_SIZE (1024*10)
PocConfig *g_ADKConfig = new PocConfig();
extern PocConfig *g_SLAConfig1;
extern PocConfig *g_SLAConfig2;
HttpConnect::HttpConnect()
{
buf_len = new char[10];
HttpBuf = new char[BUF_SIZE];
buff_root = new char[BUF_SIZE];
buff_head = new char[BUF_SIZE];
#ifdef WIN32
//此处一定要初始化一下,否则gethostbyname返回一直为空
WSADATA wsa = { 0 };
WSAStartup(MAKEWORD(2, 2), &wsa);
#endif
}
HttpConnect::~HttpConnect()
{
delete[] buf_len;
delete[] HttpBuf;
delete[] buff_head;
delete[] buff_root;
}
void HttpConnect::socketHttp(std::string host, std::string request,int port)
{
int sockfd;
struct sockaddr_in address;
struct hostent *server;
sockfd = socket(AF_INET,SOCK_STREAM,0);
address.sin_family = AF_INET;
address.sin_port = htons(port);
server = gethostbyname(host.c_str());
memcpy((char *)&address.sin_addr.s_addr,(char*)server->h_addr, server->h_length);
if(-1 == connect(sockfd,(struct sockaddr *)&address,sizeof(address))){
cout <<"connection error!"<<std::endl;
return;
}
cout << request << std::endl;
#ifdef WIN32
send(sockfd, request.c_str(),request.size(),0);
#else
write(sockfd,request.c_str(),request.size());
#endif
memset(HttpBuf,0,BUF_SIZE);
int offset = 0;
int rc;
#ifdef WIN32
while(rc = recv(sockfd, HttpBuf+offset, 1024,0))
#else
while(rc = read(sockfd, buf+offset, 1024))
#endif
{
offset += rc;
}
#ifdef WIN32
closesocket(sockfd);
#else
close(sockfd);
#endif
HttpBuf[offset] = 0;
cout << HttpBuf << std::endl;
//delete[] buf;
return ;
}
void HttpConnect::postData(std::string host, std::string path, std::string post_content,int port)
{
//POST请求方式
std::string stream = "";
stream.append("POST ");
stream.append(path);
stream.append("HTTP/1.0\r\n");
stream.append("Host: ");
stream.append(host);
stream.append("\r\n");
stream.append("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3\r\n");
stream.append("Content-Type:application/json\r\n");
stream.append("Content-Length:");
memset(buf_len,0,10);
int len = post_content.size();
sprintf_s(buf_len,10,"%d",len);
stream.append(buf_len);
stream.append("\r\n");
stream.append("Connection:keep-alive\r\n\r\n");
stream.append(post_content.c_str());
socketHttp(host, stream,port);
}
void HttpConnect::getData(std::string host, std::string path, std::string get_content,int port)
{
//GET请求方式
std::string stream = "";
stream.append("GET ");
stream.append(path);
stream.append("?");
stream.append(get_content);
stream.append(" HTTP/1.0\r\n");
stream.append("Host: ");
stream.append(host );
stream.append("\r\n");
stream.append("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3\r\n");
stream.append("Connection:close\r\n\r\n");
socketHttp(host, stream,port);
}
static std::string
readInputTestFile( const char *path )
{
FILE *file = fopen( path, "rb" );
if ( !file )
return std::string("");
fseek( file, 0, SEEK_END );
long size = ftell( file );
fseek( file, 0, SEEK_SET );
std::string text;
char *buffer = new char[size+1];
buffer[size] = 0;
if ( fread( buffer, 1, size, file ) == (unsigned long)size )
text = buffer;
fclose( file );
delete[] buffer;
return text;
}
//{"code":"0","success":"true","msg":"","data":
//[{"id":"","gatewayIP":"","transferIP":"","status":0,"updateTime":0,"groupuld":"","narrowTeamld":"123","SLAccount":"15289670721451"},
//{"id":"","gatewayIP":"","transferIP":"","status":0,"updateTime":0,"groupuld":"","narrowTeamld":"456","SLAccount":"15289678179370"}],
//"total":0,"login":"true"}
int RecvBoneID()
{
string gatewayIP = g_ADKConfig->getStringData("GateWay Setting","gatewayIP","");
string repeaterIP = g_ADKConfig->getStringData("GateWay Setting","repeaterIP","");
string groupAccount = g_ADKConfig->getStringData("GateWay Setting","groupAccount","");
string groupPwd = g_ADKConfig->getStringData("GateWay Setting","groupPwd","");
string agentAccount = g_ADKConfig->getStringData("GateWay Setting","agentAccount","");
string nBGroupID1 = g_ADKConfig->getStringData("GateWay Setting","nBGroupID1","");
string nBGroupID2 = g_ADKConfig->getStringData("GateWay Setting","nBGroupID2","");
string sLAccount1 = g_ADKConfig->getStringData("GateWay Setting","sLAccount1","");
string sLAccount2 = g_ADKConfig->getStringData("GateWay Setting","sLAccount2","");
int iPort = g_ADKConfig->getIntData("GateWay Setting","port",0);
HttpConnect *http = new Htt