Name | pyreqwest-impersonate JSON |
Version |
0.4.1
JSON |
| download |
home_page | None |
Summary | HTTP client that can impersonate web browsers, mimicking their headers and `TLS/JA3/JA4/HTTP2` fingerprints |
upload_time | 2024-05-02 16:12:23 |
maintainer | None |
docs_url | None |
author | deedy5 |
requires_python | >=3.8 |
license | MIT License |
keywords |
python
request
impersonate
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
![Python >= 3.8](https://img.shields.io/badge/python->=3.8-red.svg) [![](https://badgen.net/github/release/deedy5/pyreqwest-impersonate)](https://github.com/deedy5/pyreqwest-impersonate/releases) [![](https://badge.fury.io/py/pyreqwest_impersonate.svg)](https://pypi.org/project/pyreqwest_impersonate) [![Downloads](https://static.pepy.tech/badge/pyreqwest_impersonate/week)](https://pepy.tech/project/pyreqwest_impersonate) [![CI](https://github.com/deedy5/pyreqwest-impersonate/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/deedy5/pyreqwest-impersonate/actions/workflows/CI.yml)
# Pyreqwest_impersonate
The fastest python HTTP client that can impersonate web browsers by mimicking their headers and `TLS/JA3/JA4/HTTP2` fingerprints.</br>
Binding to the Rust [reqwest_impersonate](https://github.com/gngpp/reqwest-impersonate) library.</br>
Provides precompiled wheels:
- [x] Linux|musl: `amd64`, `aarch64`.
- [x] Windows: `amd64`.
- [x] MacOS: `amd64`, `aarch64`.
## Table of Contents
- [Installation](#installation)
- [Key Features](#key-features)
- [Usage](#usage)
- [I. Client](#i-client)
- [II. AsyncClient](#ii-asyncclient)
## Installation
```python
pip install -U pyreqwest_impersonate
```
## Key Features
- Impersonate: The Client offers an `impersonate` option, enabling it to mimic web browsers by replicating their headers and TLS/JA3/JA4/HTTP2 fingerprints.
- Thread-safe: The Client is designed to be thread-safe, allowing it to be safely used in multithreaded environments.
- Automatic Character Encoding Detection: The encoding is taken from the "Content-Type" header, but if not specified, "UTF-8". If encoding does not match the content, the package automatically detects and uses the correct encoding to decode the text.
- Small Size: The compiled library is about 5.8MB in size.
- High Performance: The library is designed for a large number of threads, uses all processors, and releases the GIL. All operations like accessing headers, decoding text, or parsing JSON are executed in Rust.
![](https://github.com/deedy5/pyreqwest_impersonate/blob/main/benchmark.jpg?raw=true)
## Usage
### I. Client
HTTP client that can impersonate web browsers.
```python
class Client:
"""Initializes an HTTP client that can impersonate web browsers.
Args:
auth (tuple, optional): A tuple containing the username and password for basic authentication. Default is None.
auth_bearer (str, optional): Bearer token for authentication. Default is None.
params (dict, optional): Default query parameters to include in all requests. Default is None.
headers (dict, optional): Default headers to send with requests. If `impersonate` is set, this will be ignored.
timeout (float, optional): HTTP request timeout in seconds. Default is 30.
cookie_store (bool, optional): Enable a persistent cookie store. Received cookies will be preserved and included
in additional requests. Default is True.
referer (bool, optional): Enable or disable automatic setting of the `Referer` header. Default is True.
proxy (str, optional): Proxy URL for HTTP requests. Example: "socks5://127.0.0.1:9150". Default is None.
impersonate (str, optional): Entity to impersonate. Example: "chrome_123". Default is None.
Chrome: "chrome_99","chrome_100","chrome_101","chrome_104","chrome_105","chrome_106","chrome_108",
"chrome_107","chrome_109","chrome_114","chrome_116","chrome_117","chrome_118","chrome_119",
"chrome_120","chrome_123"
Safari: "safari_ios_17_2","safari_12","safari_15_3","safari_15_5","safari_15_6_1","safari_16","safari_16_5",
"safari_17_2_1","safari17_4_1"
OkHttp: "okhttp_3_9","okhttp_3_11","okhttp_3_13","okhttp_3_14","okhttp_4_9","okhttp_4_10","okhttp_5"
Edge: "edge_99","edge_101","edge_122"
follow_redirects (bool, optional): Whether to follow redirects. Default is True.
max_redirects (int, optional): Maximum redirects to follow. Default 20. Applies if `follow_redirects` is True.
verify (bool, optional): Verify SSL certificates. Default is False.
http1 (bool, optional): Use only HTTP/1.1. Default is None.
http2 (bool, optional): Use only HTTP/2. Default is None.
"""
```
#### Client Methods
The `Client` class provides a set of methods for making HTTP requests: `get`, `head`, `options`, `delete`, `post`, `put`, `patch`, each of which internally utilizes the `request()` method for execution. The parameters for these methods closely resemble those in `httpx`.
```python
def get(url, params=None, headers=None, auth=None, auth_bearer=None, timeout=None):
"""Performs a GET request to the specified URL.
Args:
url (str): The URL to which the request will be made.
params (Optional[Dict[str, str]]): A map of query parameters to append to the URL. Default is None.
headers (Optional[Dict[str, str]]): A map of HTTP headers to send with the request. Default is None.
auth (Optional[Tuple[str, Optional[str]]]): A tuple containing the username and an optional password
for basic authentication. Default is None.
auth_bearer (Optional[str]): A string representing the bearer token for bearer token authentication. Default is None.
timeout (Optional[float]): The timeout for the request in seconds. Default is 30.
"""
```
```python
def post(url, params=None, headers=None, content=None, data=None, files=None, auth=None, auth_bearer=None, timeout=None):
"""Performs a POST request to the specified URL.
Args:
url (str): The URL to which the request will be made.
params (Optional[Dict[str, str]]): A map of query parameters to append to the URL. Default is None.
headers (Optional[Dict[str, str]]): A map of HTTP headers to send with the request. Default is None.
content (Optional[bytes]): The content to send in the request body as bytes. Default is None.
data (Optional[Dict[str, str]]): The form data to send in the request body. Default is None.
files (Optional[Dict[str, str]]): A map of file fields to file paths to be sent as multipart/form-data. Default is None.
auth (Optional[Tuple[str, Optional[str]]]): A tuple containing the username and an optional password
for basic authentication. Default is None.
auth_bearer (Optional[str]): A string representing the bearer token for bearer token authentication. Default is None.
timeout (Optional[float]): The timeout for the request in seconds. Default is 30.
"""
```
#### Example
```python
import pyreqwest_impersonate as pri
client = pri.Client(impersonate="chrome_123")
# get request
resp = client.get("https://tls.peet.ws/api/all")
print(resp.json())
# post request
data = {"key1": "value1", "key2": "value2"}
auth = ("user", "password")
resp = client.post(url="https://httpbin.org/anything", data=data, auth=auth)
print(resp.content)
print(resp.cookies)
print(resp.headers)
print(resp.json())
print(resp.status_code)
print(resp.text)
print(resp.url)
# You can also use convenience functions that use a default Client instance under the hood:
# pri.get() | pri.head() | pri.options() | pri.delete() | pri.post | pri.patch | pri.put
# These functions can accept the `impersonate` parameter:
resp = pri.get("https://httpbin.org/anything", impersonate="chrome_123")
```
### II. AsyncClient
TODO
Raw data
{
"_id": null,
"home_page": null,
"name": "pyreqwest-impersonate",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "python, request, impersonate",
"author": "deedy5",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/82/2d/178b08c869a9598d61b4741e436aa116d125e9ebd87fd243085da8989ee2/pyreqwest_impersonate-0.4.1.tar.gz",
"platform": null,
"description": "![Python >= 3.8](https://img.shields.io/badge/python->=3.8-red.svg) [![](https://badgen.net/github/release/deedy5/pyreqwest-impersonate)](https://github.com/deedy5/pyreqwest-impersonate/releases) [![](https://badge.fury.io/py/pyreqwest_impersonate.svg)](https://pypi.org/project/pyreqwest_impersonate) [![Downloads](https://static.pepy.tech/badge/pyreqwest_impersonate/week)](https://pepy.tech/project/pyreqwest_impersonate) [![CI](https://github.com/deedy5/pyreqwest-impersonate/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/deedy5/pyreqwest-impersonate/actions/workflows/CI.yml)\n# Pyreqwest_impersonate\n\nThe fastest python HTTP client that can impersonate web browsers by mimicking their headers and `TLS/JA3/JA4/HTTP2` fingerprints.</br>\nBinding to the Rust [reqwest_impersonate](https://github.com/gngpp/reqwest-impersonate) library.</br>\n\nProvides precompiled wheels:\n- [x] Linux|musl: `amd64`, `aarch64`.\n- [x] Windows: `amd64`.\n- [x] MacOS: `amd64`, `aarch64`.\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Key Features](#key-features)\n- [Usage](#usage)\n - [I. Client](#i-client)\n - [II. AsyncClient](#ii-asyncclient)\n\n## Installation\n\n```python\npip install -U pyreqwest_impersonate\n```\n\n## Key Features\n- Impersonate: The Client offers an `impersonate` option, enabling it to mimic web browsers by replicating their headers and TLS/JA3/JA4/HTTP2 fingerprints.\n- Thread-safe: The Client is designed to be thread-safe, allowing it to be safely used in multithreaded environments.\n- Automatic Character Encoding Detection: The encoding is taken from the \"Content-Type\" header, but if not specified, \"UTF-8\". If encoding does not match the content, the package automatically detects and uses the correct encoding to decode the text.\n- Small Size: The compiled library is about 5.8MB in size.\n- High Performance: The library is designed for a large number of threads, uses all processors, and releases the GIL. All operations like accessing headers, decoding text, or parsing JSON are executed in Rust.\n\n![](https://github.com/deedy5/pyreqwest_impersonate/blob/main/benchmark.jpg?raw=true)\n\n## Usage\n### I. Client\n\nHTTP client that can impersonate web browsers.\n```python\nclass Client:\n \"\"\"Initializes an HTTP client that can impersonate web browsers.\n \n Args:\n auth (tuple, optional): A tuple containing the username and password for basic authentication. Default is None.\n auth_bearer (str, optional): Bearer token for authentication. Default is None.\n params (dict, optional): Default query parameters to include in all requests. Default is None.\n headers (dict, optional): Default headers to send with requests. If `impersonate` is set, this will be ignored.\n timeout (float, optional): HTTP request timeout in seconds. Default is 30.\n cookie_store (bool, optional): Enable a persistent cookie store. Received cookies will be preserved and included \n in additional requests. Default is True.\n referer (bool, optional): Enable or disable automatic setting of the `Referer` header. Default is True.\n proxy (str, optional): Proxy URL for HTTP requests. Example: \"socks5://127.0.0.1:9150\". Default is None.\n impersonate (str, optional): Entity to impersonate. Example: \"chrome_123\". Default is None.\n Chrome: \"chrome_99\",\"chrome_100\",\"chrome_101\",\"chrome_104\",\"chrome_105\",\"chrome_106\",\"chrome_108\", \n \"chrome_107\",\"chrome_109\",\"chrome_114\",\"chrome_116\",\"chrome_117\",\"chrome_118\",\"chrome_119\", \n \"chrome_120\",\"chrome_123\"\n Safari: \"safari_ios_17_2\",\"safari_12\",\"safari_15_3\",\"safari_15_5\",\"safari_15_6_1\",\"safari_16\",\"safari_16_5\",\n \"safari_17_2_1\",\"safari17_4_1\"\n OkHttp: \"okhttp_3_9\",\"okhttp_3_11\",\"okhttp_3_13\",\"okhttp_3_14\",\"okhttp_4_9\",\"okhttp_4_10\",\"okhttp_5\"\n Edge: \"edge_99\",\"edge_101\",\"edge_122\"\n follow_redirects (bool, optional): Whether to follow redirects. Default is True.\n max_redirects (int, optional): Maximum redirects to follow. Default 20. Applies if `follow_redirects` is True.\n verify (bool, optional): Verify SSL certificates. Default is False.\n http1 (bool, optional): Use only HTTP/1.1. Default is None.\n http2 (bool, optional): Use only HTTP/2. Default is None.\n \n \"\"\"\n```\n\n#### Client Methods\n\nThe `Client` class provides a set of methods for making HTTP requests: `get`, `head`, `options`, `delete`, `post`, `put`, `patch`, each of which internally utilizes the `request()` method for execution. The parameters for these methods closely resemble those in `httpx`.\n```python\ndef get(url, params=None, headers=None, auth=None, auth_bearer=None, timeout=None):\n \"\"\"Performs a GET request to the specified URL.\n\n Args:\n url (str): The URL to which the request will be made.\n params (Optional[Dict[str, str]]): A map of query parameters to append to the URL. Default is None.\n headers (Optional[Dict[str, str]]): A map of HTTP headers to send with the request. Default is None.\n auth (Optional[Tuple[str, Optional[str]]]): A tuple containing the username and an optional password \n for basic authentication. Default is None.\n auth_bearer (Optional[str]): A string representing the bearer token for bearer token authentication. Default is None.\n timeout (Optional[float]): The timeout for the request in seconds. Default is 30.\n\n \"\"\"\n```\n```python\ndef post(url, params=None, headers=None, content=None, data=None, files=None, auth=None, auth_bearer=None, timeout=None):\n \"\"\"Performs a POST request to the specified URL.\n\n Args:\n url (str): The URL to which the request will be made.\n params (Optional[Dict[str, str]]): A map of query parameters to append to the URL. Default is None.\n headers (Optional[Dict[str, str]]): A map of HTTP headers to send with the request. Default is None.\n content (Optional[bytes]): The content to send in the request body as bytes. Default is None.\n data (Optional[Dict[str, str]]): The form data to send in the request body. Default is None.\n files (Optional[Dict[str, str]]): A map of file fields to file paths to be sent as multipart/form-data. Default is None.\n auth (Optional[Tuple[str, Optional[str]]]): A tuple containing the username and an optional password \n for basic authentication. Default is None.\n auth_bearer (Optional[str]): A string representing the bearer token for bearer token authentication. Default is None.\n timeout (Optional[float]): The timeout for the request in seconds. Default is 30.\n\n \"\"\"\n```\n\n#### Example\n\n```python\nimport pyreqwest_impersonate as pri\n\nclient = pri.Client(impersonate=\"chrome_123\")\n\n# get request\nresp = client.get(\"https://tls.peet.ws/api/all\")\nprint(resp.json())\n\n# post request\ndata = {\"key1\": \"value1\", \"key2\": \"value2\"}\nauth = (\"user\", \"password\")\nresp = client.post(url=\"https://httpbin.org/anything\", data=data, auth=auth)\nprint(resp.content)\nprint(resp.cookies)\nprint(resp.headers)\nprint(resp.json())\nprint(resp.status_code)\nprint(resp.text)\nprint(resp.url)\n\n# You can also use convenience functions that use a default Client instance under the hood:\n# pri.get() | pri.head() | pri.options() | pri.delete() | pri.post | pri.patch | pri.put\n# These functions can accept the `impersonate` parameter:\nresp = pri.get(\"https://httpbin.org/anything\", impersonate=\"chrome_123\") \n```\n### II. AsyncClient\n\nTODO\n\n\n",
"bugtrack_url": null,
"license": "MIT License",
"summary": "HTTP client that can impersonate web browsers, mimicking their headers and `TLS/JA3/JA4/HTTP2` fingerprints",
"version": "0.4.1",
"project_urls": null,
"split_keywords": [
"python",
" request",
" impersonate"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "d36de2b4411feef938ccda6b57dae8631a4066d24c28bba693d309487b205ab1",
"md5": "6d190692f80a5ba555c66a779c87584b",
"sha256": "147c7cb9aea15c01a0d5dd300ed099c63dfd19377556be7a38630d884f5e5ad7"
},
"downloads": -1,
"filename": "pyreqwest_impersonate-0.4.1-cp38-abi3-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "6d190692f80a5ba555c66a779c87584b",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 2643553,
"upload_time": "2024-05-02T16:12:21",
"upload_time_iso_8601": "2024-05-02T16:12:21.839481Z",
"url": "https://files.pythonhosted.org/packages/d3/6d/e2b4411feef938ccda6b57dae8631a4066d24c28bba693d309487b205ab1/pyreqwest_impersonate-0.4.1-cp38-abi3-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d54e2e4bd56253a623d41362fb7b51d96cc194d6d7763a43780a59706332e669",
"md5": "b9eac74342f6b26c607725e8e5966f40",
"sha256": "6c920c93863e429e6b2612993a15ac088ec0984863a9d89f6ae4ba912b8b7a51"
},
"downloads": -1,
"filename": "pyreqwest_impersonate-0.4.1-cp38-abi3-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "b9eac74342f6b26c607725e8e5966f40",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 2480933,
"upload_time": "2024-05-02T16:12:19",
"upload_time_iso_8601": "2024-05-02T16:12:19.137528Z",
"url": "https://files.pythonhosted.org/packages/d5/4e/2e4bd56253a623d41362fb7b51d96cc194d6d7763a43780a59706332e669/pyreqwest_impersonate-0.4.1-cp38-abi3-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b1a9baaa390c6945a05165a9f179f3059910a565295fdc3ea624fc2541cc22a0",
"md5": "aafb41abf97bde853def17c3373a41e1",
"sha256": "be0233a261ad824a8535398f89bdeb64223d101b8018c5daa7e6889a51f32ba4"
},
"downloads": -1,
"filename": "pyreqwest_impersonate-0.4.1-cp38-abi3-manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "aafb41abf97bde853def17c3373a41e1",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 2566962,
"upload_time": "2024-05-02T16:12:10",
"upload_time_iso_8601": "2024-05-02T16:12:10.240242Z",
"url": "https://files.pythonhosted.org/packages/b1/a9/baaa390c6945a05165a9f179f3059910a565295fdc3ea624fc2541cc22a0/pyreqwest_impersonate-0.4.1-cp38-abi3-manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "786b7f840530080c45d5740f5b6fb84aeb0de49b8c287daca25e5e361d107457",
"md5": "682198e8199feed94d95a1dbe1d4a630",
"sha256": "d468a55f331e44d76859e743ffb3c8e63ffc021bff0fd32114e8ab26e931d56e"
},
"downloads": -1,
"filename": "pyreqwest_impersonate-0.4.1-cp38-abi3-manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "682198e8199feed94d95a1dbe1d4a630",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 2748469,
"upload_time": "2024-05-02T16:12:14",
"upload_time_iso_8601": "2024-05-02T16:12:14.837266Z",
"url": "https://files.pythonhosted.org/packages/78/6b/7f840530080c45d5740f5b6fb84aeb0de49b8c287daca25e5e361d107457/pyreqwest_impersonate-0.4.1-cp38-abi3-manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "64b0b2ddee4e6d9d1276222fe19d0fc18c47f46276ba54f66b0cae7d43d50dc4",
"md5": "c477966d334cc14f4759fcaabbb1a539",
"sha256": "a9bab69c834eda5fb9ad40fd44ac64f1d20ec07fffa8e49134cdffc3befd8bb6"
},
"downloads": -1,
"filename": "pyreqwest_impersonate-0.4.1-cp38-abi3-musllinux_1_2_aarch64.whl",
"has_sig": false,
"md5_digest": "c477966d334cc14f4759fcaabbb1a539",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 2563448,
"upload_time": "2024-05-02T16:12:12",
"upload_time_iso_8601": "2024-05-02T16:12:12.647475Z",
"url": "https://files.pythonhosted.org/packages/64/b0/b2ddee4e6d9d1276222fe19d0fc18c47f46276ba54f66b0cae7d43d50dc4/pyreqwest_impersonate-0.4.1-cp38-abi3-musllinux_1_2_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e78d748db8de7be0d263be43e4c5706577b588267dd2999ea3e590c69805f13d",
"md5": "afd00a01f70121b1d57a5c3777991b8b",
"sha256": "c334da9901c8ea8579176731112c3302db0c4d29801351e34d9cfb89ced4a525"
},
"downloads": -1,
"filename": "pyreqwest_impersonate-0.4.1-cp38-abi3-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "afd00a01f70121b1d57a5c3777991b8b",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 2743852,
"upload_time": "2024-05-02T16:12:16",
"upload_time_iso_8601": "2024-05-02T16:12:16.998114Z",
"url": "https://files.pythonhosted.org/packages/e7/8d/748db8de7be0d263be43e4c5706577b588267dd2999ea3e590c69805f13d/pyreqwest_impersonate-0.4.1-cp38-abi3-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "08c6932e0591ab72300680342301b03bd6aa6c1a9167eb91404cf69e6c172cf2",
"md5": "8b87fdd7480be1b722db4b1ec1d2b074",
"sha256": "d6a03aa143ea31429cace652c5a87cdde60796f0759397c8dfc1dc9f65b7f934"
},
"downloads": -1,
"filename": "pyreqwest_impersonate-0.4.1-cp38-abi3-win_amd64.whl",
"has_sig": false,
"md5_digest": "8b87fdd7480be1b722db4b1ec1d2b074",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 2587724,
"upload_time": "2024-05-02T16:12:25",
"upload_time_iso_8601": "2024-05-02T16:12:25.508504Z",
"url": "https://files.pythonhosted.org/packages/08/c6/932e0591ab72300680342301b03bd6aa6c1a9167eb91404cf69e6c172cf2/pyreqwest_impersonate-0.4.1-cp38-abi3-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "822d178b08c869a9598d61b4741e436aa116d125e9ebd87fd243085da8989ee2",
"md5": "73c8cacff7c30ecf00f49ea706c71cac",
"sha256": "efaa06d1b55da4308f6fb05564b45676bb580374cba4742a528b8624e5e31908"
},
"downloads": -1,
"filename": "pyreqwest_impersonate-0.4.1.tar.gz",
"has_sig": false,
"md5_digest": "73c8cacff7c30ecf00f49ea706c71cac",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 102484,
"upload_time": "2024-05-02T16:12:23",
"upload_time_iso_8601": "2024-05-02T16:12:23.428492Z",
"url": "https://files.pythonhosted.org/packages/82/2d/178b08c869a9598d61b4741e436aa116d125e9ebd87fd243085da8989ee2/pyreqwest_impersonate-0.4.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-02 16:12:23",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "pyreqwest-impersonate"
}