Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/downloads
# Byte-compiled / optimized / DLL files
__pycache__/
**/__pycache__
*.py[codz]
*$py.class

Expand Down Expand Up @@ -173,7 +174,7 @@ cython_debug/
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
.idea/

# Abstra
# Abstra is an AI-powered process automation framework.
Expand All @@ -186,7 +187,7 @@ cython_debug/
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
# and can be added to the global gitignore or merged into this file. However, if you prefer,
# you could uncomment the following to ignore the entire vscode folder
# .vscode/
.vscode/

# Ruff stuff:
.ruff_cache/
Expand Down
159 changes: 158 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,158 @@
# http-client-python
# http-client-python

Простой HTTP-клиент для командной строки, написанный на Python. Позволяет отправлять HTTP-запросы различных типов и сохранять ответы в файлы.

## Возможности

- ✅ CLI интерфейс
- ✅ Указание URL для запроса
- ✅ Указание метода запроса (GET, POST, PUT, DELETE и др.)
- ✅ Указание тела запроса
- ✅ Указание заголовков запроса
- ✅ Таймаут ожидания ответа
- ✅ Возможность сохранить данные из ответа в файл
- ✅ Поддержка куки
- ✅ Поддержка User-Agent (предопределенные и кастомные)

## Установка

### Требования

- Python 3.13 или выше
- Poetry (для управления зависимостями)

### Установка проекта

1. Клонируйте репозиторий (замените `/path/to/your/projects` на абсолютный путь к директории, где вы хотите разместить проект):
```bash
git clone https://github.com/MatrikSer/http-client-python.git /path/to/your/projects/http-client-python
cd /path/to/your/projects/http-client-python
```

2. Создайте и активируйте виртуальное окружение (опционально, но рекомендуется):
```bash
python -m venv .venv
source .venv/bin/activate # для Linux/Mac
# или
.venv\Scripts\activate # для Windows
```

3. Установите зависимости с помощью Poetry:
```bash
poetry install
```

## Запуск

Проект запускается через Poetry:

```bash
poetry run http-client [аргументы]
```

## Использование

### Основные аргументы

- `url` - обязательный аргумент, URL для запроса (например, `https://example.com`)
- `--method` - HTTP-метод (GET, POST, PUT, DELETE и др.), по умолчанию GET
- `--body` - тело запроса (для POST/PUT запросов)
- `--header` - заголовок запроса (можно указывать несколько раз)
- `--timeout` - таймаут в секундах, по умолчанию 10
- `--cookie` - куки для запроса (например, `name1=value1; name2=value2`)
- `--user-agent` - User-Agent для запроса (может быть именем из предопределенного списка или кастомной строкой)
- `--output` - файл для сохранения ответа
- `--full` / `-f` - сохранить полный HTTP-ответ (включая заголовки)

### Примеры использования

#### Простой GET-запрос

```bash
poetry run http-client https://httpbin.org/get
```

#### POST-запрос с телом и заголовками

```bash
poetry run http-client https://httpbin.org/post \
--method POST \
--body "Hello, World!" \
--header "Content-Type: text/plain" \
--header "User-Agent: MyHTTPClient/1.0"
```

#### Запрос с куки и сохранением ответа в файл

```bash
poetry run http-client https://httpbin.org/cookies \
--cookie "session=abc123; user=john" \
--output response.json
```

#### Сохранение полного ответа (с заголовками)

```bash
poetry run http-client https://httpbin.org/get \
--output full_response.txt \
--full
```

#### Запрос с кастомным таймаутом

```bash
poetry run http-client https://slow-api.example.com/data \
--timeout 30
```

#### Запрос с предопределенным User-Agent

```bash
poetry run http-client https://httpbin.org/user-agent \
--user-agent chrome
```

#### Запрос с кастомным User-Agent

```bash
poetry run http-client https://httpbin.org/user-agent \
--user-agent "MyCustomBot/1.0"
```

#### Доступные предопределенные User-Agent

При использовании параметра `--user-agent` можно указать одно из следующих имен:

- `chrome`: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
- `firefox`: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
- `safari`: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15
- `edge`: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.59
- `opera`: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 OPR/77.0.4054.277
- `mobile_chrome`: Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/91.0.4472.80 Mobile/15E148 Safari/604.1
- `mobile_safari`: Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1
- `bot`: Googlebot/2.1 (+http://www.google.com/bot.html)
- `default`: MyHTTPClient/1.0

## Функции

Проект состоит из следующих основных модулей:

- `client.py` - основной класс HTTP-клиента для отправки запросов
- `parser.py` - парсер аргументов командной строки
- `structures.py` - структуры данных для хранения информации о запросах
- `__main__.py` - точка входа приложения

Клиент поддерживает:
- HTTP и HTTPS соединения
- SSL/TLS шифрование
- Автоматическое определение порта (80 для HTTP, 443 для HTTPS)
- Обработку ответов сервера
- Сохранение ответов в файлы в директорию `downloads/`

## Тестирование

Для запуска тестов используйте:

```bash
poetry run pytest
```
Loading