primp


Nameprimp JSON
Version 0.9.3 PyPI version JSON
download
home_pageNone
SummaryHTTP client that can impersonate web browsers, mimicking their headers and `TLS/JA3/JA4/HTTP2` fingerprints
upload_time2025-01-03 12:12:35
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/primp.svg)](https://pypi.org/project/primp) [![Downloads](https://static.pepy.tech/badge/primp/week)](https://pepy.tech/project/primp) [![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)
# 🪞PRIMP
**🪞PRIMP** = **P**ython **R**equests **IMP**ersonate

The fastest python HTTP client that can impersonate web browsers.</br>
Provides precompiled wheels:</br>
  * 🐧 linux: `amd64`, `aarch64`, `armv7` (⚠️aarch64 and armv7 builds are `manylinux_2_34` compatible - `ubuntu>=22.04`, `debian>=12`);</br>
  * 🐧 musllinux: `amd64`, `aarch64`;</br>
  * 🪟 windows: `amd64`;</br>
  * 🍏 macos: `amd64`, `aarch64`.</br>

## Table of Contents

- [Installation](#installation)
- [Benchmark](#benchmark)
- [Usage](#usage)
  - [I. Client](#i-client)
    - [Client methods](#client-methods)
    - [Response object](#response-object)
    - [Devices](#devices)
    - [Examples](#examples)
  - [II. AsyncClient](#ii-asyncclient)

## Installation

```python
pip install -U primp
```

## Benchmark

![](https://github.com/deedy5/primp/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.
        cookies (dict, optional): - An optional map of cookies to send with requests as the `Cookie` header.
        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_124". Default is None.
            Chrome: "chrome_100","chrome_101","chrome_104","chrome_105","chrome_106","chrome_107","chrome_108",
                "chrome_109","chrome_114","chrome_116","chrome_117","chrome_118","chrome_119","chrome_120",
                "chrome_123","chrome_124","chrome_126","chrome_127","chrome_128","chrome_129","chrome_130",
                "chrome_131"
            Safari: "safari_ios_16.5","safari_ios_17.2","safari_ios_17.4.1","safari_ios_18.1.1",
                "safari_15.3","safari_15.5","safari_15.6.1","safari_16","safari_16.5","safari_17.0",
                "safari_17.2.1","safari_17.4.1","safari_17.5","safari_18","safari_18.2","safari_ipad_18"
            OkHttp: "okhttp_3.9","okhttp_3.11","okhttp_3.13","okhttp_3.14","okhttp_4.9","okhttp_4.10","okhttp_5"
            Edge: "edge_101","edge_122","edge_127","edge_131"
            Firefox: "firefox_109","firefox_133"
        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 True.
        ca_cert_file (str, optional): Path to CA certificate store. Default is None.
        https_only`: Restrict the Client to be used with HTTPS only requests. Default is `false`.
        http2_only`: If true - use only HTTP/2; if false - use only HTTP/1. Default is `false`.

    """
```

#### 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: str,
    params: Optional[Dict[str, str]] = None,
    headers: Optional[Dict[str, str]] = None,
    cookies: Optional[Dict[str, str]] = None,
    auth: Optional[Tuple[str, Optional[str]]] = None,
    auth_bearer: Optional[str] = None,
    timeout: Optional[float] = 30,
):
    """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.
        cookies (Optional[Dict[str, str]]): - An optional map of cookies to send with requests as the `Cookie` header.
        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: str,
    params: Optional[Dict[str, str]] = None,
    headers: Optional[Dict[str, str]] = None,
    cookies: Optional[Dict[str, str]] = None,
    content: Optional[bytes] = None,
    data: Optional[Dict[str, str]] = None,
    json: Any = None,
    files: Optional[Dict[str, bytes]] = None,
    auth: Optional[Tuple[str, Optional[str]]] = None,
    auth_bearer: Optional[str] = None,
    timeout: Optional[float] = 30,
):
    """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.
        cookies (Optional[Dict[str, str]]): - An optional map of cookies to send with requests as the `Cookie` header.
        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.
        json (Any): A JSON serializable object to send in the request body. Default is None.
        files (Optional[Dict[str, bytes]]): A map of file fields to file contents 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.

    """
```
#### Response object
```python
resp.content
resp.cookies
resp.encoding
resp.headers
resp.json()
resp.status_code
resp.text
resp.text_markdown  # html is converted to markdown text
resp.text_plain  # html is converted to plain text
resp.text_rich  # html is converted to rich text
resp.url
```

#### Devices

- Chrome: `chrome_100`,`chrome_101`,`chrome_104`,`chrome_105`,`chrome_106`,`chrome_107`,`chrome_108`,`chrome_109`,`chrome_114`,`chrome_116`,`chrome_117`,`chrome_118`,`chrome_119`,`chrome_120`,`chrome_123`,`chrome_124`,`chrome_126`,`chrome_127`,`chrome_128`,`chrome_129`,`chrome_130`,`chrome_131`

- Edge: `edge_101`,`edge_122`,`edge_127`, `edge_131`

- Safari: `safari_ios_17.2`,`safari_ios_17.4.1`,`safari_ios_16.5`,`safari_ios_18.1.1`, `safari_15.3`,`safari_15.5`,`safari_15.6.1`,`safari_16`,`safari_16.5`,`safari_17.0`,`safari_17.2.1`,`safari_17.4.1`,`safari_17.5`,`safari_18`,`safari_18.2`, `safari_ipad_18`

- OkHttp: `okhttp_3.9`,`okhttp_3.11`,`okhttp_3.13`,`okhttp_3.14`,`okhttp_4.9`,`okhttp_4.10`,`okhttp_5`

- Firefox: `firefox_109`, `firefox_117`, `firefox_133`

#### Examples

```python
import primp

# Impersonate
client = primp.Client(impersonate="chrome_131")  # chrome_131

# GET request
resp = client.get("https://tls.peet.ws/api/all")
print(resp.json())

# GET request with passing params and setting timeout
params = {"param1": "value1", "param2": "value2"}
resp = client.post(url="https://httpbin.org/anything", params=params, timeout=10)
print(r.text)

# POST Binary Request Data
content = b"some_data"
resp = client.post(url="https://httpbin.org/anything", content=content)
print(r.text)

# POST Form Encoded Data
data = {"key1": "value1", "key2": "value2"}
resp = client.post(url="https://httpbin.org/anything", data=data)
print(r.text)

# POST JSON Encoded Data
json = {"key1": "value1", "key2": "value2"}
resp = client.post(url="https://httpbin.org/anything", json=json)
print(r.text)

# POST Multipart-Encoded Files
files = {'file1': open('file1.txt'), 'file2': open('file2.txt')}
r = client.post("https://httpbin.org/post", files=files)
print(r.text)

# Authentication using user/password
auth = ("user", "password")
resp = client.post(url="https://httpbin.org/anything", auth=auth)
print(r.text)

# Authentication using auth bearer
auth_bearer = "bearerXXXXXXXXXXXXXXXXXXXX"
resp = client.post(url="https://httpbin.org/anything", auth_bearer=auth_bearer)
print(r.text)

# Using proxy or env var PRIMP_PROXY
resp = primp.Client(proxy="http://127.0.0.1:8080").get("https://tls.peet.ws/api/all")
print(resp.json())
export PRIMP_PROXY="socks5://127.0.0.1:1080"
resp = primp.Client().get("https://tls.peet.ws/api/all")
print(resp.json())

# Using custom CA certificate store: env var PRIMP_CA_BUNDLE
#(Primp built with the Mozilla's latest trusted root certificates, so maybe it's not necessary)
resp = primp.Client(ca_cert_file="/cert/cacert.pem").get("https://tls.peet.ws/api/all")
print(resp.json())
resp = primp.Client(ca_cert_file=certifi.where()).get("https://tls.peet.ws/api/all")
print(resp.json())
export PRIMP_CA_BUNDLE="/home/user/Downloads/cert.pem"
resp = primp.Client().get("https://tls.peet.ws/api/all")
print(resp.json())

# You can also use convenience functions that use a default Client instance under the hood:
# primp.get() | primp.head() | primp.options() | primp.delete() | primp.post() | primp.patch() | primp.put()
# These functions can accept the `impersonate` parameter:
resp = primp.get("https://httpbin.org/anything", impersonate="chrome_131")
print(r.text)
```

### II. AsyncClient

TODO


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "primp",
    "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/96/f5/f90fa2259e92aec568e3d953d32ef3cb70d9f975b344b5f625d6b6763bc9/primp-0.9.3.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/primp.svg)](https://pypi.org/project/primp) [![Downloads](https://static.pepy.tech/badge/primp/week)](https://pepy.tech/project/primp) [![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# \ud83e\ude9ePRIMP\n**\ud83e\ude9ePRIMP** = **P**ython **R**equests **IMP**ersonate\n\nThe fastest python HTTP client that can impersonate web browsers.</br>\nProvides precompiled wheels:</br>\n  * \ud83d\udc27 linux: `amd64`, `aarch64`, `armv7` (\u26a0\ufe0faarch64 and armv7 builds are `manylinux_2_34` compatible - `ubuntu>=22.04`, `debian>=12`);</br>\n  * \ud83d\udc27 musllinux: `amd64`, `aarch64`;</br>\n  * \ud83e\ude9f windows: `amd64`;</br>\n  * \ud83c\udf4f macos: `amd64`, `aarch64`.</br>\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Benchmark](#benchmark)\n- [Usage](#usage)\n  - [I. Client](#i-client)\n    - [Client methods](#client-methods)\n    - [Response object](#response-object)\n    - [Devices](#devices)\n    - [Examples](#examples)\n  - [II. AsyncClient](#ii-asyncclient)\n\n## Installation\n\n```python\npip install -U primp\n```\n\n## Benchmark\n\n![](https://github.com/deedy5/primp/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        cookies (dict, optional): - An optional map of cookies to send with requests as the `Cookie` header.\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_124\". Default is None.\n            Chrome: \"chrome_100\",\"chrome_101\",\"chrome_104\",\"chrome_105\",\"chrome_106\",\"chrome_107\",\"chrome_108\",\n                \"chrome_109\",\"chrome_114\",\"chrome_116\",\"chrome_117\",\"chrome_118\",\"chrome_119\",\"chrome_120\",\n                \"chrome_123\",\"chrome_124\",\"chrome_126\",\"chrome_127\",\"chrome_128\",\"chrome_129\",\"chrome_130\",\n                \"chrome_131\"\n            Safari: \"safari_ios_16.5\",\"safari_ios_17.2\",\"safari_ios_17.4.1\",\"safari_ios_18.1.1\",\n                \"safari_15.3\",\"safari_15.5\",\"safari_15.6.1\",\"safari_16\",\"safari_16.5\",\"safari_17.0\",\n                \"safari_17.2.1\",\"safari_17.4.1\",\"safari_17.5\",\"safari_18\",\"safari_18.2\",\"safari_ipad_18\"\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_101\",\"edge_122\",\"edge_127\",\"edge_131\"\n            Firefox: \"firefox_109\",\"firefox_133\"\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 True.\n        ca_cert_file (str, optional): Path to CA certificate store. Default is None.\n        https_only`: Restrict the Client to be used with HTTPS only requests. Default is `false`.\n        http2_only`: If true - use only HTTP/2; if false - use only HTTP/1. Default is `false`.\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(\n    url: str,\n    params: Optional[Dict[str, str]] = None,\n    headers: Optional[Dict[str, str]] = None,\n    cookies: Optional[Dict[str, str]] = None,\n    auth: Optional[Tuple[str, Optional[str]]] = None,\n    auth_bearer: Optional[str] = None,\n    timeout: Optional[float] = 30,\n):\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        cookies (Optional[Dict[str, str]]): - An optional map of cookies to send with requests as the `Cookie` header.\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(\n    url: str,\n    params: Optional[Dict[str, str]] = None,\n    headers: Optional[Dict[str, str]] = None,\n    cookies: Optional[Dict[str, str]] = None,\n    content: Optional[bytes] = None,\n    data: Optional[Dict[str, str]] = None,\n    json: Any = None,\n    files: Optional[Dict[str, bytes]] = None,\n    auth: Optional[Tuple[str, Optional[str]]] = None,\n    auth_bearer: Optional[str] = None,\n    timeout: Optional[float] = 30,\n):\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        cookies (Optional[Dict[str, str]]): - An optional map of cookies to send with requests as the `Cookie` header.\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        json (Any): A JSON serializable object to send in the request body. Default is None.\n        files (Optional[Dict[str, bytes]]): A map of file fields to file contents 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#### Response object\n```python\nresp.content\nresp.cookies\nresp.encoding\nresp.headers\nresp.json()\nresp.status_code\nresp.text\nresp.text_markdown  # html is converted to markdown text\nresp.text_plain  # html is converted to plain text\nresp.text_rich  # html is converted to rich text\nresp.url\n```\n\n#### Devices\n\n- Chrome: `chrome_100`\uff0c`chrome_101`\uff0c`chrome_104`\uff0c`chrome_105`\uff0c`chrome_106`\uff0c`chrome_107`\uff0c`chrome_108`\uff0c`chrome_109`\uff0c`chrome_114`\uff0c`chrome_116`\uff0c`chrome_117`\uff0c`chrome_118`\uff0c`chrome_119`\uff0c`chrome_120`\uff0c`chrome_123`\uff0c`chrome_124`\uff0c`chrome_126`\uff0c`chrome_127`\uff0c`chrome_128`\uff0c`chrome_129`\uff0c`chrome_130`\uff0c`chrome_131`\n\n- Edge: `edge_101`\uff0c`edge_122`\uff0c`edge_127`, `edge_131`\n\n- Safari: `safari_ios_17.2`\uff0c`safari_ios_17.4.1`\uff0c`safari_ios_16.5`\uff0c`safari_ios_18.1.1`, `safari_15.3`\uff0c`safari_15.5`\uff0c`safari_15.6.1`\uff0c`safari_16`\uff0c`safari_16.5`\uff0c`safari_17.0`\uff0c`safari_17.2.1`\uff0c`safari_17.4.1`\uff0c`safari_17.5`\uff0c`safari_18`\uff0c`safari_18.2`, `safari_ipad_18`\n\n- OkHttp: `okhttp_3.9`\uff0c`okhttp_3.11`\uff0c`okhttp_3.13`\uff0c`okhttp_3.14`\uff0c`okhttp_4.9`\uff0c`okhttp_4.10`\uff0c`okhttp_5`\n\n- Firefox: `firefox_109`, `firefox_117`, `firefox_133`\n\n#### Examples\n\n```python\nimport primp\n\n# Impersonate\nclient = primp.Client(impersonate=\"chrome_131\")  # chrome_131\n\n# GET request\nresp = client.get(\"https://tls.peet.ws/api/all\")\nprint(resp.json())\n\n# GET request with passing params and setting timeout\nparams = {\"param1\": \"value1\", \"param2\": \"value2\"}\nresp = client.post(url=\"https://httpbin.org/anything\", params=params, timeout=10)\nprint(r.text)\n\n# POST Binary Request Data\ncontent = b\"some_data\"\nresp = client.post(url=\"https://httpbin.org/anything\", content=content)\nprint(r.text)\n\n# POST Form Encoded Data\ndata = {\"key1\": \"value1\", \"key2\": \"value2\"}\nresp = client.post(url=\"https://httpbin.org/anything\", data=data)\nprint(r.text)\n\n# POST JSON Encoded Data\njson = {\"key1\": \"value1\", \"key2\": \"value2\"}\nresp = client.post(url=\"https://httpbin.org/anything\", json=json)\nprint(r.text)\n\n# POST Multipart-Encoded Files\nfiles = {'file1': open('file1.txt'), 'file2': open('file2.txt')}\nr = client.post(\"https://httpbin.org/post\", files=files)\nprint(r.text)\n\n# Authentication using user/password\nauth = (\"user\", \"password\")\nresp = client.post(url=\"https://httpbin.org/anything\", auth=auth)\nprint(r.text)\n\n# Authentication using auth bearer\nauth_bearer = \"bearerXXXXXXXXXXXXXXXXXXXX\"\nresp = client.post(url=\"https://httpbin.org/anything\", auth_bearer=auth_bearer)\nprint(r.text)\n\n# Using proxy or env var PRIMP_PROXY\nresp = primp.Client(proxy=\"http://127.0.0.1:8080\").get(\"https://tls.peet.ws/api/all\")\nprint(resp.json())\nexport PRIMP_PROXY=\"socks5://127.0.0.1:1080\"\nresp = primp.Client().get(\"https://tls.peet.ws/api/all\")\nprint(resp.json())\n\n# Using custom CA certificate store: env var PRIMP_CA_BUNDLE\n#(Primp built with the Mozilla's latest trusted root certificates, so maybe it's not necessary)\nresp = primp.Client(ca_cert_file=\"/cert/cacert.pem\").get(\"https://tls.peet.ws/api/all\")\nprint(resp.json())\nresp = primp.Client(ca_cert_file=certifi.where()).get(\"https://tls.peet.ws/api/all\")\nprint(resp.json())\nexport PRIMP_CA_BUNDLE=\"/home/user/Downloads/cert.pem\"\nresp = primp.Client().get(\"https://tls.peet.ws/api/all\")\nprint(resp.json())\n\n# You can also use convenience functions that use a default Client instance under the hood:\n# primp.get() | primp.head() | primp.options() | primp.delete() | primp.post() | primp.patch() | primp.put()\n# These functions can accept the `impersonate` parameter:\nresp = primp.get(\"https://httpbin.org/anything\", impersonate=\"chrome_131\")\nprint(r.text)\n```\n\n### II. AsyncClient\n\nTODO\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.9.3",
    "project_urls": null,
    "split_keywords": [
        "python",
        " request",
        " impersonate"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1f394bad1358ff38744f7b4a67a73ff83dd52609e6438dab40492590cdfa9433",
                "md5": "cc4112d030ec2cc7af60b994c6720103",
                "sha256": "30d5c4f03abeab8fd307ddf4c615d8d093367f3be1a5299078f811982db7cb6f"
            },
            "downloads": -1,
            "filename": "primp-0.9.3-cp38-abi3-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "cc4112d030ec2cc7af60b994c6720103",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 3158368,
            "upload_time": "2025-01-03T12:12:25",
            "upload_time_iso_8601": "2025-01-03T12:12:25.311378Z",
            "url": "https://files.pythonhosted.org/packages/1f/39/4bad1358ff38744f7b4a67a73ff83dd52609e6438dab40492590cdfa9433/primp-0.9.3-cp38-abi3-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2a2267e3d9831fbe193f0e1c35d7e707f8d091c56c174d875019e928745a0a9c",
                "md5": "fb0fa93334bb7eb39a94c9e5b22969bb",
                "sha256": "3e3bff0bcffdf746b68486db24ac6dc6db2f202f048f82e0303385ef76dc5c1e"
            },
            "downloads": -1,
            "filename": "primp-0.9.3-cp38-abi3-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "fb0fa93334bb7eb39a94c9e5b22969bb",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 2916698,
            "upload_time": "2025-01-03T12:12:22",
            "upload_time_iso_8601": "2025-01-03T12:12:22.282026Z",
            "url": "https://files.pythonhosted.org/packages/2a/22/67e3d9831fbe193f0e1c35d7e707f8d091c56c174d875019e928745a0a9c/primp-0.9.3-cp38-abi3-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "370879bd349d0fd1075daeb265064437c82c4234c101b5bc3642c1390127d989",
                "md5": "1b22832559b1b630c9ccc9c6fa0a1e26",
                "sha256": "15325ec0b916e48a65929f647d7dd12fb1400e76a6aeba72f7e205c94c4aaa82"
            },
            "downloads": -1,
            "filename": "primp-0.9.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1b22832559b1b630c9ccc9c6fa0a1e26",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 3244817,
            "upload_time": "2025-01-03T12:12:19",
            "upload_time_iso_8601": "2025-01-03T12:12:19.852768Z",
            "url": "https://files.pythonhosted.org/packages/37/08/79bd349d0fd1075daeb265064437c82c4234c101b5bc3642c1390127d989/primp-0.9.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4e4aa2181334ecda1e7dab1f5a186b40286720e33ffb61334dfcd693e91b36fe",
                "md5": "605d0420e00e093ab29e267d10000559",
                "sha256": "de97cc10130a68edcd4e173cf01c628a10b9b6a6e19393200b12f1a1ddcb863d"
            },
            "downloads": -1,
            "filename": "primp-0.9.3-cp38-abi3-manylinux_2_34_aarch64.whl",
            "has_sig": false,
            "md5_digest": "605d0420e00e093ab29e267d10000559",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 3206619,
            "upload_time": "2025-01-03T12:12:12",
            "upload_time_iso_8601": "2025-01-03T12:12:12.932189Z",
            "url": "https://files.pythonhosted.org/packages/4e/4a/a2181334ecda1e7dab1f5a186b40286720e33ffb61334dfcd693e91b36fe/primp-0.9.3-cp38-abi3-manylinux_2_34_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "072198329fc39ab0c3de69e6056f87d1b719203372c3cab93a0ce950126fdba9",
                "md5": "0c64fdb0b0957720410c763a2734bed5",
                "sha256": "cba94e48c9b245a9daac96807aa020525c1a66c1141d4c2b11db4e2ccb69da33"
            },
            "downloads": -1,
            "filename": "primp-0.9.3-cp38-abi3-manylinux_2_34_armv7l.whl",
            "has_sig": false,
            "md5_digest": "0c64fdb0b0957720410c763a2734bed5",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 2971472,
            "upload_time": "2025-01-03T12:12:16",
            "upload_time_iso_8601": "2025-01-03T12:12:16.299279Z",
            "url": "https://files.pythonhosted.org/packages/07/21/98329fc39ab0c3de69e6056f87d1b719203372c3cab93a0ce950126fdba9/primp-0.9.3-cp38-abi3-manylinux_2_34_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a8057858acc6e2ceccc0210fd523c2df7a168bb829b2c543faeb8a570e5d6d21",
                "md5": "742b525c8fa0154ffdf158f86a505853",
                "sha256": "1d1df5a9808b82b960df1f72ff53a9ab9c77dce61fcbe5776a11cf5f59dd7f28"
            },
            "downloads": -1,
            "filename": "primp-0.9.3-cp38-abi3-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "742b525c8fa0154ffdf158f86a505853",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 3379434,
            "upload_time": "2025-01-03T12:12:28",
            "upload_time_iso_8601": "2025-01-03T12:12:28.895932Z",
            "url": "https://files.pythonhosted.org/packages/a8/05/7858acc6e2ceccc0210fd523c2df7a168bb829b2c543faeb8a570e5d6d21/primp-0.9.3-cp38-abi3-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "dd57d84524c0c87c24fff5250e29ac377bf2d0f1430c7d5d58b40462ea8c6ef2",
                "md5": "bd0694b992cc189e6d4eac4e9af7aa6b",
                "sha256": "484fc69dbed5ca14561d54aecd17f011c8ffa495023134bb9a94edb808ae3e1b"
            },
            "downloads": -1,
            "filename": "primp-0.9.3-cp38-abi3-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "bd0694b992cc189e6d4eac4e9af7aa6b",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 3568360,
            "upload_time": "2025-01-03T12:12:32",
            "upload_time_iso_8601": "2025-01-03T12:12:32.110287Z",
            "url": "https://files.pythonhosted.org/packages/dd/57/d84524c0c87c24fff5250e29ac377bf2d0f1430c7d5d58b40462ea8c6ef2/primp-0.9.3-cp38-abi3-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "00eba703e4a24e7e73908f774944ddd1dd890ffd6e3d52be6059d6a6524b0fe1",
                "md5": "b1e3fcdd8c0ed97714c5043baab21996",
                "sha256": "824a5606ad67cb842ccc5158f19f9ccd1387e25e1374edd69f87cd7616cf3ea9"
            },
            "downloads": -1,
            "filename": "primp-0.9.3-cp38-abi3-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "b1e3fcdd8c0ed97714c5043baab21996",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 3110821,
            "upload_time": "2025-01-03T12:12:36",
            "upload_time_iso_8601": "2025-01-03T12:12:36.913140Z",
            "url": "https://files.pythonhosted.org/packages/00/eb/a703e4a24e7e73908f774944ddd1dd890ffd6e3d52be6059d6a6524b0fe1/primp-0.9.3-cp38-abi3-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "96f5f90fa2259e92aec568e3d953d32ef3cb70d9f975b344b5f625d6b6763bc9",
                "md5": "28ad32555af959814d04fb7606f09d5b",
                "sha256": "bc6490c659c741c6586bd160ed51b2e04f9dbc3b61bc1dd1af1ce66eefea663e"
            },
            "downloads": -1,
            "filename": "primp-0.9.3.tar.gz",
            "has_sig": false,
            "md5_digest": "28ad32555af959814d04fb7606f09d5b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 83276,
            "upload_time": "2025-01-03T12:12:35",
            "upload_time_iso_8601": "2025-01-03T12:12:35.080832Z",
            "url": "https://files.pythonhosted.org/packages/96/f5/f90fa2259e92aec568e3d953d32ef3cb70d9f975b344b5f625d6b6763bc9/primp-0.9.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-03 12:12:35",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "primp"
}
        
Elapsed time: 0.93203s