0

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

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

谢谢!

4

2 回答 2

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>
于 2013-03-24T18:22:17.063 回答
0

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

于 2017-07-24T09:55:35.063 回答