一种“新手问题”,部分确认/纠正我的理解:我想实现一些自动化的网站探测,包括。登录时,我不想实际提取任何数据。从早期的工作中,我记得 curl 并且仅用于检查 URL 可用性(评估 HTTP 响应代码,例如 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 搜索它是否包含“注销”作为我已登录的证明(即使没有登录,我在所有测试中总是得到 HTTP 200 与我尝试的各种 URL )。
在其中一种情况下(后面有 Tomcat)我看到,在 Firefox 中登录后,后续 URL 包含 ...&jsessionid=... 当然,我最初不知道 - 所以我尝试了几个例如,在 shell 脚本中调用 curl(命令!)两次,从第一个获取 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=...
但是无论我尝试了什么,我都没有得到任何地方:-| 现在的问题:
如果我按照上面的示例执行基于 curl 的 POST,我是否(通常?)获得完整的 HTML 页面作为响应,就像我在登录后在常规 Web 浏览器中看到的一样?
- 在我看来好像是真的,但是应该做一个简单的 POST 并且它应该包含“注销”...
- 但是,由于我从来没有让这个工作,可能有什么问题?
如果我必须执行多个 HTTP 请求,那么使用 curl 命令这样的概念是否有效?curl退出时会发生什么?套接字关闭并且 Web 服务器可能关闭会话(并且我的 jsessionid 无效)?
- 如果这种方法不起作用,基于 libcurl 的概念可能会更好吗?例如 phpcurl(刚刚阅读过但从未尝试过),我将会话保存在我的 php 脚本中,因此连接/会话保持打开等...
- 可能取决于网站是否使用 cookie?
有没有更好的想法如何完成最初的想法?理想情况下,它应该很简单,有一些脚本,但没有庞大的监控套件
很可能有很多“取决于...” :-| 此外,可能问题不是 100% 准确,但任何提示都表示赞赏!:-)
Rgds, tge