//
// HttpClient.cpp
// Design
//
// Created by cwliu on 14-12-5.
// Copyright (c) 2014-12-08 cwliu. All rights reserved.
//
#include "HttpClient.h"
int CHttpClient::ConnectServer(char* sHost,int nPort)
{
//gethostbyname
struct hostent *h;
if((h=gethostbyname(sHost))==NULL)
{
printf("gethostbyname failed\n");
return -1;
}
printf("HostName :%s\n",h->h_name);
sprintf(m_sHostIP, "%s",inet_ntoa(*((struct in_addr *)h->h_addr)));
printf("IP Address :%s\n",m_sHostIP);
m_nPort=nPort;
int nRet=m_tcp.Open(nPort, m_sHostIP);
if (0!=nRet) {
printf("socket connect failed\n");
return -1;
}
return 0;
}
int CHttpClient::DisconnetServer()
{
m_tcp.Close();
return 0;
}
int CHttpClient::HttpGet(char* sUrl,char* sResponse)
{
char post[300],host[100],content_len[100];
char *lpbuf,*ptmp;
int len=0;
lpbuf = NULL;
const char *header2="User-Agent: linux_http_client Http 1.0\r\nCache-Control: no-cache\r\nContent-Type: application/x-www-form-urlencoded\r\nAccept: */*\r\n";
sprintf(post,"GET %s HTTP/1.0\r\n",sUrl);
sprintf(host,"HOST: %s:%d\r\n",m_sHostIP,m_nPort);
sprintf(content_len,"Content-Length: %d\r\n\r\n",1);
len = strlen(post)+strlen(host)+strlen(header2)+strlen(content_len)+1;
lpbuf = (char*)malloc(len);
if(lpbuf==NULL)
{
return -1;
}
strcpy(lpbuf,post);
strcat(lpbuf,host);
strcat(lpbuf,header2);
strcat(lpbuf,content_len);
strcat(lpbuf," ");
m_tcp.Send((unsigned char*)lpbuf,len);
int nRet=m_tcp.Recv();
if (nRet>0) {
memcpy(sResponse,m_tcp.GetBuffer(), nRet);
printf("%s\n",sResponse);
}
return 0;
}
int CHttpClient::HttpPostFile(char* sUrl,char* sFileName)
{
// check file and read it
long nFileLen=0;
FILE* pFile=fopen(sFileName,"r");
if (!pFile) {
printf("read file failed\n");
return -1;
}
fseek(pFile, 0, SEEK_END);
nFileLen=ftell(pFile);
printf("File length is %ld\n", nFileLen);
if (!nFileLen) {
printf("file len is 0\n");
return -1;
}
fseek(pFile, 0, SEEK_SET);
char* sFileText=new char[nFileLen+1];
memset(sFileText, 0, nFileLen+1);
fread(sFileText, 1, nFileLen, pFile);
fclose(pFile);
char* pBody=new char[32*1024];
memset(pBody,0,32*1024);
char sContentDisp[128];
sprintf(sContentDisp, "Content-Disposition: form-data;name=\"file\";filename=\"%s\"\r\n",sFileName);
strcat(pBody,"-------------------------------7db372eb000e2\r\n");
strcat(pBody, sContentDisp);
strcat(pBody, "Content-Type: text/plain\r\n\r\n");
strcat(pBody, sFileText);
strcat(pBody, "\r\n-------------------------------7db372eb000e2--\r\n");
char post[300];
sprintf(post,"POST %s HTTP/1.0\r\n",sUrl);
char header[1024];
char host[64];
sprintf(host,"HOST: %s:%d\r\n",m_sHostIP,m_nPort);
char sContentLen[32];
sprintf(sContentLen, "Content-Length: %ld\r\n",strlen(pBody)+1);
// read file and caluate the file
sprintf(header, "%s","Accept:*/*\r\n");
strcat(header, host);
strcat(header, "User-Agent: JboxHttpClient\r\n");
strcat(header, sContentLen);
strcat(header,"Expect: 100-continue\r\n");
strcat(header, "Content-Type:multipart/form-data;boundary=-----------------------------7db372eb000e2\r\n\r\n");
char* pBuf=new char[64*1024];
memset(pBuf, 0, 64*1024);
strcat(pBuf, post);
strcat(pBuf, header);
strcat(pBuf,pBody);
printf("%s\n",pBuf);
m_tcp.Send((unsigned char*)pBuf, strlen(pBuf)+1);
char sResponse[1024];
memset(sResponse, 0, 1024);
int nRet=m_tcp.Recv();
if (nRet>0) {
memcpy(sResponse, m_tcp.GetBuffer(), nRet);
printf("%s\n",sResponse);
if (strstr(sResponse,"200"))
{
delete[] pBody;
delete[] pBuf;
printf("post file success \n");
return 0;
}
else
{
printf("post file failed \n");
}
}
delete[] pBody;
delete[] pBuf;
return -1;
}
- 1
- 2
- 3
- 4
- 5
- 6
前往页