Curl web会话的扩展

Curl web会话的扩展,curl,Curl,这是一个“新手问题”,部分确认/纠正我的理解: 我想实现一些自动网站探测,包括登录,我不想实际提取任何数据。在之前的一份工作中,我记得curl和检查URL可用性(evalttpresponsecode,例如200或不200)的功能很好。 现在任务也在登录中,但我无法让它工作,并且怀疑它是否能按预期工作。经过一段时间的实验和在WWW上的搜索,我找不到一个明确的答案——所以我的希望就在这里:-) 最初,我的想法是使用脚本并将curl POST命令放入其中,以防cookies选项,例如: $ curl

这是一个“新手问题”,部分确认/纠正我的理解: 我想实现一些自动网站探测,包括登录,我不想实际提取任何数据。在之前的一份工作中,我记得curl和检查URL可用性(evalttpresponsecode,例如200或不200)的功能很好。 现在任务也在登录中,但我无法让它工作,并且怀疑它是否能按预期工作。经过一段时间的实验和在WWW上的搜索,我找不到一个明确的答案——所以我的希望就在这里:-)

最初,我的想法是使用脚本并将curl POST命令放入其中,以防cookies选项,例如:

$ curl -s -w "%{http_code}" -o /tmp/tge-HTML.out -b /tmp/tge-cookies -c /tmp/tge-cookies -F "username=bla&passwd=blub&Submit=Login" http://some.url
(我使用HTTPfox来确定POST参数,并且基本上确定它们是正确的)

然后,我搜索文件/tmp/tge-HTML.out是否包含“Logout”作为我已登录的证明(即使没有登录,我在所有测试中都会使用我尝试过的各种URL获得HTTP 200)

在其中一个例子中(后面有一个Tomcat),我看到在登录Firefox之后,后续的URL包含…&jsessionid=。。。当然,我一开始不知道,所以我尝试了几件事,例如在shell脚本中调用curl(命令!)两次,从第一个URL获取sessionID并将其附加到第二个URL,如:

 $ curl -s -w "%{http_code}" -o /tmp/tge-HTML.out -b /tmp/tge-cookies -c /tmp/tge-cookies -F "username=bla&passwd=blub&Submit=Login" http://some.url
 ... extract jsessionid from /tmp/tge-HTML.out ...
 $ curl -s -w "%{http_code}" -o /tmp/tge-HTML.out -b /tmp/tge-cookies -c /tmp/tge-cookies 
    http://some.url/...?jsessionid=...
但无论我怎么努力,我都没有成功:-| 现在问题是:

  • 如果我像上面的例子那样做一个基于卷曲的帖子,我会这样做吗 (通常?)获取完整的HTML页面作为响应,就像我看到的一样 登录后是否在常规web浏览器中

    • 在我看来似乎是真的,但一个简单的帖子应该可以,它应该包含“注销”
    • 但是,既然我从来没有让它工作过,那会有什么问题呢
  • 如果我必须执行多个HTTP请求,是否执行 像这样使用curl命令的概念是否有效?什么 当curl退出时会发生什么?套接字关闭,web服务器关闭 可能会关闭会话(并且我的jsessionid无效)

    • 如果这种方法不起作用,那么基于libcurl的概念可能会更好?例如,phpcurl(刚刚读过,但从未尝试过),我将会话保存在我的php脚本中,因此连接/会话保持打开状态等
    • 可能取决于网站是否使用cookie
  • 有没有更好的方法来完成这个任务 创意?理想情况下,它应该是简单的一些脚本,但 没有大型监控套件

  • 最有可能的是有很多“依赖…”:-此外,可能问题不是100%准确,但任何提示都非常感谢!!:-)

    Rgds,
    tge

    好的,最后我取得了一些进步——也许这有助于其他人。。。 首先,基于脚本的方法确实有效,至少在服务器端带有Joomla的一个测试用例中有效(稍后我将尝试其他测试用例)。解决方案的关键在于:

    与所描述的方法类似,我从第一个GET的响应中提取令牌,并将其放入第二个GET的form参数中:

    rm -f /tmp/tge-cookies
    HTTP_CODE=$(./curl -s -w "%{http_code}\\n" -o /tmp/tge-HTML-out.1 -b /tmp/tge-cookies -c /tmp/tge-cookies -L ${URL})
    # Eval HTTP_CODE ...
    Token=`awk '{ if(match($1, "<input") && match($3, "name=\"[a-z0-9]+\""))
      {
        gsub("name=\"", "", $3);
        gsub("\"", "", $3);
        if(length($3) == 33)
        {
          print $3;
          exit 0;
        }
      } }' /tmp/tge-HTML-out.1`
    HTTP_CODE=$(./curl -L -s -w "%{http_code}\\n" -o /tmp/tge-HTML-out.2 -b /tmp/tge-cookies -c /tmp/tge-cookies -d "username=${User}&passwd=${Pass}&option=login&task=login&${Token}=1&remember=yes&Submit=Login" ${URL})
    # Eval HTTP_CODE ...
    # Eval /tmp/tge-HTML-out.2 whether containing "Logout" ...
    
    rm-f/tmp/tge cookies
    HTTP_CODE=$(./curl-s-w“{HTTP_CODE}\\n”-o/tmp/tge HTML out.1-b/tmp/tge cookies-c/tmp/tge cookies-L${URL})
    #评估HTTP_代码。。。
    令牌=`awk'{if(匹配($1,)