Metadata-Version: 2.4
Name: ruyihttp
Version: 0.8.1
Summary: Requests-style Python HTTP client with a bundled NSS and Necko native runtime
Author: LoseNine
License-Expression: MPL-2.0
Project-URL: Homepage, https://github.com/LoseNine/ruyihttp
Project-URL: Repository, https://github.com/LoseNine/ruyihttp
Project-URL: Issues, https://github.com/LoseNine/ruyihttp/issues
Project-URL: Releases, https://github.com/LoseNine/ruyihttp/releases
Classifier: Development Status :: 4 - Beta
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Internet :: WWW/HTTP
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: THIRD_PARTY_NOTICES.md
License-File: ruyihttp/licenses/README.md
License-File: ruyihttp/licenses/firefox-license.html
License-File: ruyihttp/licenses/firefox-notice.txt
License-File: ruyihttp/licenses/mozilla-runtime-data.txt
License-File: ruyihttp/licenses/rust-aho-corasick-1.1.0-COPYING.txt
License-File: ruyihttp/licenses/rust-aho-corasick-1.1.0-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-aho-corasick-1.1.0-UNLICENSE.txt
License-File: ruyihttp/licenses/rust-base64-0.22.1-LICENSE-APACHE.txt
License-File: ruyihttp/licenses/rust-base64-0.22.1-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-bindgen-0.73.1-LICENSE.txt
License-File: ruyihttp/licenses/rust-bitflags-2.10.0-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-block-buffer-0.10.3-LICENSE-APACHE.txt
License-File: ruyihttp/licenses/rust-block-buffer-0.10.3-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-bytes-1.11.1-LICENSE.txt
License-File: ruyihttp/licenses/rust-cexpr-0.6.0-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-cfg-if-1.0.0-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-cfg_aliases-0.2.2-LICENSE.txt
License-File: ruyihttp/licenses/rust-clang-sys-1.7.0-LICENSE.txt
License-File: ruyihttp/licenses/rust-cpufeatures-0.2.8-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-crypto-common-0.1.6-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-darling-0.20.10-LICENSE.txt
License-File: ruyihttp/licenses/rust-dependencies.json
License-File: ruyihttp/licenses/rust-digest-0.10.7-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-enum-map-2.7.3-LICENSES-Apache-2.0.txt
License-File: ruyihttp/licenses/rust-enum-map-2.7.3-LICENSES-CC0-1.0.txt
License-File: ruyihttp/licenses/rust-enum-map-2.7.3-LICENSES-MIT.txt
License-File: ruyihttp/licenses/rust-enumset-1.1.2-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-env_logger-0.10.0-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-equivalent-1.0.1-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-fnv-1.0.7-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-generic-array-0.14.6-LICENSE.txt
License-File: ruyihttp/licenses/rust-hashbrown-0.17.1-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-heck-0.5.0-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-hex-0.4.3-LICENSE-APACHE.txt
License-File: ruyihttp/licenses/rust-hex-0.4.3-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-http-1.4.0-LICENSE-APACHE.txt
License-File: ruyihttp/licenses/rust-http-1.4.0-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-ident_case-1.0.1-LICENSE.txt
License-File: ruyihttp/licenses/rust-indexmap-2.11.4-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-itoa-1.0.15-LICENSE-APACHE.txt
License-File: ruyihttp/licenses/rust-libc-0.2.186-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-libloading-0.8.6-LICENSE.txt
License-File: ruyihttp/licenses/rust-minimal-lexical-0.2.1-LICENSE-APACHE.txt
License-File: ruyihttp/licenses/rust-minimal-lexical-0.2.1-LICENSE.md.txt
License-File: ruyihttp/licenses/rust-mtu-0.4.1-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-nom-7.1.3-LICENSE.txt
License-File: ruyihttp/licenses/rust-pkcs11-bindings-0.1.8-LICENSE.txt
License-File: ruyihttp/licenses/rust-qlog-0.16.0-COPYING.txt
License-File: ruyihttp/licenses/rust-quinn-udp-0.6.0-LICENSE-APACHE.txt
License-File: ruyihttp/licenses/rust-quinn-udp-0.6.0-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-regex-syntax-0.8.5-src-unicode_tables-LICENSE-UNICODE.txt
License-File: ruyihttp/licenses/rust-rustc-hash-2.1.1-LICENSE-APACHE.txt
License-File: ruyihttp/licenses/rust-rustc-hash-2.1.1-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-serde_spanned-1.0.3-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-serde_with-3.12.0-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-sfv-0.14.0-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-sha1-0.10.5-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-shlex-2.0.1-LICENSE-APACHE.txt
License-File: ruyihttp/licenses/rust-shlex-2.0.1-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-smallvec-1.15.2-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-static_assertions-1.1.0-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-strsim-0.11.1-LICENSE.txt
License-File: ruyihttp/licenses/rust-strum-0.27.1-LICENSE.txt
License-File: ruyihttp/licenses/rust-typenum-1.16.0-LICENSE-APACHE.txt
License-File: ruyihttp/licenses/rust-typenum-1.16.0-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-typenum-1.16.0-LICENSE.txt
License-File: ruyihttp/licenses/rust-unicode-ident-1.0.6-LICENSE-UNICODE.txt
License-File: ruyihttp/licenses/rust-version_check-0.9.4-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-windows-0.62.2-license-apache-2.0.txt
License-File: ruyihttp/licenses/rust-windows-0.62.2-license-mit.txt
License-File: ruyihttp/licenses/rust-winnow-0.7.13-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-zeroize-1.8.1-LICENSE-MIT.txt
License-File: ruyihttp/licenses/rust-zeroize_derive-1.4.2-LICENSE-MIT.txt
Requires-Dist: requests<3,>=2.32.5
Requires-Dist: urllib3<3,>=2.2.3
Requires-Dist: cryptography<51,>=45
Requires-Dist: h2<5,>=4.3
Requires-Dist: brotli<2,>=1.2
Requires-Dist: backports.zstd>=1.0; python_version < "3.14"
Requires-Dist: zstandard<1,>=0.23
Requires-Dist: publicsuffixlist<2,>=1.0
Provides-Extra: socks
Requires-Dist: PySocks!=1.5.7,>=1.5.6; extra == "socks"
Dynamic: license-file

