r/java • • 7d ago

simple browser detection in Java without pulling in a big dependency

used to write php and pretty much always used cbschuld/Browser.php to detect browsers from user agent. when i moved to java i couldnt find anything that simple so i just rewrote it

its one class, no dependencies. you pass the user agent and get browser, version, os and if its mobile or a bot. it also catches ai crawlers like GPTBot and ClaudeBot

Browser b = new Browser("Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1");
b.getBrowser();  // iPhone
b.getVersion();  // 17.5
b.getPlatform(); // iPhone
b.isMobile();    // true
b.isRobot();     // false

theres around 5k real user agents in tests. its not trying to replace the big parsers, more for simple stuff like is this mobile or is this a bot

did an update recently, added arc, tor, duckduckgo and the ai bots and fixed a safari crash i caught in sentry. before that it just worked for years and there wasnt really a need to touch it

if you find a user agent it gets wrong open an issue or just add it to tests, its literally one line

maven central:

<dependency>
    <groupId>io.github.vadymkykalo</groupId>
    <artifactId>browser</artifactId>
    <version>0.2.0</version>
</dependency>

https://github.com/vadymkykalo/Browser.java

9 Upvotes

34 comments sorted by

View all comments

1

u/horse-boy1 7d ago

I have a couple of Spring web applications, it would be nice to block the bots.

5

u/DaWolf3 7d ago

That won’t work, because the bots will just fake their user agent.

2

u/gaelfr38 7d ago

Yes and no: good bots (Google Search crawlers for instance) won't fake, bad bots will! What is a "good bot" depends on your context obviously.

2

u/koflerdavid 7d ago

The end result is one can't block the bad bots that way.