我经常使用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。
答案 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" />