2012-04-04 69 views
0

一种“新手问题”,以部分确认/纠正我的理解: 我想实施一些自动网站探测包括。登录,我不想实际拉取任何数据。从早期的工作中,我记得curl和仅检查URL可用性(eval HTTP响应代码,例如200或不),这很好地工作。 现在任务也在登录 - 但我无法让它工作,并且怀疑这是否按预期工作。经过一段时间的实验和搜索WWW后,我找不到明确的答案 - 所以我的希望在这里:-)网络会话卷曲探测

最初我的想法是使用脚本,只是在里面放入curl POST命令,以防万一与饼干选项,如:

$ 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是否包含“注销”作为我已登录的证明(即使未登录,我总是在所有测试中获得HTTP 200,并且包含各种URL里德)。我发现,在Firefox中登录后,后续的URL包含... & jsessionid = ...当然,我最初不知道 - 所以我尝试了几件事,例如(!命令)来调用卷曲两次在shell脚本,从第一个得到的SessionID,并将其附加到第二网址,如:

$ 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=... 

但无论我尝试,我从来没有在任何地方: - | 现在的问题:

  1. 如果我做一个基于卷曲-POST,如上面的例子,做我 (通常?)获得完整的HTML页面的响应,就像我看到它 在常规的网络浏览器登录后?

    • 看起来我好像真的,但随后一个简单的POST应该做的,它应该包含“注销” ...
    • 但是,因为我从来没有得到这个工作,可能是什么问题?
  2. 如果我必须做多个HTTP请求,请问 那个使用curl命令的概念就像那样工作吗?什么 卷曲退出时发生?套接字关闭,Web服务器 可能会关闭会话(并且我的jsessionid无效)?

    • 如果这种方法不起作用,基于libcurl的概念可能会更好?例如。 phpcurl(只读过它,但从来没有尝试过),我的会议保持在我的PHP脚本,因此连接/会话保持打开等...
    • 可能取决于该网站是否使用cookie?
  3. 有没有更好的想法如何完成 最初的想法?理想情况下,应该简单一些脚本,但 没有庞大的监控套房

最有可能有许多“取决于......”: - |此外,可能的问题不是100%准确,但任何提示都表示赞赏! :-)

RGDS, TGE

回答

0

OK,最后我取得了一些进步 - 也许它可以帮助其他人... 首先,基于脚本的方法做工作,测试用例一个至少与Joomla在服务器端(我会稍后尝试其他人)。密钥到该溶液中是这样的: CURL login by script to a Joomla website

类似于所描述的方式予提取从第一GET的响应令牌并把它放入第二形式参数:

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" ... 

第二差是使用“-F”不起作用,但“-d”。 非常有趣的是,POST参数与我在HTTPfox中看到的不同。

Registers tge