webapi.h
#pragma once
#include <string>
#include <list>
#include <map>
class webapi
{
class urlitem {
public:
urlitem() {
}
//std::string url;
std::string fullpath; // http://www.pic98.com:8080/file/beautileg/samansha/201901011506.jpg#abc
std::string query; // session=a231-dd33&token=aabbcc
std::map<std::string, std::string> param; // {session =>a231-dd33,token=>aabbcc}
std::string verb; // POST or GET
std::string prot; // http
std::string host; // www.pic98.com
uint16_t port; // 8080
std::string path; // /file/beautileg/samansha/201901011506.jpg
std::string pathdir; // /file/beautileg/samasha
std::string file; // 201901011506.jpg
std::list<std::string> ip; // dns result for www.pic98.com
std::string officalhost;
std::list<std::string> aliases; // dns result for www.pic98.com
};
private:
webapi();
~webapi();
public:
static webapi* me();
std::string post(char* url,char* sid, char* par);
bool urlparse(char* urlin,urlitem & out);
std::string prepareheader(const urlitem* ui,char*,std::string post);
};
webapi.cpp
#include "webapi.h"
#include <vector>
#include <map>
#include <list>
#include <sstream>
#ifdef _WIN32
#include <winsock.h>
#include <share.h>
#include <io.h>
#include <direct.h>
#else
#include <unistd.h>
#include <sys/stat.h>
#include <sys/file.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <errno.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/uio.h>
#include <sys/types.h>
#include <errno.h>
#endif
webapi::webapi(){
}
webapi::~webapi(){
}
webapi* webapi::me() {
static webapi* wa = nullptr;
if (wa == nullptr) {
wa = new webapi();
}
return wa;
}
std::string UTF8_To_string(const std::string & str){
int nwLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, NULL, 0);
wchar_t * pwBuf = new wchar_t[nwLen + 1];
memset(pwBuf, 0, nwLen * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, str.c_str(), str.length(), pwBuf, nwLen);
int nLen = WideCharToMultiByte(CP_ACP, 0, pwBuf, -1, NULL, NULL, NULL, NULL);
char * pBuf = new char[nLen + 1];
memset(pBuf, 0, nLen + 1);
WideCharToMultiByte(CP_ACP, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);
std::string retStr = pBuf;
delete[]pBuf;
delete[]pwBuf;
pBuf = NULL;
pwBuf = NULL;
return retStr;
}
std::string