如何使用Android ndk进行HTTP请求

时间:2014-09-05 02:10:47

标签: c++ http android-ndk

我正在为android / ios编写纯本机应用程序,但我遇到了网络代码问题。我似乎无法编译curl,无论哪种方式,我都希望有一个更面向对象的库。

使用或方法执行此操作的好库是什么?我目前从HTTP请求获取json的方法是使用SDL2_Net

的代码
class HTTPRequest{
protected:
    std::map<std::string, std::string> uris;
    std::string url;

public:
    std::string host;

    HTTPRequest(std::string path) : url(path), host("182.50.154.140") {}

    void addURI(std::string parameter, std::string value){
        uris[parameter] = value;
    }

    std::string sendRequest(bool useCookie=false){
        std::string temppath = url;
        if(!uris.empty()){
            temppath += '?';
            for(auto &a : uris){
                temppath += a.first;
                temppath += '=';
                temppath += a.second;
                temppath += '&';
            }
        }
        IPaddress* addr = new IPaddress;
        SDLNet_ResolveHost(addr, host.c_str(), 8080);
        TCPsocket sock = SDLNet_TCP_Open(addr);
        std::string a = "GET ", b = " HTTP/1.1\r\nHost: 182.50.154.140:8080\r\nConnection: close\r\n\r\n";
        std::string c = a+temppath+b;
        SDLNet_TCP_Send(sock, c.c_str(), c.length());
        std::string d;
        char* buf = new char[1024];
        while(SDLNet_TCP_Recv(sock, buf, 1024) > 0){
            d += buf;
            delete[] buf;
            buf = new char[1024];
        }
        delete[] buf;
        SDLNet_TCP_Close(sock);
        int p = d.find("{");
        d.erase(0, p-1);
        return d;
    }
};

虽然在大页面上打破了。

1 个答案:

答案 0 :(得分:3)

cURL是你最好的选择。这里有几个链接,您可以尝试移植cURL

http://thesoftwarerogue.blogspot.com/2010/05/porting-of-libcurl-to-android-os-using.html https://github.com/jahrome/curl-android

如果您仍未使用cURL取得成功,请尝试POCO

http://pocoproject.org/