Is there any way to do this? I'm trying to send a GET request to a website, but I want to customize my UserAgent. Is there any way to do this in pure HTML and JavaScript? I'd like it to all execute locally.
-
Possible duplicate of [Mocking a useragent in javascript?](http://stackoverflow.com/questions/1307013/mocking-a-useragent-in-javascript) – APAD1 Apr 23 '14 at 15:18
5 Answers
This is working for me.
Object.defineProperty(navigator, 'userAgent', {
get: function () { return 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0)'; }
});
It is an updated version of code4coffee's answer as Object.prototype.__defineGetter__()
is deprecated: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__

- 7,421
- 7
- 39
- 47

- 698
- 6
- 14
-
3This is not working for me right now in Windows Google Chrome Version 78.0.3904.108 (Official Build) (64-bit) – Ryan Dec 16 '19 at 17:53
-
You can programmatically do this in Javascript (this example mocks up 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"
});
You can then view the changes in the console via (and of course check these via Javascript):
navigator.userAgent
navigator.appName
Here's an example of a test that should work (using 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);
});
});

- 677
- 4
- 13
2022
You are not allowed to modify the following headers, according to Fetch WHATWG spec.
And in 2022 all the evergreen browsers have implemented this requirement.
`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`
As well as headers, starting with proxy-
or sec-
.
These are forbidden so the user agent remains in full control over them.

- 3,154
- 1
- 31
- 38
If you are using a XMLHttpRequest you can set a custom Request Header like:
var xhr = new XMLHttpRequest(...);
xhr.setRequestHeader("User-Agent","test");

- 761
- 7
- 19
-
2I'm sorry but Chromium complains: Refused to set unsafe header "User-Agent – SeDav Apr 23 '14 at 15:35
-
1
You will never change a user Agent in HTML, html is the message not messenger.
Indeed you can do it with a javascript code, but it's dangerous if you ever deploy it in production.
It's far safer to use an agent switcher:
https://addons.mozilla.org/fr/firefox/addon/user-agent-switcher/
https://chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg

- 24
- 4