【发布时间】:2015-09-18 10:00:30
【问题描述】:
我正在尝试找到一个高级 Clojure 库,用于发出 HTTP 和 HTTPS 请求,从响应中解析表单和链接,然后发布更新的表单或跟踪链接。理想情况下,可以自动处理重定向和 cookie(即会话)。也就是说,我想找到一些东西,我的代码可以尽可能地模仿用户从浏览器驱动 web 应用程序,而无需浏览器。
几年前,我们使用 Hpricot 和 Ruby 来完成类似的任务,但如果可能的话,我更喜欢在 Clojure 中执行此操作。根据记忆——我已经多年没有使用 Hpricot——我们能够以最小的努力做到这一切:我们能够专注于驱动应用程序的“什么”,而不是“如何”。
我找到了 clj-http https://github.com/dakrone/clj-http 但这似乎比我正在寻找的要低一级(无表单解析) - 尽管它基于 Apache HttpComponents http://hc.apache.org/httpcomponents-client-ga/ 似乎确实暴露了一个不错的,流利的,用于表单的 API http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fluent.html。
Screen scraping in clojure 询问 Clojure 中的屏幕抓取问题,对此有几个很好的建议,但没有真正解决上述问题。
HTTP Kit http://www.http-kit.org/client.html 看起来它将成为上述的一个很好的基础,但不做表单解析或会话管理(据我所知)。
目前我已经转向直接从 Clojure 使用 Apache HttpComponents Java 库。任何人都可以提出更好的 - 也许更多的 Clojure 惯用 - 替代方案吗?或者他们发现在类似情况下效果很好的任何东西?我的目标是快速编写最少的代码来调查 Web 服务的问题。这不是生产代码。我主要关心的是节省时间,而不是获得“理想”的解决方案。
[背景是我试图模仿某些形式的用户行为,以便首先重现,然后尝试追踪大量遗留 Java/EJB 代码中的间歇性错误。然而,这个问题似乎只发生在几千个 POST 中一次。 (可疑的是某种形式的缓存问题。)问题的存在,但事后很容易检测到。]
【问题讨论】:
-
你考虑过硒吗? selenium 有一个 clojure 包装器:github.com/semperos/clj-webdriver
-
我一直在阅读 Selenium 的 Javadoc。我看不到任何方法可以在请求中提取表单、更新它们并提交更改。
标签: forms http clojure apache-httpclient-4.x