pyreqwest-impersonate


Namepyreqwest-impersonate JSON
Version 0.4.1 PyPI version JSON
download
home_pageNone
SummaryHTTP client that can impersonate web browsers, mimicking their headers and `TLS/JA3/JA4/HTTP2` fingerprints
upload_time2024-05-02 16:12:23
maintainerNone
docs_urlNone
authordeedy5
requires_python>=3.8
licenseMIT 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"
}
        
Elapsed time: 0.29269s