获得棘手的shortURL重定向

时间:2015-06-10 05:33:12

标签: php redirect curl

我经常使用php get_headers()或cURL来解析短网址中的长网址。我在使用Oktopost的短网址时遇到问题,例如:http://okt.to/4AOy96

标题表示此网址没有重定向,只返回http://okt.to/4AOy96

Array
(
[0] => HTTP/1.1 200 OK
[1] => Content-Type: text/html
[2] => Date: Wed, 10 Jun 2015 05:27:09 GMT
[3] => Server: Apache/2.4.7 (Ubuntu)
[4] => Vary: Accept-Encoding
[5] => X-Powered-By: PHP/5.5.9-1ubuntu4.7
[6] => Content-Length: 914
[7] => Connection: Close
)

但是当我将此链接粘贴到浏览器中时,它会将我重定向到不同的目标页面。这是否暗示了Oktopost服务器的某种类型的重定向,这通过典型的标头位置不是“可跟随的”?对这可能发生的事情有点困惑。

附加信息

根据以下建议,我正在尝试获取cURL响应,以便我可以解析元刷新并获取我需要的URL。问题是,我所有的cURL尝试都陷入无限循环。我已尝试过任意数量的选项组合,但没有运气。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://okt.to/4AOy96');
//curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.6 (KHTML, like Gecko) Chrome/16.0.897.0 Safari/535.6'); 
//curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$html = curl_exec($ch);
curl_close($ch);
echo $html;

似乎无法杀死循环并取回html。

2 个答案:

答案 0 :(得分:1)

看一下响应的源代码:

<script type="text/javascript">
    var form, hash, referer;

    form = document.createElement("form");
    hash = document.createElement("input");
    referer = document.createElement("input");

    referer.setAttribute('type', 'hidden');
    referer.setAttribute('name', 'referer');
    referer.setAttribute('value', '');

    hash.setAttribute('type', 'hidden');
    hash.setAttribute('name', 'hash');
    hash.setAttribute('value', '4AOy96');

    form.setAttribute('method', 'post');
    form.setAttribute('action', '');

    document.getElementsByTagName("body")[0].appendChild(form);

    form.appendChild(hash);
    form.appendChild(referer);


    form.submit();
</script>

JS收到200回复​​后正在执行POST请求。

答案 1 :(得分:1)

该网站执行一些javascript来刷新页面。 你可以做的是向okt.to发出请求并提取包含你想要的网址的元标记

<meta http-equiv="refresh" content="2;url=http://bit.ly/1EnnAau" />