C++ curl检索页面的旧版本
我正在使用curl在我的bitbucket存储库中获取一个HTML文件。我不能给你直接链接,因为回购协议是私人的,但它来自以下表格: 我使用以下代码执行此操作: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
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)我试过这个,但遗憾的是它没有改变行为。我应该说,即使我重新启动我的应用程序(现在编辑到主题中),这种情况仍然存在。我猜测:1)尝试将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应用程序的数据包捕获进行比较?