php - 如何用 PHP 中的 goo.gl 等短 URL 识别域名?

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

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

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

最佳答案

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

1) 第一个是 goo.gl 特有的,但其他服务可能有类似的接口(interface):使用 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 响应,并包含在响应 header 将是一个显示真实 URL 的 Location header 。您可以再次提取它,解析出域名并根据您的黑名单进行检查。这种方法当然适用于 goo.gl URL,我已经检查过了,它们肯定会返回 302 和 header 。如果其他服务有任何不同的做法,我会感到惊讶,因为这是标准的 www 约定,用于通知 HTTP 客户端 URL 是永久重定向。

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

https://stackoverflow.com/questions/45100289/

相关文章:

android - Android 应用程序上的 Urlshortener 和 403 错误

php - 如何使用短 URL 将用户重定向到自定义表单?

php - 修改 url 更短的脚本

url - 短网址冲突。更喜欢项目还是项目列表?

javascript - 使用 JSON 使用 Javascript 缩短 URL

mongodb - 在分布式数据存储中生成短 URL

php - 我的站点 htaccess 需要短 URL

apache - 无法让 mod_rewrite 正确(且不可见地)重写我的 URL?

url - 谷歌短网址如何运作?

url - 是否有用于将短网址翻译回常规链接的 API?