User Agent Parser
Analyze and parse user agent strings to extract detailed information about browsers, engines, operating systems, CPU architecture, and devices.
- Free Online Tools
- /
- User Agent Parser
User Agent String
Your current user agent is automatically loaded
Browser
-
-
-
Engine
-
-
Operating System
-
-
Device
-
-
-
CPU
-
Top 10 Most Popular User Agents (2025)
Browser | OS | Device | Action |
---|
What is a User Agent?
A User Agent is a string of text that web browsers and applications send to web servers to identify themselves. It contains crucial information about the browser name, version, operating system, device type, and rendering engine being used. This identification helps web servers deliver optimized content for specific browsers and devices.
The User Agent string follows a semi-standardized format but can vary significantly between browsers. It typically includes:
- Browser name and version (e.g., Chrome/120.0.0.0)
- Operating system information (e.g., Windows NT 10.0)
- Rendering engine details (e.g., Gecko, WebKit, Blink)
- Device information for mobile devices
- Additional compatibility tokens
Understanding User Agent strings is essential for web development, browser compatibility testing, analytics, and providing optimal user experiences across different platforms.
What are the Most Popular User Agents?
The most popular User Agents in 2024 are primarily from Chrome, Safari, Firefox, and Edge browsers across desktop and mobile platforms. Here are the key trends:
- Chrome on Windows - The most common desktop combination, typically Windows 10/11 with Chrome 120+
- Safari on iPhone - Dominant mobile browser on iOS devices, usually the latest iOS versions
- Chrome on Android - Leading Android browser across various device manufacturers
- Safari on macOS - Popular among Mac users, especially developers and designers
- Edge on Windows - Growing market share as Microsoft's default browser
- Firefox - Maintains steady usage among privacy-conscious users
Mobile User Agents now account for over 60% of web traffic globally, with Chrome and Safari dominating. Desktop usage remains strong for productivity and professional applications. The diversity of User Agents continues to grow with new devices like smart TVs, gaming consoles, and IoT devices accessing web content.
How Can I Change My User Agent?
Changing your User Agent can be useful for testing, development, or accessing content optimized for different browsers. Here are several methods:
Browser Developer Tools
Most modern browsers allow temporary User Agent changes:
- Chrome/Edge: Open DevTools (F12) → Network Conditions → User Agent → Uncheck "Use browser default"
- Firefox: Open DevTools (F12) → Responsive Design Mode → Settings → Custom User Agent
- Safari: Enable Develop menu → User Agent → Select or enter custom
Browser Extensions
Popular extensions for permanent User Agent switching:
- User-Agent Switcher and Manager
- User-Agent Switcher for Chrome
- Random User-Agent
Command Line Browsers
# Chrome with custom User Agent
chrome --user-agent="Custom User Agent String"
# cURL with custom User Agent
curl -H "User-Agent: Custom User Agent" https://testingbot.com
Note: Changing your User Agent may affect website functionality as some sites deliver different content based on the detected browser. Always test thoroughly when using custom User Agents in production environments.
How to Get User Agent in Different Programming Languages
JavaScript Browser & Node.js
// Browser JavaScript
const userAgent = navigator.userAgent;
console.log('User Agent:', userAgent);
// Node.js - Getting client User Agent in Express
const express = require('express');
const app = express();
app.get('/', (req, res) => {
const userAgent = req.headers['user-agent'];
res.json({ userAgent });
});
// Setting custom User Agent in Node.js fetch
fetch('https://api.testingbot.com', {
headers: {
'User-Agent': 'MyApp/1.0.0'
}
});
Python Flask & Requests
# Flask - Getting client User Agent
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def index():
user_agent = request.headers.get('User-Agent')
return {'user_agent': user_agent}
# Using requests library with custom User Agent
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0'
}
response = requests.get('https://testingbot.com', headers=headers)
# Getting User Agent from HTTP request
from http.server import BaseHTTPRequestHandler
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
user_agent = self.headers.get('User-Agent')
print(f"User Agent: {user_agent}")
PHP Server & cURL
<?php
// Getting client User Agent
$userAgent = $_SERVER['HTTP_USER_AGENT'];
echo "User Agent: " . $userAgent;
// Parse User Agent with get_browser()
$browser = get_browser($userAgent, true);
print_r($browser);
// Setting custom User Agent with cURL
$ch = curl_init('https://testingbot.com');
curl_setopt($ch, CURLOPT_USERAGENT, 'MyBot/1.0');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
// Using file_get_contents with custom User Agent
$options = [
'http' => [
'header' => "User-Agent: MyApp/1.0\r\n"
]
];
$context = stream_context_create($options);
$content = file_get_contents('https://testingbot.com', false, $context);
?>
Ruby Rails & Net::HTTP
# Rails - Getting client User Agent
class ApplicationController < ActionController::Base
def index
user_agent = request.user_agent
render json: { user_agent: user_agent }
end
end
# Using Net::HTTP with custom User Agent
require 'net/http'
require 'uri'
uri = URI('https://testingbot.com')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['User-Agent'] = 'MyRubyApp/1.0'
response = http.request(request)
# Using HTTParty gem
require 'httparty'
response = HTTParty.get('https://testingbot.com',
headers: { 'User-Agent' => 'MyApp/1.0' }
)
Java Servlet & HttpClient
// Servlet - Getting client User Agent
import javax.servlet.http.HttpServletRequest;
public class UserAgentServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
String userAgent = request.getHeader("User-Agent");
System.out.println("User Agent: " + userAgent);
}
}
// Using HttpURLConnection
URL url = new URL("https://testingbot.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("User-Agent", "MyJavaApp/1.0");
// Using Apache HttpClient
CloseableHttpClient client = HttpClients.custom()
.setUserAgent("MyApp/1.0")
.build();
HttpGet request = new HttpGet("https://testingbot.com");
CloseableHttpResponse response = client.execute(request);
// Spring Boot
@RestController
public class UserAgentController {
@GetMapping("/")
public String getUserAgent(@RequestHeader("User-Agent") String userAgent) {
return userAgent;
}
}
C# ASP.NET & HttpClient
// ASP.NET Core - Getting client User Agent
public class HomeController : Controller
{
public IActionResult Index()
{
string userAgent = Request.Headers["User-Agent"].ToString();
return Json(new { userAgent });
}
}
// Using HttpClient with custom User Agent
using var client = new HttpClient();
client.DefaultRequestHeaders.UserAgent.ParseAdd("MyApp/1.0");
var response = await client.GetAsync("https://testingbot.com");
// WebClient (legacy)
using var webClient = new WebClient();
webClient.Headers.Add("User-Agent", "MyApp/1.0");
string result = webClient.DownloadString("https://testingbot.com");
// ASP.NET Core Middleware
public class UserAgentMiddleware
{
public async Task InvokeAsync(HttpContext context)
{
var userAgent = context.Request.Headers["User-Agent"].ToString();
Console.WriteLine($"User Agent: {userAgent}");
await _next(context);
}
}
Go net/http
package main
import (
"fmt"
"net/http"
)
// HTTP Server - Getting client User Agent
func handler(w http.ResponseWriter, r *http.Request) {
userAgent := r.Header.Get("User-Agent")
fmt.Fprintf(w, "User Agent: %s", userAgent)
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
// HTTP Client - Setting custom User Agent
client := &http.Client{}
req, _ := http.NewRequest("GET", "https://testingbot.com", nil)
req.Header.Set("User-Agent", "MyGoApp/1.0")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
Perl CGI & LWP
#!/usr/bin/perl
use strict;
use warnings;
# CGI - Getting client User Agent
use CGI;
my $q = CGI->new;
my $user_agent = $q->user_agent();
print "User Agent: $user_agent\n";
# Using LWP::UserAgent
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->agent("MyPerlBot/1.0");
my $response = $ua->get('https://testingbot.com');
if ($response->is_success) {
print $response->decoded_content;
}
# Using HTTP::Tiny
use HTTP::Tiny;
my $http = HTTP::Tiny->new(
agent => 'MyPerlApp/1.0'
);
my $response = $http->get('https://testingbot.com');
Objective-C iOS & macOS
// Getting system User Agent in iOS/macOS
#import <UIKit/UIKit.h>
// Method 1: Using UIWebView (deprecated)
UIWebView *webView = [[UIWebView alloc] init];
NSString *userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
NSLog(@"User Agent: %@", userAgent);
// Method 2: Using WKWebView
#import <WebKit/WebKit.h>
WKWebView *webView = [[WKWebView alloc] init];
[webView evaluateJavaScript:@"navigator.userAgent"
completionHandler:^(NSString *userAgent, NSError *error) {
NSLog(@"User Agent: %@", userAgent);
}];
// Setting custom User Agent with NSURLRequest
NSURL *url = [NSURL URLWithString:@"https://testingbot.com"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setValue:@"MyIOSApp/1.0" forHTTPHeaderField:@"User-Agent"];
// Using NSURLSession
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {
// Handle response
}];
[task resume];
Swift iOS & macOS
import UIKit
import WebKit
// Getting User Agent with WKWebView
let webView = WKWebView()
webView.evaluateJavaScript("navigator.userAgent") { (result, error) in
if let userAgent = result as? String {
print("User Agent: \(userAgent)")
}
}
// Setting custom User Agent with URLRequest
var request = URLRequest(url: URL(string: "https://testingbot.com")!)
request.setValue("MySwiftApp/1.0", forHTTPHeaderField: "User-Agent")
// Using URLSession
let task = URLSession.shared.dataTask(with: request) { data, response, error in
// Handle response
}
task.resume()
// SwiftUI with custom User Agent
struct WebView: UIViewRepresentable {
func makeUIView(context: Context) -> WKWebView {
let webView = WKWebView()
webView.customUserAgent = "MyCustomApp/1.0"
return webView
}
}
Rust Actix-web & Reqwest
// Actix-web - Getting client User Agent
use actix_web::{web, App, HttpRequest, HttpServer, Result};
async fn index(req: HttpRequest) -> Result<String> {
let user_agent = req.headers()
.get("user-agent")
.and_then(|h| h.to_str().ok())
.unwrap_or("Unknown");
Ok(format!("User Agent: {}", user_agent))
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().route("/", web::get().to(index)))
.bind("127.0.0.1:8080")?
.run()
.await
}
// Using Reqwest with custom User Agent
use reqwest;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::builder()
.user_agent("MyRustApp/1.0")
.build()?;
let response = client
.get("https://testingbot.com")
.send()
.await?;
Ok(())
}