What Does Your User Agent Say About You?


A user agent is a computer program representing a person, for example, a browser in a Web context.

Besides a browser, a user agent could be a bot scraping webpages, a download manager, or another app accessing the Web. Along with each request they make to the server, browsers include a self-identifying User-Agent HTTP header called a user agent (UA) string. This string often identifies the browser, its version number, and its host operating system.

Spam bots, download managers, and some browsers often send a fake UA string to announce themselves as a different client. This is known as user agent spoofing.

The user agent string can be accessed with JavaScript on the client side using the navigator.userAgent property.

A typical user agent string looks like this: "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0".


User Agent String

Browser Data

User Agent Requests In Python

Earl Hamilton
• Wednesday, 11 November, 2020
• 12 min read

An user agent is a string that a browser or application sends to each website you visit. Web servers use this data to assess the capabilities of your computer, optimizing a page’s performance and display.



Ignore the X-Amzn-Trace-Id as it is not sent by PythonRequests, instead generated by Amazon Load Balancer used by Hatpin. Any website could tell that this came from PythonRequests, and may already have measures in place to block such user agents.

As before lets ignore the headers that start with X- as they are generated by Amazon Load Balancer used by Hatpin, and not from what we sent to the server Although we had set an user agent, the other headers that we sent are different from what the real Chrome browser would have sent.

Let’s add these missing headers and make the request look like it came from a real Chrome browser If you are making many requests for web scraping a website, it is a good idea to randomize.

In order to make your requests from web scrapers look as if they came from a real browser: They have a huge database of the combination of headers that are sent by specific versions of a browser on different operating systems and websites.

Have a Referee header with the previous page you visited or Google, to make it look real There is no point rotating the headers if you are logging in to a website or keeping session cookies as the site can tell it is you without even looking at headers We advise you to use proxy servers when making many requests and use a different IP for each browser or the other way Rotating user agents can help you from getting blocked by websites that use intermediate levels of bot detection, but advanced anti-scraping services has a large array of tools and data at their disposal and can see past your user agents and IP address.

example header examples requests agent using python

We are not responsible for how it is used and assume no liability for any detrimental usage of the source code. The tutorials only help illustrate the technique of programming web scrapers for popular internet websites.

We are not obligated to provide any support for the code, however, if you add your questions in the comments section, we may periodically address them. I found out about the Requests library, and I like it.

But I think this approach is misguided as it may see your crawlers make thousands of requests from very rarely used user agents. Thankfully, the majority of system administrators completely ignore the intricacies of the scent ‘Accept’ headers and simply check if browsers are sending something plausible.

Some developers are wise enough to save their precious data from any such crawler or scraper. In this blog, we will look at how this basically happens and how can we write a smart yet easy solution for such a problem using just a few lines of code in your favorite programming language ‘ Python ’.

A Sergeant is nothing but a simple set of strings that any application or any browser sends in order to access the webpage. So now the question arises what basically are these strings which help the server to differentiate between a browser and a python script.

python example point code requests using

Now the question arises, “Why does information like operating system and software versions are required?” Well, the answer is quite simple to optimize the webpage as per your hardware and software.

The root of the answer is that the person asking needs to have a JavaScript interpreter to get what they are after. What I have found is I am able to get all the information I wanted on a website in Jason before it was interpreted by JavaScript.

This has saved me a ton of time in what would be parsing HTML hoping each webpage is in the same format. So when you get a response from a website using requests really look at the HTML/text because you might find the JavaScript JSON in the footer ready to be parsed.

I had a similar issue, but I was unable to use the Sergeant class inside the fake_useragent module. This solution still gave me a random user agent however there is the possibility that the data structure at the endpoint could change.

You need to create a header with a proper formatted User agent String, it server to communicate client-server. I found this module very simple to use, in one line of code it randomly generates an User agent string.


This is how, I have been using a random user agent from a list of nearly 1000 fake user agents By the end of this blog, you will be able to perform web scraping using Python.

It is an easy-to-use library with a lot of features ranging from passing parameters in URLs to sending custom headers and SSL Verification. In this tutorial, you will learn how to use this library to send simple HTTP requests in Python.

You start by importing the module and then making the request. An added plus is that you can also extract many features like the status code for example (of the request).

Do note that the req.headers property will return a case-insensitive dictionary of the response headers. We can also check if the response obtained is a well-formed HTTP redirect (or not) that could have been processed automatically using the req.is_redirect property.

This will return True or False based on the response obtained. You can also get the time elapsed between sending the request and getting back a response using another property.


You can pass this encoding with which to decode this text using the req.encoding property like we discussed earlier. Do keep in mind that you will have to pass stream=True in the request to get the raw response as per need.

But, some files that you download from the internet using the Requests' module may have a huge size, correct? Well, in such cases, it will not be wise to load the whole response or file in the memory at once.

But, it is recommended that you download a file in pieces or chunks using the iter_content(chunk_size = 1, decode_Unicode = False) method. So, this method iterates over the response data in chunk_size number of bytes at once.

And when stream=True on the request, this method will avoid reading the whole file into memory at once for just the large responses. But, when set to an integer value, chunk_size determines the number of bytes that should be read into the memory at once.

View Upcoming Batches For Python Certification Course Now! So let’s download the following image of a forest on Apixaban using the Requests' module we learned about.


This means that the “Received a Chunk” message should print four times in the terminal. This is particularly helpful when you are searching for a webpage for some results like a tutorial or a specific image.

For example, the following code will download the whole Wikipedia page on Nanotechnology and save it on your PC. As previously mentioned, you can access the cookies and headers that the server sends back to you using req.cookies and req.headers.

This can be helpful when you want to, let’s say, set a custom user agent for your request. Similarly, you can also send your own cookies to a server using a dict passed to the cookies parameter.

For example, it will persist cookie data across all requests made using the same session. This means that the underlying TCP connection will be reused for all the requests made to the same host.

The concepts discussed in this tutorial should help you make basic requests to a server by passing specific headers, cookies, or query strings. Now, you should also be able to automatically download music files and wallpapers from different websites once you have figured out a pattern in the URLs.


There are several modules that try to achieve the same as BeautifulSoup: Query and HTMLParser, you can read more about them here. The Python code was automatically generated from the GET Request Like Mozilla Firefox.

Add the Remain Google Chrome Extension to your browser to send requests to the localhost and servers on your local network.

Other Articles You Might Be Interested In

01: Asp Net Core User Agent
02: Custom User Agent Internet Explorer 11
03: Custom User Agent String Internet Explorer
1 -
2 -
3 -
4 -
5 -
6 -
7 -
8 -