Http 使用libcurl对会话过期进行故障排除

Http 使用libcurl对会话过期进行故障排除,http,session,curl,cookies,libcurl,Http,Session,Curl,Cookies,Libcurl,我正在尝试使用c语言中的libcurl(http网站,而不是https)登录一个网站。问题是,登录后,如果我试图访问域中的页面,我会被重定向到一个页面,声称我的会话已过期,我需要重新登录 然后我假设网站使用的会话cookie一定有问题。这是我用来处理cookie的代码。当我进入登录页面时,我会在第一次请求时使用这些设置 curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookie.txt"); curl_easy_setopt(curl, CURLOPT_

我正在尝试使用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,因此不会创建cookies。在模拟cookie的值之后,所有的东西都应该工作,所以我会考虑这个问题得到解决。

< P>当你有一个Web浏览器工作的Web资源,但是它不适用于程序请求时,一般的操作过程很简单。
  • 让自己详细检查发送的请求和响应。在您的情况下,您可能可以使用Web浏览器的开发工具和
    CURLOPT\u VERBOSE
    。在许多情况下,数据包嗅探器可以工作
  • 与Web浏览器成功交互并捕获请求/响应流
  • 以编程方式复制相同的请求/响应流。如果您以完全相同的方式发出请求,并且尽可能地复制所有消息细节,那么您通常会得到相同的成功结果
  • 一步一步地修改你的程序。逐个删除不需要的头和cookie,替换
    用户代理
    ,依此类推。在某一点上,交互将中断,您将知道,例如,该特定标题是重要的。或者它可能根本不会断裂