curl возвращает старую версию страницы

0

Я использую 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 все равно извлекает старую версию страницы, даже если я перезапущу приложение. Однако в браузере, если я вхожу в эту ссылку, я получаю новую.

Есть ли кэширование в завитке, которое я могу отключить? Или вы знаете о других возможных объяснениях этого поведения?

  • 0
    Попробуйте curl_easy_setopt(mCurl, CURLOPT_FRESH_CONNECT, 1L);
  • 0
    Я попробовал это, но, к сожалению, это не изменило поведение. Наверное, мне следовало сказать, что это не исчезнет, даже если я перезапущу свое приложение (отредактировано в теме)
Показать ещё 2 комментария
Теги:
curl

1 ответ

0

Чтобы запросить не кэшированную страницу с сервера, установите параметр заголовка 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);
  • 0
    К сожалению, я не мог заставить его работать, даже с обязательным повторным подтверждением и другими вариантами управления кэшем. Для CURL это всегда задержка в 20 минут, в то время как браузер (мой, а также другие люди) получает новую версию. Вероятно, это проблема bitbucket.
  • 0
    Здесь определенно нет проблем, которые невозможно преодолеть. Между CURL и вашим браузером нет ничего волшебного. Если вы подозреваете, что bitbucket выполняет фильтрацию по пользовательскому агенту, просто измените пользовательский агент cURL, чтобы он совпадал с вашим браузером.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню