2017-07-14 8 views
2

私はフォーラムを持っており、私は迷惑メールドメインを格納するMySQLテーブルを持っています。だから誰も私のMySQLテーブルに含まれているURLを置くことはできません。PHPでgoo.glのような短いURLでドメイン名を特定するにはどうすればよいですか?

https://goo.gl/サービスを使用しているユーザーがいます。しかし、他のユーザーにも効果があるので、goo.glドメインをブロックすることはできません。

https://goo.gl/のようなショートURLサービスを使用する場合、PHPを使用して実際のドメインを見つける方法はありますか?

答えて

2

を展開する私はこれには2つの方法を考えることができます。これは最初のものがある)

1 goo.glに固有ですが、他のサービスにも同様のインターフェースがあります。Google URL Shortnener APIを使用します。 goo.glを渡してリクエストを行い、元のURLを含むJSONを受け取ることができます。このURLを解析してドメイン名を抽出してブラックリストを確認することができます。

概要はhttps://developers.google.com/url-shortener/、具体的な方法についてはhttps://developers.google.com/url-shortener/v1/url/getを参照してください。

2)これはより重大ですが、ほとんどすべてのショートネーナサービスに対応する必要があります。単純にURLを要求します(例:cURLなど)。それは本質的にリダイレクトサービスなので、HTTP 302応答を返す必要があります。応答ヘッダーは実際のURLを示すLocationヘッダーになります。再度これを抽出し、ドメイン名を解析してブラックリストと照合することができます。このメソッドは確かにgoo.glのURLのために働くでしょう、私はチェックして、彼らは間違いなく302とヘッダーを返します。 HTTPクライアントにURLが永続的なリダイレクトであることを通知するための標準的なwwwの規約であるため、他のサービスがこれを何か別の方法で行った場合、私は驚くでしょう。

どちらの方法でも処理にいくらかのオーバーヘッドが追加されるため、パフォーマンスに注意する必要があります。おそらく、よく知られているURL短縮サービスのリストを維持したいので、最初に実際に元のURLに移動して解決する必要があるかどうかを確認できます。そうしないと、ユーザーから送信されたすべての単一のURLに対してHTTPリクエストが送信されますが、これは必要ではなく、処理が遅くなります。特に、正当なURLがコンテンツの重い場合や応答時間が長い場合単純な302のコンテンツを返すURLへのAPI呼び出しまたは呼び出しは、返信するのがかなり速いはずです)。

関連する問題