Я хотел бы загрузить некоторые страницы вики-материала. Я использую локон в цикле. Первая итерация в порядке, но другие дают мне тот же результат, что и первая. Что не хватает / неправильно? Спасибо. Это цикл:
std::string buffer;
size_t curl_write( void *ptr, size_t size, size_t nmemb, void *stream)
{
buffer.append((char*)ptr, size*nmemb);
return size*nmemb;
}
int main(int argc, char **argv)
{
CURL *curl = curl_easy_init();
string data;
data="http://fr.wiktionary.org/w/api.php?format=json&action=query&titles=";
//Page titles are read from local file. The code is not shown to make short.
while ( not_end_of_file){
//list_of_page_title is pages requested for the current iteration.
data=data+list_of_page_title+"prop=revisions&rvprop=content";
curl_easy_setopt(curl, CURLOPT_URL, data.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_write);
curl_easy_perform(curl);
curl_easy_reset(curl);
}
curl_easy_cleanup(curl);
return 0;
}
Я новичок в скручивании. Может быть, многие вещи пропущены. Спасибо вам за помощь.
data=data+list_of_page_title
добавит новый заголовок к вашему предыдущему URL вместо того, чтобы заменить предыдущий. К концу у вас будет гигантский URL, полный мусора. Сервер, вероятно, обращает внимание на первый заголовок и игнорирует остальные.
И это будет очевидно, если вы просто выведете свой URL в качестве первого шага отладки … «Я запрашиваю то, что, как мне кажется, я запрашиваю?»
Одна проблема заключается в том, что вы не сбрасываете переменную буфера.
while ( not_end_of_file){
buffer = ""; // reset buffer to empty string
//list_of_page_title is pages requested for the current iteration.
data="http://fr.wiktionary.org/w/api.php?format=json&action=query&titles=" +
list_of_page_title +
"prop=revisions&rvprop=content";
curl_easy_setopt(curl, CURLOPT_URL, data.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_write);
curl_easy_perform(curl);
curl_easy_reset(curl);
}
И, как Петр указывает на ваше отношение к data
Переменная имеет очень похожую проблему.