我正在尝试使用libcurl从C ++的REST网页下载json文件。如果我访问该网页,则以下代码有效,但如果尝试访问json …,则该代码不会下载。
我认为这应该很容易解决,但我找不到对此的任何引用…
如果我转到网页,它将打开json,但是此代码仅返回text / html;字符集= utf-8
??????????
CURL *curl; CURLcode res; struct curl_slist *headers=NULL; // init to NULL is important headers = curl_slist_append(headers, "Accept: application/json"); curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://web.com/api/json/123"); curl_easy_setopt(curl, CURLOPT_HTTPGET,1); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); //curl_easy_setopt(curl, CURLOPT_URL, "http://web.com/123.html");//this works!!! res = curl_easy_perform(curl); if(CURLE_OK == res) { char *ct; /* ask for the content-type */ res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct); if((CURLE_OK == res) && ct) printf("We received Content-Type: %s\n", ct); } } /* always cleanup */ curl_easy_cleanup(curl);
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; }