0Pricing
Web Scraping & Bots · Lesson

Rotating User Agents & Headers

Implement dynamic user agent and HTTP header rotation to mimic legitimate browser traffic and avoid detection.

Rotating User Agents & Headers is a free Web Scraping & Bots lesson on CoddyKit — lesson 1 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Web Scraping & Bots learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.

Avoiding Detection

When you scrape websites, they often try to detect if you're a human or a bot. If they think you're a bot, they might block you!

One common way websites spot bots is by looking at your HTTP headers. These headers contain information about your request.

Understanding HTTP Headers

Every time your browser (or a script) makes a request to a website, it sends HTTP headers. Think of them as metadata attached to your request.

  • User-Agent: Identifies your browser/OS.
  • Accept: What content types you prefer.
  • Referer: The previous page you were on.
  • Accept-Language: Your preferred language.

Your Digital Fingerprint

The User-Agent header is super important. It tells the web server what kind of client is making the request.

For example, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" identifies a Chrome browser on Windows.

Bots often use a generic User-Agent, or none at all, which is a big red flag!

Spotting Suspicious Patterns

If a website sees many requests from the same IP address, all using the exact same, generic User-Agent, it's easy to tell it's a bot.

Web servers can also analyze other headers. A real browser sends a rich set of headers, while a simple scraping script might send very few.

Building a User-Agent List

To mimic real browsers, you need a collection of diverse User-Agent strings. You can find these online!

  • Search for "list of user agents".
  • Extract them from browser requests.
  • Use libraries that maintain such lists.

Aim for a mix of different browsers (Chrome, Firefox, Safari) and operating systems.

Your First Custom Header

In Python, using the requests library, you can easily set custom headers for your requests. Let's start with a single User-Agent.

Try running this example:

import requests

url = "https://httpbin.org/headers"
headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
}

response = requests.get(url, headers=headers)
print(response.json()['headers']['User-Agent'])

Dynamic User-Agent Selection

To make your requests appear more natural, you should rotate your User-Agent. This means picking a different one for each request (or after a few requests).

We can use Python's random module to select a User-Agent from a list.

Try running this example:

import requests
import random

user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
]

url = "https://httpbin.org/headers"
random_ua = random.choice(user_agents)
headers = {"User-Agent": random_ua}

response = requests.get(url, headers=headers)
print(f"Used UA: {random_ua}")
print(response.json()['headers']['User-Agent'])

Beyond User-Agent

While User-Agent is crucial, real browsers send many other headers. Including a few more can make your bot look even more legitimate.

  • Accept-Language: e.g., en-US,en;q=0.9
  • Accept-Encoding: e.g., gzip, deflate, br
  • Connection: e.g., keep-alive

You can rotate these too, or pick a consistent set that matches your chosen User-Agent's browser type.

A More Complete Header Set

Let's combine random User-Agent selection with a few other common headers to create a more robust request.

This makes your scraping bot harder to distinguish from a regular browser.

Try running this example:

import requests
import random

user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
    "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1"
]

url = "https://httpbin.org/headers"
random_ua = random.choice(user_agents)

headers = {
    "User-Agent": random_ua,
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Connection": "keep-alive",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"
}

response = requests.get(url, headers=headers)
print(f"Used UA: {random_ua}")
print("Received headers:")
for key, value in response.json()['headers'].items():
    print(f"  {key}: {value}")

Header Rotation Check

You've learned how User-Agents and other HTTP headers are used in web requests. Rotating these can help avoid detection.

Which of the following are good reasons to rotate User-Agent and other HTTP headers when scraping?

Recap: Blending In

Great job! You've learned how critical HTTP headers, especially the User-Agent, are for web scraping.

  • Websites use headers to identify clients.
  • Consistent, generic headers flag bots.
  • Rotating User-Agents and adding other common headers makes your bot harder to detect.

This is a powerful technique for blending in. Next, we'll explore proxy management to hide your IP address!

Frequently asked questions

Is the “Rotating User Agents & Headers” lesson free?

Yes — the full text of “Rotating User Agents & Headers” is free to read here on the web, and the Web Scraping & Bots course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Web Scraping & Bots course, upgrade to CoddyKit PRO.

What will I learn in “Rotating User Agents & Headers”?

Implement dynamic user agent and HTTP header rotation to mimic legitimate browser traffic and avoid detection. You practise Web Scraping & Bots with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.

Do I need any experience to start Web Scraping & Bots?

No prior experience is required. Web Scraping & Bots on CoddyKit is structured for beginners through advanced learners; this is — lesson 1 of 4, so you can start here or from the beginning and move at your own pace.

How long does the “Rotating User Agents & Headers” lesson take?

Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.

Can I write and run code in this Web Scraping & Bots lesson?

Yes. Every Web Scraping & Bots lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.

All lessons in this course

  1. Rotating User Agents & Headers
  2. Proxy Management & IP Rotation
  3. CAPTCHA Solving Strategies
  4. Evading Browser Fingerprinting
← Back to Web Scraping & Bots