如何使用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'因此不是 允许访问。

+0

哪里/什么触发重定向? – Slime

+0

假设您上传了一张图片,例如http://cubeupload.com。使用该功能在SE帖子中嵌入图片的人员使用了现在重定向的URL:http://i.cubeupload.com/...。图片加载正常,但如果您尝试将其上传到imgur,上传者会抱怨,然后您必须在新标签中打开图片,获取最终的网址并使用该网址。 – muru

那么,由于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即可。

+0

对不起,但这需要完全在客户端完成。这是用于Stack Exchange站点的用户脚本。 – muru

+0

杜,我明白了。我想不出任何其他方法,对不起。 –