Анализируйте документы и считайте слова с определением языка
или нажмите для выбора
Поддерживаемые форматы: TXT, PDF, DOC, DOCX, CSV, XLSX, XLS, ODT, RTF, PPTX, PPT
Максимальный размер файла: 50 МБ
Для использования API требуется:
API поддерживает кросс-доменные запросы (Cross-Origin Resource Sharing)
Разрешенные домены:
Разрешенные методы:
GET POST PUT DELETE OPTIONShttp://31.31.196.9:5555 |
Все ответы в формате JSON |
Требуется аутентификация |
CORS: Включен
Все запросы к API (кроме /health) требуют заголовков аутентификации:
X-API-Key: ваш_api_ключ X-API-Token: ваш_секретный_токен
/api/upload
Форма: file (multipart/form-data)
CORS: Разрешен
Пример успешного ответа 200:
{
"status": "success",
"filename": "document.pdf",
"word_count": 1250,
"language": "English",
"language_code": "en",
"character_count": 7850,
"text_preview": "This is a sample text from the document..."
}
Пример запроса:
POST /api/upload Content-Type: multipart/form-data X-API-Key: wc_... X-API-Token: ... Body (form-data): file: [бинарные данные файла]
/api/count-words
JSON: {"text": "ваш текст здесь"}
CORS: Разрешен
Пример ответа 200:
{
"word_count": 42,
"language": "Russian",
"language_code": "ru",
"character_count": 210,
"text_preview": "Привет мир! Это тестовый текст для анализа..."
}
Пример запроса:
POST /api/count-words
Content-Type: application/json
X-API-Key: wc_...
X-API-Token: ...
{
"text": "Hello world! Привет мир!"
}
/api/batch-process
Форма: files[] (несколько файлов)
CORS: Разрешен
Пример успешного ответа 200:
{
"results": [
{
"filename": "file1.docx",
"word_count": 500,
"language": "English",
"character_count": 2500,
"text_preview": "Document content preview...",
"status": "success"
},
{
"filename": "file2.pdf",
"word_count": 750,
"language": "Russian",
"character_count": 4200,
"text_preview": "Текст документа...",
"status": "success"
}
],
"total_files": 2,
"total_words": 1250
}
Пример с ошибкой в файле:
{
"filename": "corrupted.pdf",
"error": "Error processing file: Invalid PDF format",
"status": "error"
}
/api/status
Требует аутентификации
CORS: Разрешен
Пример ответа 200:
{
"status": "active",
"service": "Word Counter API",
"version": "1.0.0",
"domain": "http://31.31.196.9:5555",
"authentication_required": true,
"cors_enabled": true,
"cors_allowed_origins": [
"http://localhost:3000",
"http://127.0.0.1:3000",
"http://31.31.196.9:5555"
],
"your_api_key_info": {
"name": "User's API Key",
"api_key": "wc_...",
"secret_token": "***hidden***",
"created_at": "2024-01-01T12:00:00",
"expires_at": "2025-01-01T12:00:00",
"is_active": true,
"usage_count": 15,
"last_used": "2024-03-15T10:30:00"
}
}
/health
Публичный endpoint, не требует аутентификации
CORS: Разрешен
Пример ответа 200:
{
"status": "healthy",
"service": "Word Counter API",
"version": "1.0.0",
"domain": "http://31.31.196.9:5555/",
"authentication_required": true,
"cors_enabled": true,
"cors_allowed_methods": [
"GET",
"POST",
"PUT",
"DELETE",
"OPTIONS"
],
"timestamp": "2024-03-15T10:30:00.123456"
}
/api/supported-formats
Требует аутентификации
CORS: Разрешен
Пример ответа 200:
{
"supported_formats": [
"txt", "pdf", "doc", "docx",
"csv", "xlsx", "xls", "odt",
"rtf", "pptx", "ppt"
],
"max_file_size_mb": 16,
"require_api_key": true
}
/api/diagnose-file
Форма: file (multipart/form-data)
Не требует аутентификации
Пример ответа:
{
"filename": "document.docx",
"file_size_bytes": 12345,
"file_size_mb": 0.012,
"extension": "docx",
"is_allowed": true,
"tests": {
"is_valid_zip": true,
"zip_contents": 15,
"extraction_success": true,
"extracted_length": 1250,
"extraction_result": "Текст документа..."
}
}
/api/test-raw
Форма: file (multipart/form-data)
Не требует аутентификации
Пример ответа:
{
"filename": "document.docx",
"size_read": 5000,
"hex_start": "504b0304...",
"ascii_start": "PK...",
"is_likely_docx": true
}
{
"error": "API key and token required",
"status": "error"
}
{
"error": "No file part",
"status": "error"
}
{
"error": "File type not allowed",
"status": "error"
}
{
"error": "Internal server error",
"status": "error"
}
import requests
import json
# Конфигурация
API_KEY = "wc_ваш_ключ"
API_TOKEN = "ваш_секретный_токен"
BASE_URL = "http://31.31.196.9:5555"
headers = {
"X-API-Key": API_KEY,
"X-API-Token": API_TOKEN,
# CORS headers автоматически обрабатываются сервером
}
# 1. Health check (без аутентификации, CORS разрешен)
response = requests.get(f"{BASE_URL}/health")
print("API Health:", response.json())
# 2. Загрузка файла с CORS
with open("document.pdf", "rb") as f:
files = {"file": f}
response = requests.post(
f"{BASE_URL}/api/upload",
headers=headers,
files=files
)
if response.status_code == 200:
result = response.json()
print("Word count:", result["word_count"])
elif response.status_code == 401:
print("CORS/Auth error: Проверьте API ключ и домен")
# 3. Проверка CORS настроек
response = requests.get(f"{BASE_URL}/api/status", headers=headers)
data = response.json()
print("CORS enabled:", data.get("cors_enabled"))
print("Allowed origins:", data.get("cors_allowed_origins"))
// Конфигурация
const API_KEY = "wc_ваш_ключ";
const API_TOKEN = "ваш_секретный_токен";
const BASE_URL = "http://31.31.196.9:5555";
const headers = {
"X-API-Key": API_KEY,
"X-API-Token": API_TOKEN,
// CORS headers не нужны - сервер автоматически добавляет их
};
// 1. Health check (без аутентификации)
async function checkHealth() {
try {
const response = await fetch(`${BASE_URL}/health`);
const data = await response.json();
console.log('Health check:', data);
return data;
} catch (error) {
console.error('CORS error:', error);
}
}
// 2. Анализ текста с CORS
async function analyzeText(text) {
try {
const response = await fetch(`${BASE_URL}/api/count-words`, {
method: 'POST',
headers: {
...headers,
'Content-Type': 'application/json'
},
body: JSON.stringify({ text }),
// mode: 'cors' - по умолчанию
});
if (response.ok) {
return await response.json();
} else if (response.status === 401) {
throw new Error('CORS/Auth error: Проверьте домен и API ключ');
}
} catch (error) {
console.error('Fetch error:', error);
throw error;
}
}
// 3. Проверка CORS поддержки
async function checkCorsSupport() {
const response = await fetch(`${BASE_URL}/api/status`, { headers });
const data = await response.json();
console.log('CORS enabled:', data.cors_enabled);
console.log('Allowed origins:', data.cors_allowed_origins);
return data;
}
# 1. Проверка CORS headers (OPTIONS запрос)
curl -X OPTIONS \
-H "Origin: http://localhost:3000" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: X-API-Key, X-API-Token" \
"http://31.31.196.9:5555/api/upload" \
-v
# 2. Health check с проверкой CORS
curl -X GET \
-H "Origin: http://localhost:3000" \
"http://31.31.196.9:5555/health" \
-v
# 3. Запрос с аутентификацией и CORS
curl -X POST \
-H "Origin: http://localhost:3000" \
-H "X-API-Key: wc_ваш_ключ" \
-H "X-API-Token: ваш_секретный_токен" \
-H "Content-Type: application/json" \
-d '{"text": "Hello world!"}' \
"http://31.31.196.9:5555/api/count-words" \
-v
# 4. Проверка CORS конфигурации API
curl -X GET \
-H "X-API-Key: wc_ваш_ключ" \
-H "X-API-Token: ваш_секретный_токен" \
"http://31.31.196.9:5555/api/status"
# 5. Загрузка файла с CORS
curl -X POST \
-H "Origin: http://localhost:3000" \
-H "X-API-Key: wc_ваш_ключ" \
-H "X-API-Token: ваш_секретный_токен" \
-F "file=@document.pdf" \
"http://31.31.196.9:5555/api/upload" \
-v
import React, { useState } from 'react';
import axios from 'axios';
const API_BASE = 'http://31.31.196.9:5555';
const API_KEY = 'wc_ваш_ключ';
const API_TOKEN = 'ваш_секретный_токен';
// Создаем axios instance с CORS поддержкой
const apiClient = axios.create({
baseURL: API_BASE,
headers: {
'X-API-Key': API_KEY,
'X-API-Token': API_TOKEN,
'Content-Type': 'application/json',
},
// CORS настройки
withCredentials: false, // Не отправлять cookies
});
function WordCounterApp() {
const [text, setText] = useState('');
const [result, setResult] = useState(null);
const [loading, setLoading] = useState(false);
// Проверка health status с CORS
const checkHealth = async () => {
try {
const response = await axios.get(`${API_BASE}/health`);
console.log('CORS health check:', response.data);
} catch (error) {
console.error('CORS error:', error);
}
};
// Анализ текста
const analyzeText = async () => {
setLoading(true);
try {
const response = await apiClient.post('/api/count-words', {
text: text
});
setResult(response.data);
} catch (error) {
if (error.response?.status === 401) {
alert('CORS/Auth error: Проверьте API ключ и домен');
} else if (error.response?.status === 0) {
alert('CORS error: Домен не разрешен');
}
console.error('API error:', error);
} finally {
setLoading(false);
}
};
// Загрузка файла
const uploadFile = async (file) => {
const formData = new FormData();
formData.append('file', file);
try {
const response = await apiClient.post('/api/upload', formData, {
headers: {
'Content-Type': 'multipart/form-data',
},
});
setResult(response.data);
} catch (error) {
console.error('Upload error:', error);
}
};
return (
<div className="app">
<h1>Word Counter API Client</h1>
<button onClick={checkHealth}>
Проверить CORS соединение
</button>
<!-- ... остальной компонент -->
</div>
);
}
export default WordCounterApp;
http://localhost:3000 (локальная разработка)http://127.0.0.1:3000 (альтернативный localhost)http://31.31.196.9:5555 (продакшен домен)CORS(app, resources={
r"/*": {
"origins": ["http://новый-домен.com"],
...
}
})
curl -X OPTIONS http://31.31.196.9:5555/api/upload -vИли проверьте ответ от
/api/status endpoint.
или нажмите для выбора
Максимальный размер файла: 50 МБ