我正在尝试使用c中的libcurl登录网站(http网站,而不是https)。问题是,登录后如果我尝试访问域中的页面,我会被重定向到声称我的会话已过期的页面,我需要重新登录。
然后我假设网站使用的会话cookie一定存在问题。这是我用来处理cookie的代码。当我进入登录页面时,我在第一次请求时使用这些设置。
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookie.txt");
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookie.txt");
curl_easy_setopt(curl, CURLOPT_COOKIESESSION, 1);
然后我使用CURLOPT_VERBOSE来获取有关会话的信息。我似乎确实收到了一个cookie并在随后的请求中再次发送它。
Set-Cookie: PHPSESSID=2d952576829405ce0d25689804b525ec; path=/
此cookie也用于以下请求:
Cookie: PHPSESSID=2d952576829405ce0d25689804b525ec
最后,当我去cookie.txt时,我也看到了那里的cookie:
domain FALSE / FALSE 0 PHPSESSID 2d952576829405ce0d25689804b525ec
总而言之,我的问题是:如何进一步解决过期会话的问题?互联网上的大多数消息来源解释了如何让cookie工作,但在这种情况下,我没有看到cookie的问题。
编辑:使用Vasiliy Faronov提供的一般方法我发现通常会从javascript响应中生成两个额外的cookie。显然libcurl不解释javascript,因此不会创建cookie。在模仿cookie的价值后,一切都应该有效,所以我会考虑解决这个问题。
答案 0 :(得分:1)
如果您的Web资源适用于Web浏览器,但不适用于程序化请求,则一般操作过程很简单。
CURLOPT_VERBOSE
。在许多情况下,数据包嗅探器将起作用。User-Agent
,依此类推。在某些时候,互动会破坏,你会知道,例如该特定标题是重要的。或者它根本不会破裂。