pydoh/README.md

57 lines
2.3 KiB
Markdown
Raw Normal View History

2026-07-19 20:51:04 +05:00
# pydoh
2026-07-19 20:36:56 +05:00
[![CI](https://github.com/devsavsis/pydoh/actions/workflows/ci.yml/badge.svg)](https://github.com/devsavsis/pydoh/actions/workflows/ci.yml)
2026-07-19 20:51:04 +05:00
[![Coverage](https://codecov.io/gh/ImSavsis/pydoh/branch/master/graph/badge.svg)](https://codecov.io/gh/ImSavsis/pydoh)
[![pypi](https://img.shields.io/pypi/v/pydoh.svg)](https://pypi.org/project/pydoh/)
[![downloads](https://img.shields.io/pypi/dm/pydoh.svg)](https://pypi.org/project/pydoh/)
[![versions](https://img.shields.io/pypi/pyversions/pydoh.svg)](https://pypi.org/project/pydoh/)
[![license](https://img.shields.io/github/license/ImSavsis/pydoh.svg)](https://github.com/devsavsis/pydoh/blob/master/LICENSE)
2026-07-19 20:45:54 +05:00
2026-07-19 20:36:56 +05:00
DNS-over-HTTPS резолвер для питона. ноль зависимостей — весь HTTPS через стандартный `http.client`+`ssl`. провайдер/DPI видит только твой HTTPS к cloudflare, а не голые DNS-запросы.
```mermaid
sequenceDiagram
2026-07-19 20:51:04 +05:00
App->>pydoh: resolve("example.com")
pydoh->>Cloudflare: DNS-запрос внутри HTTPS POST
Cloudflare-->>pydoh: ответ внутри HTTPS
pydoh-->>App: ["93.184.216.34"]
2026-07-19 20:36:56 +05:00
```
## установка
```
2026-07-19 20:51:04 +05:00
pip install pydoh
2026-07-19 20:36:56 +05:00
```
## юзать
```python
2026-07-19 20:51:04 +05:00
import pydoh
2026-07-19 20:36:56 +05:00
2026-07-19 20:51:04 +05:00
ips = pydoh.resolve("example.com")
2026-07-19 20:36:56 +05:00
```
или подменить резолвинг вообще везде в питоне одной строкой — `requests`, `aiohttp`, что угодно на сокетах будет резолвить через DoH:
```python
2026-07-19 20:51:04 +05:00
import pydoh
pydoh.patch_socket()
2026-07-19 20:36:56 +05:00
```
2026-07-19 23:23:04 +05:00
## документация
- [quickstart](docs/quickstart.md) — установка, базовое использование, свой провайдер
- [api](docs/api.md) — все функции с параметрами
- [faq](docs/faq.md) — зачем это надо, что делать если cloudflare забанят, законно ли
2026-07-19 20:36:56 +05:00
## фичи
- zero deps, только stdlib
- fallback между cloudflare / google / quad9 если один упал
- кэш по TTL из ответа
- typed (py.typed), питон 3.10–3.13
## что не умеет
не проверяет DNSSEC, не поддерживает TCP-фрагментированные DNS-ответы больше одного UDP-пакета.