我在 Google Cloud (GC) 上的 Google App Engine (GAE) 项目中托管了一个 URL 缩短器/流量分析服务。提交 URL 进行缩短时,它会执行 Python urllib2.urlopen 来提取页面并获取其标题,该标题用于生成包含缩短链接的社交媒体帖子。某些网站在 urllib2.urlopen 命令上返回 403 Forbidden,因此无法从页面标题生成社交媒体帖子的正文。请注意,这仅在尝试加载页面以获取页面标题时发生;生成的缩短 URL 在我的浏览器中正常工作,并正确 302 到目标页面。
我的猜测是,来自 GC IP 范围的页面请求被我尝试链接到的网站列入黑名单,作为可能的机器人或其他非人类或恶意流量的来源。
GC 是否有我可以申请的白名单服务,或者这是由其他原因造成的?
答案1
按照出站请求,App Engine 使用 URL Fetch 服务发出出站请求。来自您的应用程序的请求实际上是通过 Google 的 URL Fetch 服务代理的。其他网站通常可以相当容易地识别这些请求的来源。此外,App Engine 会将标识符字符串附加到标User-Agent
头,以允许服务器根据以下规则识别 App Engine 请求请求标头。
目前没有可用的白名单服务允许您的 App Engine 应用程序获取 URL 并获取2xx
响应。请求给定的 URL 并解析 HTML 响应以获取其部分内容通常称为抓取,大多数大型网站对此类交互都有严格的政策。
以 Facebook 为例
Facebook 的服务条款明确禁止完全抓取,规定如下:
未经我们事先许可,您不得使用自动化手段(例如收集机器人、机器人、蜘蛛或抓取工具)收集用户的内容或信息,或以其他方式访问 Facebook。
Facebook 确实有图形 API这是将数据传入和传出 Facebook 社交图谱的主要方式。这需要向他们注册一个应用程序并获取一个app secret
。这样您就可以提供一个appsecret_proof
Graph API 调用进行身份验证。然后,您可以使用URL
调用以通过提供外部 Facebook URL 来获取 Facebook 对象(分享、评论等)。
一般情况
大多数其他社交媒体网站也有自己的 API。这是因为他们想要决定外部应用程序(例如您的应用程序)如何访问其内容以及用户提供给他们的内容。如果您要访问他们的资源,则必须确保遵守每个网站的服务条款。