# ua-generator
A random user-agent generator for Python >= 3.6
# Features
- No external user-agent list. No downloads.
- Templates are hardcoded into the code.
- Platform and browser versions are based on real releases.
- Client Hints (Sec-CH-UA fields).
- Easy to integrate into HTTP libraries.
# Installing
```bash
pip3 install -U ua-generator
```
# Basic usage
```python
import ua_generator
ua = ua_generator.generate()
print(ua) # Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.2 Safari/604.1.38
```
# Customization
**It takes three different parameters to customize the user-agent.**
```python
device = ('desktop', 'mobile')
platform = ('windows', 'macos', 'ios', 'linux', 'android')
browser = ('chrome', 'edge', 'firefox', 'safari')
```
_All parameters are optional and multiple types can be specified using a tuple._
## Customized user-agent generation:
```python
import ua_generator
# Example 1:
ua = ua_generator.generate(device='desktop', browser=('chrome', 'edge'))
print(ua.text) # Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.145 Safari/537.36
print(ua.platform) # windows
print(ua.browser) # chrome
print(ua.ch.brands) # "Not A(Brand";v="99", "Chromium";v="108", "Google Chrome";v="108"
print(ua.ch.mobile) # ?0
print(ua.ch.platform) # "Windows"
print(ua.ch.platform_version) # "13.0.0"
print(ua.ch.bitness) # "64"
print(ua.ch.architecture) # "x86"
# Example 2:
ua = ua_generator.generate(platform=('ios', 'macos'), browser='chrome')
print(ua.text) # Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_2 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) CriOS/119.0.6045.176 Mobile/15E148 Safari/537.36
print(ua.platform) # ios
print(ua.browser) # chrome
print(ua.ch.brands) # "Not A(Brand";v="99", "Chromium";v="119", "Google Chrome";v="119"
print(ua.ch.mobile) # ?1
print(ua.ch.platform) # "iOS"
print(ua.ch.platform_version) # "17.0.2"
print(ua.ch.bitness) # "64"
print(ua.ch.architecture) # "arm"
```
# Headers
```python
ua = ua_generator.generate(browser=('chrome', 'edge'))
# This will return a dictionary containing the generated user-agent:
print(ua.headers.get())
{
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.43 Safari/537.36',
'sec-ch-ua': '"Not A(Brand";v="99", "Chromium";v="103", "Google Chrome";v="103"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"'
}
# Extending the "Client Hints" by a value of the "Accept-CH" header:
print(ua.headers.accept_ch('Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List'))
print(ua.headers.get())
{
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.94 Safari/537.36',
'sec-ch-ua': '"Not A(Brand";v="99", "Chromium";v="122", "Google Chrome";v="122"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"',
'sec-ch-ua-platform-version': '"14.1.0"',
'sec-ch-ua-full-version-list': '"Not A(Brand";v="99.0.0.0", "Chromium";v="122.0.6261.94", "Google Chrome";v="122.0.6261.94"'
}
```
## Integrating into the [requests](https://pypi.org/project/requests/):
```python
import requests
import ua_generator
ua = ua_generator.generate(browser=('chrome', 'edge'))
r = requests.get('https://httpbin.org/get', headers=ua.headers.get())
# or, usage with requests.Session():
ua = ua_generator.generate(browser=('chrome', 'edge'))
s = requests.Session()
s.headers.update(ua.headers.get())
r = s.get('https://httpbin.org/get')
```
## Integrating into the [httpx](https://pypi.org/project/httpx/):
```python
import httpx
import ua_generator
ua = ua_generator.generate(browser=('chrome', 'edge'))
r = httpx.get('https://httpbin.org/get', headers=ua.headers.get())
# or, usage with httpx.Client():
ua = ua_generator.generate(browser=('chrome', 'edge'))
c = httpx.Client(headers=ua.headers.get())
r = c.get('https://httpbin.org/get')
```
## Integrating into the [urllib](https://docs.python.org/3/library/urllib.request.html):
```python
import urllib.request
import ua_generator
ua = ua_generator.generate(browser=('chrome', 'edge'))
request = urllib.request.Request('https://httpbin.org/get', headers=ua.headers.get())
handler = urllib.request.urlopen(request)
response = handler.read().decode('utf-8')
```
# Options
You can define options using the "options" parameter for further customization.
## weighted_versions
To increase the probability of the latest versions being chosen. Default is `False`.
```python
import ua_generator
from ua_generator.options import Options
# Enabling weighted versions
options = Options(weighted_versions=True)
ua = ua_generator.generate(browser=('chrome', 'edge'), options=options)
```
## version_ranges
To choose only versions within specified ranges. Default is `None`.
```python
import ua_generator
from ua_generator.options import Options
from ua_generator.data.version import VersionRange
# Choosing only versions within specified ranges
options = Options(version_ranges={
'chrome': VersionRange(125, 129), # Choose version between 125 and 129
'edge': VersionRange(min_version=120), # Choose version 120 minimum
})
ua = ua_generator.generate(browser='chrome', options=options)
```
# Issues
You can create an issue [from here](https://github.com/iamdual/ua-generator/issues) if you are experiencing a problem.
# Author
Ekin Karadeniz (iamdual@icloud.com)
Raw data
{
"_id": null,
"home_page": "https://github.com/iamdual/ua-generator",
"name": "ua-generator",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": null,
"author": "Ekin Karadeniz",
"author_email": "iamdual@icloud.com",
"download_url": "https://files.pythonhosted.org/packages/1a/fd/caa15f47fd9a3c3faf132739f33299018edfb1c2be4266facf236a5be8e9/ua_generator-1.0.6.tar.gz",
"platform": null,
"description": "# ua-generator\n\nA random user-agent generator for Python >= 3.6\n\n# Features\n\n- No external user-agent list. No downloads.\n- Templates are hardcoded into the code.\n- Platform and browser versions are based on real releases.\n- Client Hints (Sec-CH-UA fields).\n- Easy to integrate into HTTP libraries.\n\n# Installing\n\n```bash\npip3 install -U ua-generator\n```\n\n# Basic usage\n\n```python\nimport ua_generator\n\nua = ua_generator.generate()\nprint(ua) # Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.2 Safari/604.1.38\n```\n\n# Customization\n\n**It takes three different parameters to customize the user-agent.**\n\n```python\ndevice = ('desktop', 'mobile')\nplatform = ('windows', 'macos', 'ios', 'linux', 'android')\nbrowser = ('chrome', 'edge', 'firefox', 'safari')\n```\n_All parameters are optional and multiple types can be specified using a tuple._\n## Customized user-agent generation:\n\n```python\nimport ua_generator\n\n# Example 1:\nua = ua_generator.generate(device='desktop', browser=('chrome', 'edge'))\nprint(ua.text) # Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.145 Safari/537.36\nprint(ua.platform) # windows\nprint(ua.browser) # chrome\nprint(ua.ch.brands) # \"Not A(Brand\";v=\"99\", \"Chromium\";v=\"108\", \"Google Chrome\";v=\"108\"\nprint(ua.ch.mobile) # ?0\nprint(ua.ch.platform) # \"Windows\"\nprint(ua.ch.platform_version) # \"13.0.0\"\nprint(ua.ch.bitness) # \"64\"\nprint(ua.ch.architecture) # \"x86\"\n\n# Example 2:\nua = ua_generator.generate(platform=('ios', 'macos'), browser='chrome')\nprint(ua.text) # Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_2 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) CriOS/119.0.6045.176 Mobile/15E148 Safari/537.36\nprint(ua.platform) # ios\nprint(ua.browser) # chrome\nprint(ua.ch.brands) # \"Not A(Brand\";v=\"99\", \"Chromium\";v=\"119\", \"Google Chrome\";v=\"119\"\nprint(ua.ch.mobile) # ?1\nprint(ua.ch.platform) # \"iOS\"\nprint(ua.ch.platform_version) # \"17.0.2\"\nprint(ua.ch.bitness) # \"64\"\nprint(ua.ch.architecture) # \"arm\"\n```\n\n# Headers\n\n```python\nua = ua_generator.generate(browser=('chrome', 'edge'))\n\n# This will return a dictionary containing the generated user-agent:\nprint(ua.headers.get())\n{\n 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.43 Safari/537.36',\n 'sec-ch-ua': '\"Not A(Brand\";v=\"99\", \"Chromium\";v=\"103\", \"Google Chrome\";v=\"103\"',\n 'sec-ch-ua-mobile': '?0',\n 'sec-ch-ua-platform': '\"macOS\"'\n}\n\n# Extending the \"Client Hints\" by a value of the \"Accept-CH\" header:\nprint(ua.headers.accept_ch('Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List'))\nprint(ua.headers.get())\n{\n 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.94 Safari/537.36',\n 'sec-ch-ua': '\"Not A(Brand\";v=\"99\", \"Chromium\";v=\"122\", \"Google Chrome\";v=\"122\"',\n 'sec-ch-ua-mobile': '?0',\n 'sec-ch-ua-platform': '\"macOS\"',\n 'sec-ch-ua-platform-version': '\"14.1.0\"',\n 'sec-ch-ua-full-version-list': '\"Not A(Brand\";v=\"99.0.0.0\", \"Chromium\";v=\"122.0.6261.94\", \"Google Chrome\";v=\"122.0.6261.94\"'\n}\n```\n\n## Integrating into the [requests](https://pypi.org/project/requests/):\n\n```python\nimport requests\nimport ua_generator\n\nua = ua_generator.generate(browser=('chrome', 'edge'))\nr = requests.get('https://httpbin.org/get', headers=ua.headers.get())\n\n# or, usage with requests.Session():\nua = ua_generator.generate(browser=('chrome', 'edge'))\ns = requests.Session()\ns.headers.update(ua.headers.get())\nr = s.get('https://httpbin.org/get')\n```\n\n## Integrating into the [httpx](https://pypi.org/project/httpx/):\n\n```python\nimport httpx\nimport ua_generator\n\nua = ua_generator.generate(browser=('chrome', 'edge'))\nr = httpx.get('https://httpbin.org/get', headers=ua.headers.get())\n\n# or, usage with httpx.Client():\nua = ua_generator.generate(browser=('chrome', 'edge'))\nc = httpx.Client(headers=ua.headers.get())\nr = c.get('https://httpbin.org/get')\n```\n\n## Integrating into the [urllib](https://docs.python.org/3/library/urllib.request.html):\n\n```python\nimport urllib.request\nimport ua_generator\n\nua = ua_generator.generate(browser=('chrome', 'edge'))\nrequest = urllib.request.Request('https://httpbin.org/get', headers=ua.headers.get())\nhandler = urllib.request.urlopen(request)\nresponse = handler.read().decode('utf-8')\n```\n\n# Options\n\nYou can define options using the \"options\" parameter for further customization.\n\n## weighted_versions\nTo increase the probability of the latest versions being chosen. Default is `False`.\n\n```python\nimport ua_generator\nfrom ua_generator.options import Options\n\n# Enabling weighted versions\noptions = Options(weighted_versions=True)\nua = ua_generator.generate(browser=('chrome', 'edge'), options=options)\n```\n\n## version_ranges\nTo choose only versions within specified ranges. Default is `None`.\n\n```python\nimport ua_generator\nfrom ua_generator.options import Options\nfrom ua_generator.data.version import VersionRange\n\n# Choosing only versions within specified ranges\noptions = Options(version_ranges={\n 'chrome': VersionRange(125, 129), # Choose version between 125 and 129\n 'edge': VersionRange(min_version=120), # Choose version 120 minimum\n})\nua = ua_generator.generate(browser='chrome', options=options)\n```\n\n# Issues\n\nYou can create an issue [from here](https://github.com/iamdual/ua-generator/issues) if you are experiencing a problem.\n\n# Author\n\nEkin Karadeniz (iamdual@icloud.com)\n",
"bugtrack_url": null,
"license": null,
"summary": "A random user-agent generator",
"version": "1.0.6",
"project_urls": {
"Bug Tracker": "https://github.com/iamdual/ua-generator/issues",
"Homepage": "https://github.com/iamdual/ua-generator"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "b8b8538cfc525d65a35680568cdf7674a82f8ed28f1374ef794ad009d8b08453",
"md5": "5b83a580cbbcada67dc8699bc5ba68a8",
"sha256": "e5f36e701ac2f2a74215e72a4e62eab56421ccda269b37df572cf87f2434b9a0"
},
"downloads": -1,
"filename": "ua_generator-1.0.6-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5b83a580cbbcada67dc8699bc5ba68a8",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 27788,
"upload_time": "2024-10-20T16:12:06",
"upload_time_iso_8601": "2024-10-20T16:12:06.241771Z",
"url": "https://files.pythonhosted.org/packages/b8/b8/538cfc525d65a35680568cdf7674a82f8ed28f1374ef794ad009d8b08453/ua_generator-1.0.6-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1afdcaa15f47fd9a3c3faf132739f33299018edfb1c2be4266facf236a5be8e9",
"md5": "539eb65f9dc925e05a7d6f5b0aa968a0",
"sha256": "53be0d5b7566ad049a148f0c54e97dd1da0f080688e2c8ae09067be250b5139a"
},
"downloads": -1,
"filename": "ua_generator-1.0.6.tar.gz",
"has_sig": false,
"md5_digest": "539eb65f9dc925e05a7d6f5b0aa968a0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 23666,
"upload_time": "2024-10-20T16:12:07",
"upload_time_iso_8601": "2024-10-20T16:12:07.864638Z",
"url": "https://files.pythonhosted.org/packages/1a/fd/caa15f47fd9a3c3faf132739f33299018edfb1c2be4266facf236a5be8e9/ua_generator-1.0.6.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-20 16:12:07",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "iamdual",
"github_project": "ua-generator",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "ua-generator"
}