跨平台 C++ 纯socket 访问webapi json

webapi.h#pragma once#include <string>#include <list>#include <map>class webapi{ class urlitem { public: urlitem() { } //std::string url; ...
摘要由CSDN通过智能技术生成

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 
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值