// httpPost.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
#include <time.h>
#include <WinSock2.h>
#include <cstringt.h>
#pragma comment(lib, "Ws2_32.lib")
char* SendHttpRequest(char* weburl, char* url , char* detectorId ,char* JsonData);
int main(int argc, char* argv[])
{
char* JsonData = "[{\"a\":\"b\"}]";
char weburl[] = "www.test.com:8081";
char* url = "/post";
char* Id = "aaa";
char* re = SendHttpRequest(weburl,url, Id, JsonData);
printf("%s\r\n",re);
system("pause");
return ;
}
char* SendHttpRequest(char* weburl, char* url , char* detectorId ,char* JsonData)
{
time_t rawtime;
struct tm * timeinfo;
time_t t = time ( &rawtime );
long timestamp = t;
char *pHttpPost = "POST %s/%s/%ld HTTP/1.1\r\n"
"Content-Type: application/json\r\n"
"Content-Length: %d\r\n"
"Host:%s\r\n"
"Connection: Keep-Alive\r\n"
"User-Agent: Apache-HttpClient/4.5.3 (Java/1.7.0_75)\r\n"
"Expect: 100-continue\r\n"
"Accept-Encoding: gzip,deflate\r\n"
"\r\n%s";
char strHttpPost[] = {};
sprintf(strHttpPost, pHttpPost,url,detectorId, timestamp,strlen(JsonData),weburl,JsonData);
char* p = ":";
char* web = strtok(weburl,p);
int port = ;
char* ptr;
if((ptr = strtok(NULL,p)))
{
port = atoi(ptr);
}
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( , );
err = WSAStartup( wVersionRequested, &wsaData );
if( err != ) {
return false;
}
if( LOBYTE(wsaData.wVersion) != || HIBYTE( wsaData.wVersion ) != ) {
WSACleanup( );
return false;
}
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,);
HOSTENT* thisHost;
char* sIp = NULL;
thisHost = gethostbyname(web);
sIp = inet_ntoa(*(struct in_addr*)*thisHost->h_addr_list);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr(sIp);//本機位址,伺服器在本機開啟
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(port);// 設定端口号
char* content = NULL;
int a = connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//連接配接伺服器
if(a == )
{
send(sockClient, strHttpPost, strlen(strHttpPost), );
char recvBuf[];
while(true)
{
int r = recv(sockClient,recvBuf,,);//接受資料
if(r > )
{
char* p = strstr(recvBuf,"HTTP/1.1 200");
if(p != NULL)
{
char* ptr = strstr(recvBuf,"\r\n\r\n");
if(ptr != NULL)
{
char* p_start = strtok(ptr,"{");
if(p_start != NULL)
{
char* p = strtok(NULL,"{");
if(p != NULL)
content = strtok(p,"}");
}
}
closesocket(sockClient);//關閉連接配接
return content;
}
p = strstr(recvBuf,"HTTP/1.1 400");
if(p != NULL)
{
break;
}
}
}
closesocket(sockClient);//關閉連接配接
}
return content;
}