在 HTML 或 JavaScript 中设置自定义 userAgent

问题描述 投票:0回答:5

有什么办法可以做到这一点吗?我正在尝试向网站发送 GET 请求,但我想自定义我的 UserAgent。有没有办法用纯 HTML 和 JavaScript 来做到这一点?我希望它全部在本地执行。

javascript html get user-agent
5个回答
19
投票

这对我有用。

Object.defineProperty(navigator, 'userAgent', {
    get: function () { return 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0)'; }
});

这是 code4coffee 答案的更新版本,因为

Object.prototype.__defineGetter__()
已弃用:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__


10
投票

您可以在 Javascript 中以编程方式执行此操作(此示例模拟 Firefox):

navigator.__defineGetter__('userAgent', function () {
    return "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0)"
});
navigator.__defineGetter__('appName', function () {
    return "Netscape"
});

然后您可以通过以下方式查看控制台中的更改(当然还可以通过 Javascript 检查这些更改):

navigator.userAgent
navigator.appName

这是一个应该有效的测试示例(使用 Jasmine):

describe("isUserAgentInternetExplorer", function () {
    it("should return false for Firefox", function () {
        navigator.__defineGetter__('userAgent', function () {
            return "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0)"
        });
        navigator.__defineGetter__('appName', function () {
            return "Netscape"
        });
        //your code here...
        expect(...your code here...).toEqual(false);
    });
});

5
投票

2022

根据 Fetch WHATWG 规范,您不得修改以下标头。
到 2022 年,所有常青浏览器都已实现此要求。

`Accept-Charset`
`Accept-Encoding`
`Access-Control-Request-Headers`
`Access-Control-Request-Method`
`Connection`
`Content-Length`
`Cookie`
`Cookie2`
`Date`
`DNT`
`Expect`
`Host`
`Keep-Alive`
`Origin`
`Referer`
`TE`
`Trailer`
`Transfer-Encoding`
`Upgrade`
`Via`

以及标题,以

proxy-
sec-
开头。

These are forbidden so the user agent remains in full control over them.

2024

User-Agent
标头不再被禁止

根据规范,不再禁止 User-Agent 标头 — 请参阅禁止标头名称列表(这是在 Firefox 43 中实现的) — 现在可以在 Fetch Headers 对象中设置,或者使用 XMLHttpRequest 的 setRequestHeader() 方法。但是,Chrome 会默默地从 Fetch 请求中删除标头(请参阅 Chromium bug 571722


-1
投票

如果您使用 XMLHttpRequest,您可以设置自定义请求标头,例如:

var xhr = new XMLHttpRequest(...);
xhr.setRequestHeader("User-Agent","test");

-5
投票

您永远不会更改 HTML 中的用户代理,html 是消息而不是信使。

确实,您可以使用 javascript 代码来完成此操作,但如果您将其部署到生产环境中,则会很危险。

使用代理切换器要安全得多:

https://addons.mozilla.org/fr/firefox/addon/user-agent-switcher/

https://chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg

© www.soinside.com 2019 - 2024. All rights reserved.