C++ curl检索页面的旧版本

C++ curl检索页面的旧版本,c++,curl,C++,Curl,我正在使用curl在我的bitbucket存储库中获取一个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_V

我正在使用curl在我的bitbucket存储库中获取一个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);
虽然一开始我更改了页面(在repo上删除了页面并上传了新页面),但结果似乎还不错,即使我重新启动应用程序,curl仍然会检索页面的旧版本。但是,如果我在浏览器中输入该链接,我将获得新链接


curl中是否有可以禁用的缓存?或者您知道此行为的任何其他可能解释吗?

要从服务器请求非缓存页面,请设置标题选项
缓存控制:无缓存。使用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\u easy\u setopt(mCurl,CURLOPT\u FRESH\u CONNECT,1L)CURLOPT_USERAGENT
设置为您的浏览器。2) 尝试将可执行文件移动到另一个目录。您可以附加一个参数以获取“新”资源,如
https://bitbucket.org/uname/project/downloads/index.html?nochache=timestamp
(防止缓存问题)并确保文件被覆盖。遗憾的是,我无法让它工作,即使使用了必须重新验证和其他有关缓存控制的选项。当浏览器(我的和其他人)获得新版本时,CURL总是会延迟20分钟。可能是bitbucket的问题。这里绝对没有无法克服的问题。cURL和浏览器之间没有什么神奇的不同。如果您怀疑bitbucket正在通过用户代理进行过滤,只需将cURL的用户代理更改为与您的浏览器相同即可。我也尝试过(
Mozilla/5.0(Windows NT 6.2;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/32.0.1667.0 Safari/537.36
)但结果仍然相同。然而,每隔十几次浏览器都会下载一个旧版本。但这只是一个计时器,因为每次都是cURL。您是否在某种透明缓存代理(如Squid)后面?这一讨论确实超出了原始问题的范围,因为它听起来好像有什么行为不正常,可能是bitbucket本身,但我只想强调,从逻辑上讲,假设发送到服务器的输入相同,行为上不会有任何差异,而且curl能够复制您可以通过浏览器发送的任何数据。您是否考虑过抓取浏览器和bitbucket之间交换的数据包捕获,并将其与curl应用程序的数据包捕获进行比较?