【问题标题】:Can't open Twitter using Google App Engine's urlfetch无法使用 Google App Engine 的 urlfetch 打开 Twitter
【发布时间】:2011-02-03 01:18:12
【问题描述】:

我正在尝试使用 Google App Engine 的 urlFetch 服务获取 URL 并实现代理站点。像 Twitter 和 Facebook 这样的网站看起来像缺少样式表一样毁容,即使 Google 缺少 Google 徽标,但 Yahoo 却可以正常打开,我不明白为什么。

【问题讨论】:

    标签: google-app-engine urlfetch


    【解决方案1】:

    当您使用 urlfetch 时,它会获取页面的 HTML,而不是图像、CSS、JavaScript 或任何其他资源。

    Yahoo 看起来不错,大概是因为它们使用绝对 URL(例如,http://www.yahoo.com/image.png)指定图像和 CSS,因此当您的 urlfetch 页面显示时,它包含来自 yahoo.com 的完整图像 URL。请记住,当某人无权访问 yahoo.com 时,这些图像也不会出现在您的代理页面上。

    编辑:看起来 Yahoo 将他们的 CSS 内联到 HTML 页面本身,这可以解释为什么它在您获取的副本中有效。

    Google 出现时没有 CSS/图像,因为它们的 CSS/图像被指定为相对 URL(例如,/image.png),而您的代理在 /image.png 中没有图像

    您必须解析 urlfetch 的页面内容以查找需要获取和代理的图像和 CSS。请务必处理像 /resource.png 这样的相对 URL 以及像 www.foo.com/resource.png 这样的绝对 URL。

    【讨论】:

    • 是的,我后来想通了。我想我可以获取 css 并将其内联放置在它不存在的地方,但是我该如何处理图像?
    • 当您在页面中找到图像时,也获取图像并将其存储在您的代理中。然后重写页面的 属性以指向您的代理图像而不是原始图像。为简单起见,我也会使用 CSS 和任何其他资源来执行此操作。
    • 我猜想使用 css 显示的图像的链接也必须更改,这真是一件大事!
    • 您实际上可以通过向标记添加基本 href 标记来解决此问题:w3schools.com/TAGS/tag_base.asp。不过,更重要的是,为什么您要编写代理应用程序?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2010-12-30
    相关资源
    最近更新 更多