我有最新网络摄像头http://cam.hackerspace.sg/last.jpg的网址,例如,它会重定向到其源文件名。 1364124301.jpg
我想在Javascript中阅读Epoch'1364124301',以便将其转换为时间戳。虽然记录img.src显示旧的原始URL。那么如何在不使用Jquery的情况下获得'1364124301'?
谢谢!
答案 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进行比较,您可以了解它是否是重定向。