我需要以编程方式与 WebObjects 网站交互并从响应中提取数据。我正在抓取的特定 WebObjects 站点使用组件操作并将会话存储在 cookie(而不是 url)中。这意味着所有 url 看起来像这样:
http://example.com/WOApp/WebObjects/WOApp.woa/wo/7.0.0.0.29.1.1.1
我的第一个问题是:
- 像这样的 url 是否不会完全破坏本地和共享的缓存机会(REST 中的可缓存约束)?我想像这样的 url 唯一有效的缓存是 WebObjects 服务器本身。
- 可寻址性不是也被破坏了吗?每个资源都有一个唯一的端点,但它不断变化。此外(我认为)WebObjects 也会使太旧的 URL 无效,因为它们在一段时间后“超时”。我不确定这是否仅适用于带有会话的 url。
关于抓取,我不确定是否可以从网站中提取任何有意义的端点。例如,对于一个普通的网站,我会查看 HTML 并提取 POST url,然后通过直接发布到它们而不是通过正常的请求-响应周期在我的爬虫中使用它们。
在这种情况下,我显然不能使用从 HTML 中提取的任何 URL,因为它们是在每个请求上动态生成的,但是我读到了一些关于如果安全设置未设置为不允许,则能够直接访问 WebObjects 组件的内容(请参阅https:// /developer.apple.com/legacy/library/documentation/LegacyTechnologies/WebObjects/WebObjects_3.5/PDF/WebObjectsDevGuide.pdf,第 53 页“直接请求的限制”)。我不明白如何做到这一点,或者是否有可能。
如果不可能,那将是一个好方法吗?我能想到的唯一选择是:
- 使用成熟的浏览器客户端与网站交互(例如 WatiR 或 Selenium)并从响应中提取和处理 HTML
- 手动提取动态端点,首先请求它们所在的页面,然后在 HTML 中找到它们所在的位置。然后在之后使用它们,就好像它们是“静态的”一样。
我对如何处理这种情况的意见很感兴趣,因为我认为上述任何解决方案都不是特别好的。