second commit
This commit is contained in:
parent
f55752a979
commit
68c83d7542
161
AuxFun.cpp
Normal file
161
AuxFun.cpp
Normal file
|
@ -0,0 +1,161 @@
|
||||||
|
#include "AuxFun.h"
|
||||||
|
#include<Windows.h>
|
||||||
|
#include <string>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include "zlib/zconf.h"
|
||||||
|
#include "zlib/zlib.h"
|
||||||
|
std::string MBCStoUTF8(const char* mbcsStr)
|
||||||
|
{
|
||||||
|
wchar_t* wideStr;
|
||||||
|
char* strAnsi;
|
||||||
|
int charLen;
|
||||||
|
//先转换成utf-16
|
||||||
|
charLen = MultiByteToWideChar(CP_ACP, 0, mbcsStr, -1, NULL, 0);
|
||||||
|
wideStr = (wchar_t*)malloc(sizeof(wchar_t)*charLen);
|
||||||
|
MultiByteToWideChar(CP_ACP, 0, mbcsStr, -1, wideStr, charLen);
|
||||||
|
//再转换成utf-8
|
||||||
|
charLen = WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, NULL, 0, NULL, NULL);
|
||||||
|
strAnsi = (char*)malloc(charLen);
|
||||||
|
WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, strAnsi, charLen, NULL, NULL);
|
||||||
|
std::string strRet = strAnsi;
|
||||||
|
|
||||||
|
free(wideStr);
|
||||||
|
free(strAnsi);
|
||||||
|
return strRet;
|
||||||
|
}
|
||||||
|
std::string UTF8ToMultiByte(const char* mbcsStr)
|
||||||
|
{
|
||||||
|
wchar_t* wideStr;
|
||||||
|
char* strAnsi;
|
||||||
|
int charLen;
|
||||||
|
|
||||||
|
charLen = MultiByteToWideChar(CP_UTF8, 0, mbcsStr, -1, NULL, 0);
|
||||||
|
wideStr = (wchar_t*)malloc(sizeof(wchar_t)*charLen);
|
||||||
|
MultiByteToWideChar(CP_UTF8, 0, mbcsStr, -1, wideStr, charLen);
|
||||||
|
|
||||||
|
charLen = WideCharToMultiByte(CP_ACP, 0, wideStr, -1, NULL, 0, NULL, NULL);
|
||||||
|
strAnsi = (char*)malloc(charLen);
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, strAnsi, charLen, NULL, NULL);
|
||||||
|
|
||||||
|
std::string strRet = strAnsi;
|
||||||
|
free(wideStr);
|
||||||
|
|
||||||
|
free(strAnsi);
|
||||||
|
return strRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------
|
||||||
|
//Reference:http://blog.csdn.net/gemo/article/details/8468311
|
||||||
|
//______________________________________________
|
||||||
|
unsigned char ToHex(unsigned char x)
|
||||||
|
{
|
||||||
|
//十进制 'A'65 '0'48
|
||||||
|
return x > 9 ? x + 55 : x + 48;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char FromHex(unsigned char x)
|
||||||
|
{
|
||||||
|
unsigned char y;
|
||||||
|
if (x >= 'A' && x <= 'Z') { y = x - 'A' + 10; }
|
||||||
|
else if (x >= 'a' && x <= 'z') { y = x - 'a' + 10; }
|
||||||
|
else if (x >= '0' && x <= '9') { y = x - '0'; }
|
||||||
|
else { assert(0); }
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string UrlEncode(const std::string& str)
|
||||||
|
{
|
||||||
|
std::string strTemp = "";
|
||||||
|
size_t length = str.length();
|
||||||
|
for (size_t i = 0; i < length; i++)
|
||||||
|
{
|
||||||
|
if (isalnum((unsigned char)str[i]) ||
|
||||||
|
(str[i] == '-') ||
|
||||||
|
(str[i] == '_') ||
|
||||||
|
(str[i] == '.') ||
|
||||||
|
(str[i] == '~')) { strTemp += str[i]; }
|
||||||
|
|
||||||
|
else if (str[i] == ' ') { strTemp += "+"; }
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strTemp += '%';
|
||||||
|
strTemp += ToHex((unsigned char)str[i] >> 4);
|
||||||
|
strTemp += ToHex((unsigned char)str[i] % 16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return strTemp;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string UrlDecode(const std::string& str)
|
||||||
|
{
|
||||||
|
std::string strTemp = "";
|
||||||
|
size_t length = str.length();
|
||||||
|
for (size_t i = 0; i < length; i++)
|
||||||
|
{
|
||||||
|
if (str[i] == '+') strTemp += ' ';
|
||||||
|
else if (str[i] == '%')
|
||||||
|
{
|
||||||
|
assert(i + 2 < length);
|
||||||
|
unsigned char high = FromHex((unsigned char)str[++i]);
|
||||||
|
unsigned char low = FromHex((unsigned char)str[++i]);
|
||||||
|
strTemp += high * 16 + low;
|
||||||
|
}
|
||||||
|
else strTemp += str[i];
|
||||||
|
}
|
||||||
|
return strTemp;
|
||||||
|
}
|
||||||
|
int inflate_read(char *source, int len, char **dest, int gzip, int& iTotalRead)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
unsigned have;
|
||||||
|
z_stream strm;
|
||||||
|
unsigned char out[10000];
|
||||||
|
int totalsize = 0;
|
||||||
|
|
||||||
|
/* allocate inflate state */
|
||||||
|
strm.zalloc = Z_NULL;
|
||||||
|
strm.zfree = Z_NULL;
|
||||||
|
strm.opaque = Z_NULL;
|
||||||
|
strm.avail_in = 0;
|
||||||
|
strm.next_in = Z_NULL;
|
||||||
|
|
||||||
|
if (gzip)
|
||||||
|
ret = inflateInit2(&strm, 47);
|
||||||
|
else
|
||||||
|
ret = inflateInit(&strm);
|
||||||
|
|
||||||
|
if (ret != Z_OK)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
strm.avail_in = len;
|
||||||
|
strm.next_in = (Bytef*)source;
|
||||||
|
|
||||||
|
/* run inflate() on input until output buffer not full */
|
||||||
|
do {
|
||||||
|
strm.avail_out = 10000;
|
||||||
|
strm.next_out = out;
|
||||||
|
ret = inflate(&strm, Z_NO_FLUSH);
|
||||||
|
//assert(ret != Z_STREAM_ERROR); /* state not clobbered */
|
||||||
|
|
||||||
|
switch (ret) {
|
||||||
|
case Z_NEED_DICT:
|
||||||
|
ret = Z_DATA_ERROR; /* and fall through */
|
||||||
|
case Z_DATA_ERROR:
|
||||||
|
case Z_MEM_ERROR:
|
||||||
|
inflateEnd(&strm);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
have = 10000 - strm.avail_out;
|
||||||
|
totalsize += have;
|
||||||
|
*dest = (char*)realloc(*dest, totalsize);
|
||||||
|
iTotalRead = totalsize;
|
||||||
|
memcpy(*dest + totalsize - have, out, have);
|
||||||
|
} while (strm.avail_out == 0);
|
||||||
|
|
||||||
|
/* clean up and return */
|
||||||
|
(void)inflateEnd(&strm);
|
||||||
|
|
||||||
|
return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;
|
||||||
|
}
|
9
AuxFun.h
Normal file
9
AuxFun.h
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include<string>
|
||||||
|
std::string MBCStoUTF8(const char* mbcsStr);
|
||||||
|
std::string UTF8ToMultiByte(const char* mbcsStr);
|
||||||
|
|
||||||
|
std::string UrlEncode(const std::string& str);
|
||||||
|
|
||||||
|
int inflate_read(char *source, int len, char **dest, int gzip, int& iTotalRead);
|
38
CWeatherDataSpider.h
Normal file
38
CWeatherDataSpider.h
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
//------------------------------------
|
||||||
|
//author: jidzh
|
||||||
|
//data; 2017-10-30
|
||||||
|
//------------------------------------
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <string>
|
||||||
|
#include <WinSock2.h>
|
||||||
|
#ifdef DEBUG
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#endif // DEBUG
|
||||||
|
|
||||||
|
|
||||||
|
class CWeatherDataSpider
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CWeatherDataSpider();
|
||||||
|
~CWeatherDataSpider();
|
||||||
|
public:
|
||||||
|
bool GetWeatherDataXml();
|
||||||
|
void CloseConnect();
|
||||||
|
void ErrHandle(const std::wstring msg, int code =0);
|
||||||
|
public:
|
||||||
|
std::string m_strAreaCode;
|
||||||
|
private:
|
||||||
|
SOCKET m_socket;
|
||||||
|
//WSADATA m_WSAdata;
|
||||||
|
bool CheckIfRecSucceed(char * buf, int nTotalRecv, int nFlag);
|
||||||
|
|
||||||
|
bool ConnectHost();
|
||||||
|
|
||||||
|
bool SendReq();
|
||||||
|
|
||||||
|
bool HandleAck();
|
||||||
|
};
|
||||||
|
|
Reference in New Issue
Block a user