如何(以编程方式)查找广告的最终目的地 (url)

Mik*_*ike 3 php ruby http ads

这可能是微不足道的,或者不是,但我正在开发一个软件,它将验证通过我的网络应用程序显示的广告的“行尾”域。理想情况下,我有一个我不想从中投放广告的域列表(假设 Norton.com 是其中之一),但大多数广告网络通过缩短且神秘的 URL (adsrv.com) 来投放广告,最终重定向到诺顿网站。所以问题是:有没有人构建过,或者知道如何构建一个类似刮刀的工具,可以返回广告的最终目标网址。

初步发现:有些广告采用 Flash、JavaScript 或纯 HTML 格式。模拟浏览器是完全可行的,并且可以对抗不同格式的广告。并非所有 Flash 或 JS 广告都有 noflash 或 noscript 替代方案。(浏览器可能是必要的,但如前所述,这完全没问题……使用诸如 WatiN 或 WatiR 或 WatiJ 或 Selenium 之类的东西……)

更喜欢开源,这样我就可以自己重建一个。真的很感谢帮助!

编辑* 此脚本需要点击广告,因为它可能是 Flash、JS 或纯 HTML。所以 Curl 不太可能是一个选项,除非 Curl 可以点击?

Der*_*sed 5

示例 PHP 实现:

$k = curl_init('http://goo.gl');
curl_setopt($k, CURLOPT_FOLLOWLOCATION, true); // follow redirects
curl_setopt($k, CURLOPT_USERAGENT, 
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 ' .
'(KHTML, like Gecko) Chrome/7.0.517.41 Safari/534.7'); // imitate chrome
curl_setopt($k, CURLOPT_NOBODY, true); // HEAD request only (faster)
curl_setopt($k, CURLOPT_RETURNTRANSFER, true); // don't echo results
curl_exec($k);
$final_url = curl_getinfo($k, CURLINFO_EFFECTIVE_URL); // get last URL followed
curl_close($k);
echo $final_url;
Run Code Online (Sandbox Code Playgroud)

哪个应该返回类似的东西 https://www.google.com/accounts/ServiceLogin?service=urlshortener&continue=http://goo.gl/?authed%3D1&followup=http://goo.gl/?authed%3D1&passive=true&go=true

注意:您可能需要使用curl_setopt()关闭CURLOPT_SSL_VERIFYHOSTCURLOPT_SSL_VERIFYPEER,如果你想跨越可靠HTTPS / SSL跟随