我有一个论坛,我有存储垃圾邮件域的 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/