c++ libcurl json rest

后端 未结 3 1020
青春惊慌失措
青春惊慌失措 2020-12-08 12:13

I am trying to download a json file from a REST webpage in C++ with libcurl. The following code works if I go to the webpage but it doesnt download if I try to access the js

相关标签:
3条回答
  • 2020-12-08 12:36

    Have you tried this approach from the tutorial code at the curl site? http://curl.haxx.se/libcurl/c/sepheaders.html

    0 讨论(0)
  • 2020-12-08 12:47
    std::string ServerContent::DownloadJSON(std::string URL)
    {   
        CURL *curl;
        CURLcode res;
        struct curl_slist *headers=NULL; // init to NULL is important 
        std::ostringstream oss;
        headers = curl_slist_append(headers, "Accept: application/json");  
        headers = curl_slist_append(headers, "Content-Type: application/json");
        headers = curl_slist_append(headers, "charset: utf-8"); 
        curl = curl_easy_init();
    
        if (curl) 
        {
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_URL, URL.c_str());
            curl_easy_setopt(curl, CURLOPT_HTTPGET,1); 
            curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,writer);
            res = curl_easy_perform(curl);
    
            if (CURLE_OK == res) 
            { 
                char *ct;         
                res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
                if((CURLE_OK == res) && ct)
                    return *DownloadedResponse;
            }
        }
    
        curl_slist_free_all(headers);
    }
    
    
    static std::string *DownloadedResponse;
    
    static int writer(char *data, size_t size, size_t nmemb, std::string *buffer_in)
    {
    
        // Is there anything in the buffer?  
        if (buffer_in != NULL)  
        {
            // Append the data to the buffer    
            buffer_in->append(data, size * nmemb);
    
            // How much did we write?   
            DownloadedResponse = buffer_in;
    
            return size * nmemb;  
        }
    
        return 0;
    
    }   
    
    0 讨论(0)
  • 2020-12-08 13:00

    I think this has to do with the configuration on the HTTP server. First, you should be sending some type of indication of what type you're expecting, for example, adding an Accept header like this:

    Accept: application/json
    

    If you don't specify what you're expecting, the server may return the default HTML in the response header Content-Type, and that's what curl says to you.

    0 讨论(0)
提交回复
热议问题