# ruyihttp

**基于真实 Firefox 158 原生网络组件的 Python 请求库，提供 Requests 风格接口。**
一条 `pip install` 即可安装，支持 HTTP/1.1、HTTP/2、HTTP/3、会话、代理和流式请求，无需启动浏览器。

[![PyPI](https://img.shields.io/pypi/v/Ruyihttp?style=flat-square&logo=pypi&logoColor=white)](https://pypi.org/project/ruyihttp/)
[![CI](https://img.shields.io/github/actions/workflow/status/LoseNine/ruyihttp/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/LoseNine/ruyihttp/actions/workflows/ci.yml)
[![Release](https://img.shields.io/github/v/release/LoseNine/ruyihttp?style=flat-square)](https://github.com/LoseNine/ruyihttp/releases)
[![Python](https://img.shields.io/badge/Python-3.10%E2%80%933.14-3776AB?style=flat-square&logo=python&logoColor=white)](https://pypi.org/project/ruyihttp/)
[![Platform](https://img.shields.io/badge/platform-Windows%20%2F%20Linux%20x64-0078D4?style=flat-square)](https://github.com/LoseNine/ruyihttp/releases)
[![Stars](https://img.shields.io/github/stars/LoseNine/ruyihttp?style=flat-square)](https://github.com/LoseNine/ruyihttp/stargazers)

保留你熟悉的 `get()`、`post()`、`Session` 和 `Response` 用法，通过 Python 接口调用随包附带的原生库（Windows DLL / Linux `.so`）。
适合接口调用、数据采集、会话维护，以及需要 NSS TLS 连接的 Python 项目。

```bash
pip install -U ruyihttp
```

```python
import ruyihttp as requests

response = requests.get("https://example.com", timeout=30)
response.raise_for_status()
print(response.text)
```

[快速开始](#快速开始) · [常用功能](#常用功能) · [更多用法](#更多用法) · [赞助商](#赞助商) · [问题反馈](https://github.com/LoseNine/ruyihttp/issues)

## 赞助商

> [想出现在这里？](mailto:losenine@163.com)

<table>
  <tr>
    <td width="180"><a href="http://www.fastaitoken.com/register"><img src="https://raw.githubusercontent.com/LoseNine/ruyihttp/main/images/fastaitoken.jpg" alt="FastAIToken" width="150"></a></td>
    <td><b>FastAIToken</b><br>
    <a href="http://www.fastaitoken.com/register">FastAIToken</a> 是面向开发者的 AI API 聚合平台，支持 OpenAI、Claude、Gemini，以及 DeepSeek、GLM、Kimi 等模型。提供多种模型渠道、公开状态页及 7×24 小时真人技术支持。渠道价格与活动以平台页面为准。<br>
    注册与了解详情：<a href="http://www.fastaitoken.com/register">http://www.fastaitoken.com/register</a>
    </td>
  </tr>
</table>

## 快速开始

支持 **Windows x64** 和 **Linux x86_64**，需要 **64 位 Python 3.10–3.14**。
Linux 需要 **glibc 2.31 或更高版本**，例如 Ubuntu 20.04+、Debian 11+。
原生库随 wheel 自动安装，Python 依赖由 pip 解析。

```bash
python -m pip install -U ruyihttp
python -c "import ruyihttp; print(ruyihttp.__version__)"
```

也可以从 [GitHub Releases](https://github.com/LoseNine/ruyihttp/releases) 下载 wheel 后用 pip 安装。
Windows 系统如果提示缺少 `VCRUNTIME` 或 `MSVCP`，请安装
[Microsoft Visual C++ x64 Redistributable](https://aka.ms/vs/17/release/vc_redist.x64.exe)。

### 使用 Session

Session 可复用连接、Cookie 和默认请求头：

```python
import ruyihttp

with ruyihttp.Session() as session:
    session.headers.update({"User-Agent": "my-client/1.0"})
    response = session.get(
        "https://httpbin.org/get",
        params={"page": 1, "keyword": "ruyihttp"},
        timeout=(5, 30),
    )
    response.raise_for_status()
    print(response.json())
```

## 常用功能

| 功能 | 用法 |
| --- | --- |
| HTTP 请求 | `get`、`post`、`put`、`patch`、`delete`、`head`、`options` |
| 会话管理 | `Session`、连接复用、Cookie、默认请求头 |
| 请求数据 | URL 参数、表单、JSON、文件上传、生成器请求体 |
| 响应处理 | `text`、`content`、`json()`、状态码、响应头 |
| 流式下载 | `stream=True`、`iter_content()`、`iter_lines()` |
| 代理 | HTTP、HTTPS、SOCKS4/5、代理认证 |
| 认证与跳转 | Basic / Digest 认证、重定向、响应钩子 |
| 连接控制 | 超时、重试、CA 证书、自定义适配器 |
| 协议 | HTTP/1.1、HTTP/2、通过 HTTPS Alt-Svc 选择 HTTP/3 |
| TLS 信息 | `response.tls` 查看协商协议、版本及会话信息 |

## 更多用法

### 发送 JSON

```python
import ruyihttp

response = ruyihttp.post(
    "https://httpbin.org/post",
    json={"name": "ruyihttp", "enabled": True},
    timeout=30,
)
response.raise_for_status()
print(response.json())
```

### 使用代理

```python
import ruyihttp

response = ruyihttp.get(
    "https://example.com",
    proxies={"https": "http://127.0.0.1:8080"},
    timeout=30,
)
```

SOCKS 代理先安装可选依赖，再使用 `socks5h://127.0.0.1:1080` 等代理地址：

```bash
pip install "ruyihttp[socks]"
```

### 流式下载

```python
import ruyihttp

with ruyihttp.get("https://example.com", stream=True, timeout=30) as response:
    response.raise_for_status()
    with open("page.html", "wb") as output:
        for chunk in response.iter_content(chunk_size=65536):
            output.write(chunk)
```

### 配置重试

```python
from ruyihttp import Session
from ruyihttp.adapters import HTTPAdapter
from urllib3.util import Retry

with Session() as session:
    session.mount("https://", HTTPAdapter(max_retries=Retry(total=3)))
    response = session.get("https://example.com", timeout=(5, 30))
    response.raise_for_status()
```

### 查看 TLS 信息

```python
import ruyihttp

response = ruyihttp.get("https://example.com", timeout=30)
print(response.tls)
```

## 反馈与交流

欢迎通过 [Issues](https://github.com/LoseNine/ruyihttp/issues) 反馈问题或提出功能建议。
反馈时请附上 Python 版本、ruyihttp 版本、最小复现代码和错误信息，分享前移除 Cookie、Token 等私密数据。

相关项目：[ruyiPage](https://github.com/LoseNine/ruyipage) 提供 Firefox 浏览器自动化能力，适合需要页面操作的场景。

## 许可证

Python 接口代码采用 [MPL-2.0](https://github.com/LoseNine/ruyihttp/blob/main/LICENSE)。
原生库（DLL / `.so`）、第三方组件许可及对应源码提供状态见
[THIRD_PARTY_NOTICES.md](https://github.com/LoseNine/ruyihttp/blob/main/THIRD_PARTY_NOTICES.md)。
