我有一个最新的网络摄像头拍摄http://cam.hackerspace.sg/last.jpg的 URL ,它会重定向到它的源文件名。1364124301.jpg
我想在 Javascript 中读取 Epoch '1364124301',以便将其转换为时间戳。虽然记录 img.src 会显示旧的原始 URL。那么如何在不使用 Jquery 的情况下获得 '1364124301' 呢?
谢谢!
我有一个最新的网络摄像头拍摄http://cam.hackerspace.sg/last.jpg的 URL ,它会重定向到它的源文件名。1364124301.jpg
我想在 Javascript 中读取 Epoch '1364124301',以便将其转换为时间戳。虽然记录 img.src 会显示旧的原始 URL。那么如何在不使用 Jquery 的情况下获得 '1364124301' 呢?
谢谢!
单独使用 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>
使用 XMLHTTPRequest,您可以在 XMLHTTPRequest.responseURL 属性中重定向后读取 newUrl。通过将 newUrl 与 originUrl 进行比较,您可以确定它是否是重定向。