Я использую curl, чтобы получить файл HTML в моем репозитории bitbucket. Я не могу дать вам прямую ссылку, поскольку репо является приватным, но оно имеет следующую форму: https://bitbucket.org/uname/project/downloads/index.html
Я делаю это, используя следующий код:
mCurl = curl_easy_init();
curl_easy_setopt(mCurl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(mCurl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(mCurl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(mCurl, CURLOPT_URL, String::toAnsi(address).c_str());
curl_easy_setopt(mCurl, CURLOPT_WRITEFUNCTION, _internal_curl_write_callback);
curl_easy_setopt(mCurl, CURLOPT_WRITEDATA, this);
curl_easy_perform(mCurl);
Хотя сначала результаты выглядели нормально после того, как я изменил страницу (удалил ее на репо и загрузил ее новым), curl все равно извлекает старую версию страницы, даже если я перезапущу приложение. Однако в браузере, если я вхожу в эту ссылку, я получаю новую.
Есть ли кэширование в завитке, которое я могу отключить? Или вы знаете о других возможных объяснениях этого поведения?
Чтобы запросить не кэшированную страницу с сервера, установите параметр заголовка Cache-control: no-cache
. Вы можете сделать это следующим образом cURL:
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Cache-control: no-cache");
curl_easy_setopt(mCurl, CURLOPT_HTTPHEADER, headers);
Если вы повторно используете соединения в одной и той же программе, вы также можете включить:
curl_easy_setopt(mCurl, CURLOPT_FRESH_CONNECT, true);
curl_easy_setopt(mCurl, CURLOPT_FORBID_REUSE , true);
curl_easy_setopt(mCurl, CURLOPT_FRESH_CONNECT, 1L);