找到重定向的img源代码

时间:2013-03-24 12:07:06

标签: javascript redirect

我有最新网络摄像头http://cam.hackerspace.sg/last.jpg的网址,例如,它会重定向到其源文件名。 1364124301.jpg

我想在Javascript中阅读Epoch'1364124301',以便将其转换为时间戳。虽然记录img.src显示旧的原始URL。那么如何在不使用Jquery的情况下获得'1364124301'?

谢谢!

2 个答案:

答案 0 :(得分:2)

单独使用JavaScript似乎无法获得重定向位置:XMLHTTPRequest透明地隐藏重定向,如果iframe来自其他域,则iframe不允许访问它的URL。

如果您有启用PHP的网站,则以下内容将允许获取重定向。 (为简单起见,所有代码都没有任何错误条件的捕获,在使用之前需要添加错误处理。)

首先,要获取重定向位置,一些PHP,该文件名为getRedirect.php:

<?php
$redirect = '';
$urlToQuery = $_GET['url'];
$urlParts = parse_url($urlToQuery);
$host = $urlParts['host'];
$path = $urlParts['path'];
$address = gethostbyname ($host);
$socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect ($socket, $address, 80);
$request = 'GET '.$path.' HTTP/1.1'."\r\n";
$request .= 'Host: '.$host."\r\n";
$request .= 'Connection: Close'."\r\n\r\n";
socket_write($socket, $request);
$answer = socket_read($socket, 8192);
socket_close($socket);
$answerLines = explode("\r\n", $answer);
foreach ($answerLines as $line) {
    $lineParts = explode(':', $line, 2);
    if($lineParts[0] == 'Location') {
    $redirect=trim($lineParts[1]);
    break;
    }
}
header('Content-Type: text/plain; charset=us-ascii');
header('Content-Length: '.strlen($redirect));
echo $redirect;
?>

其次,图像显示页面使用JavaScript设置图像并查询重定向位置(通过XMLHTTPRequest到getRedirect.php):

<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
    function updateImage() {
    var imgParent = document.getElementById("imgContainer");
    // delete existing image if exists
    var imgChild = imgParent.firstChild;
    if(imgChild!=null) imgParent.removeChild(imgChild);
    // insert new image with actual redirect
    var newImg = document.createElement("img");
    newImg.src = "http://cam.hackerspace.sg/last.jpg";
    imgParent.appendChild(newImg);
    var redirect = getRedirect("http://cam.hackerspace.sg/last.jpg");
    var timestamp = redirect.substring(redirect.lastIndexOf("/") + 1, redirect.lastIndexOf("."));
    document.getElementById("imageDate").innerHTML="Timestamp="+timestamp;

    }
    function getRedirect(url) {
    var redirect = "";
    var req = new XMLHttpRequest();
    req.open('GET', 'getRedirect.php?url='+url, false);
    req.onreadystatechange = function () {
        if (req.readyState == 4) {
        redirect = req.responseText;
        }
    };
    req.send(null);
    return redirect;
    }
</script>
</head>
<body>
<button onclick="updateImage();">update image</button>
<div id="imgContainer"></div>
<p id="imageDate"></p>
</body>
</html>

答案 1 :(得分:0)

使用XMLHTTPRequest,您可以在XMLHTTPRequest.responseURL属性中重定向后读取newUrl。通过将newUrl与originUrl进行比较,您可以了解它是否是重定向。