HTTP通信之POST与GET请求

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值