如何使用JavaScript获取URL的重定向目标?
由于the Stack Exchange editor's image uploader doesn't like URL redirects,我试图看看我是否可以编写能够完成这项工作的用户脚本。本质上,给定一个URL http://foo.bar
,我需要得到最终的重定向位置。如何使用JavaScript获取URL的重定向目标?
XmlHTTPRequest
和$.ajax()
是不实际的,因为目标位点可能不允许它们:
的XMLHttpRequest无法加载的https:// ...无 “访问控制允许来源”标头本在请求的 资源。原因'http://meta.stackexchange.com'因此不是 允许访问。
那么,由于CORS,你需要某种服务器绕过脚本。在PHP中,它看起来像这样:
$content = file_get_contents($_POST['url']);
foreach($http_response_header as $header) {
if (!preg_match('/^Location:(.*)$/i', $header, $location)) {
$location = false;
}
}
header('Content-type: application/json');
if ($location) {
echo '{"hasRedirection": true, "location": "'.$location[1].'"}';
} else {
echo '{"hasRedirection": false}';
}
让我们调用“bypass.php”来保存这段代码的文件。顺便说一下,它的一个未经测试的代码,所以要小心。
现在,您可以使用您的AJAX调用来发现目标网址是否具有重定向,只需向bypass.php
发送发布请求,其中包含目标网址的发布字段url
即可。
对不起,但这需要完全在客户端完成。这是用于Stack Exchange站点的用户脚本。 – muru
杜,我明白了。我想不出任何其他方法,对不起。 –
哪里/什么触发重定向? – Slime
假设您上传了一张图片,例如http://cubeupload.com。使用该功能在SE帖子中嵌入图片的人员使用了现在重定向的URL:http://i.cubeupload.com/...。图片加载正常,但如果您尝试将其上传到imgur,上传者会抱怨,然后您必须在新标签中打开图片,获取最终的网址并使用该网址。 – muru