gpt4 book ai didi

javascript - 当用户代理是curl时,从浏览器返回不同的响应

转载 作者:太空宇宙 更新时间:2023-11-04 15:57:27 24 4
gpt4 key购买 nike

当用户代理使用 JavaScript 进行 curl 时,如何从浏览器返回不同的响应?

例如:

if user agent is curl
return /feed.json
else
return index.html

这是我的代码,但是当我运行命令 curl http://example.com 时,它只返回 html 响应

<script>
function browserRedirect(){
var userAgent = navigator.userAgent.toLowerCase();
console.log(userAgent);
var curl = userAgent.match(/curl|PycURL/i) == "curl";
var chrome = userAgent.match(/chrome/i) == "chrome";

// Check that the user agent is curl
if(curl) {
window.location.href = "/feed.json"
}
}

browserRedirect()
</script>

最佳答案

当您尝试在无 Javascript 的环境(curl)上使用基于 Javascript 的重定向时,您使用的代码将无法工作,即使您这样做,curl 也不会遵循重定向,因为curl 只是按原样返回 HTTP header 和响应,重定向只是一个 HTTP header 。

您应该根据用户代理输出不同的 MIME 类型(在 HTTP header 中)和不同的输出内容,而不是使用重定向。

例如,如果默认情况下您的页面返回 HTML(因此是 text/html MIME 类型),如果收到的用户代理 header 与您正在使用的“curl”正则表达式匹配,则您应该发送“Content-type” : application/json” MIME 类型的 HTTP header ,并输出 feed.json 文件中的内容,而不是页面的默认 HTML 输出,并在那里终止页面的执行。因此,此代码应放置在服务器端代码的最开头。

顺便说一句,作为对 Javascript 代码的观察,不考虑此上下文,IF block 永远不会运行,因为 match() 返回一个字符串匹配数组(而不是单个字符串),或者如果未找到匹配项,则为 null。如果是针对支持 Javascript 的标准浏览器的基于用户代理的重定向,您应该将代码更改为类似 if(navigator.userAgent.match(/safari/i)){//Code转到此处}(在此示例中使用 Safari 作为匹配浏览器)。另请注意,不需要调用 toLowercase(),因为您已经通过在正则表达式末尾使用“i”标志进行了不区分大小写的搜索。

关于javascript - 当用户代理是curl时,从浏览器返回不同的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42572820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com