【问题标题】:How to identify domain name with Short URL like goo.gl in PHP?如何用 PHP 中的 goo.gl 等短 URL 识别域名?
【发布时间】:2017-12-19 09:31:22
【问题描述】:

我有一个论坛,我有存储垃圾邮件域的 MySQL 表。所以任何人都不能把一个 URL 包含在我的 MySQL 表中。

一些用户使用https://goo.gl/ 服务发送垃圾邮件。但是我不能阻止 goo.gl 域,因为它对其他用户也有影响。

当用户使用像https://goo.gl/ 这样的短 URL 服务时,有没有办法使用 PHP 找到实际域?

【问题讨论】:

    标签: php short-url


    【解决方案1】:

    您应该查看 goo_gl 上的 Google Developers 文档,它解释了如何扩展 url https://developers.google.com/url-shortener/v1/getting_started 与指向扩展缩短的 url

    【讨论】:

      【解决方案2】:

      我可以想到两种方法来做到这一点:

      1) 第一个是 goo.gl 特有的,但其他服务可能有类似的接口:使用 Google URL Shortnener API。您可以发出请求,传递任何 goo.gl,并接收包含原始 URL 的 JSON 返回,然后您可以解析并提取域名以检查您的黑名单。

      概览见https://developers.google.com/url-shortener/,具体方法见https://developers.google.com/url-shortener/v1/url/get

      2) 这更粗略,但几乎适用于任何缩短服务:只需请求 URL(例如使用 cURL),由于它本质上是一个重定向服务,因此您应该返回一个 HTTP 302 响应,并包含在响应标头将是一个 Location 标头,显示真实的 URL。您可以再次提取它,解析出域名并根据您的黑名单进行检查。这种方法当然适用于 goo.gl URL,我已经检查过了,它们肯定会返回 302 和标头。如果其他服务有任何不同的做法,我会感到惊讶,因为这是标准的 www 约定,用于通知 HTTP 客户端 URL 是永久重定向。

      当然,任何一种方法都会给您的处理增加一些开销,因此您应该关注性能。您可能需要维护一个著名的 URL 缩短服务列表,因此您可以首先检查您是否真的需要将其解析为原始 URL。否则,您最终将向用户提交的每个 URL 发出 HTTP 请求,这不是必需的,并且会减慢速度 - 特别是如果这些合法 URL 内容繁多和/或需要很长时间才能响应(而API 调用或对仅返回没有内容的简单 302 的 URL 的调用应该会很快回复)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多