【问题标题】:Curl to get the contents of an angular page卷曲以获取角度页面的内容
【发布时间】:2016-11-24 15:12:12
【问题描述】:

我正在开发一个 Angular 2 应用程序,我们需要使用 Google 地球来运行这个应用程序。不幸的是,谷歌地球使用的是一个非常古老的 Chrome 版本,它对 Angular 2 一无所知。需要一种机制来在服务器上运行 Angular 2 应用程序并将初始 html 响应与 Angular 已经执行/引导到该浏览器。

我正在考虑创建一个与 Google 地球浏览器通信的 PHP 服务器。所以本质上,谷歌地球将从这个 PHP 服务器请求页面。该 PHP 服务器将发出 CURL 请求以从 Angular2 应用程序获取相应的页面并将 HTML 返回到 Google 地球浏览器。

但是,有一个问题。 Curl 确实从 Angular 应用程序获得响应,但不等待 Angular 应用程序完成引导,这意味着在 ui-view 被路由器内容填充之前,CURL 呈现其响应,在这种情况下恰好没用我没有得到任何有用返回 HTML。

我使用此链接检查 CURL 响应:http://onlinecurl.com/ 您可以选择任何有角度的网站并使用此链接查看它给出的响应。

有没有一种方法可以让 curl 等到 angular bootstrap 然后返回 HTML?或者有没有其他方法可以解决这个问题?

我已经尝试过 angular-universal,但它似乎实现起来太复杂了,我有很短的时间来解决这个问题。

欢迎所有解决方案。提前致谢。

【问题讨论】:

  • 你在尝试一些代码吗?
  • 在我看来,在选择 Angular 作为应用程序平台之前,您应该考虑使用 Google 地球浏览器的要求? Curl 只会获取一个静态页面。它不像浏览器那样工作,它不运行任何 javascript(Angular 和类似框架所依赖的)。它只是从服务器获取初始响应。它不是“等待” Angular,因为 Angular(和任何其他脚本)没有运行,因为没有浏览器环境可以运行它。
  • PHP 和 curl 无能为力。解决问题的方法是使用 Phantomjs 或Nightmare 请求页面。我不能说这些解决方案不如 Angular Universal 复杂。

标签: javascript php angularjs node.js curl


【解决方案1】:

Angular 在最大安全模式下破坏了Semantic WebTor,以及除了渲染网络浏览器之外的任何其他类型的兼容性。所以我建议避免使用 Angular,或者如果这不是一个选项,请创建一个更快、更小、更兼容的站点镜像,每页提供一个 html.gz 文件。使用 Selenium IDE 之类的东西,因为“Angular Universal”不支持 window/document/jquery/etc 和 phantomjs & nightmare 使用旧的错误代码。 2,361.07 KB example Angular 页面可以缩减为 9.7 KB 平面文件。另一种选择是,如果您只想要数据并且您使用或可以找到具有正文 HTML 的 XHR JSON 文件并获取它。 curl -sL 'https://api.ontario.ca/api/drupal/page%2Fjobs-and-prosperity-fund-new-economy-stream?fields=body' > body.json 上面的例子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多