HTTPie: modern, user-friendly command-line HTTP client for the API era.
—
HTTPie's configuration system allows you to customize default behavior, set persistent options, and manage plugin settings through configuration files and environment variables.
from httpie.config import Config, get_default_config_dir, DEFAULT_CONFIG_DIR, ConfigFileError
from pathlib import Path
from typing import Union, ListThe main configuration management interface for HTTPie settings.
class Config:
"""HTTPie configuration management."""
def __init__(self, directory: Union[str, Path] = DEFAULT_CONFIG_DIR):
"""
Initialize configuration.
Args:
directory: Configuration directory path (uses default if None)
"""
@property
def default_options(self) -> list:
"""Default command-line options applied to all requests."""
@property
def plugins_dir(self) -> Path:
"""Directory path for HTTPie plugins."""
def load(self) -> None:
"""Load configuration from config file."""
def save(self) -> None:
"""Save current configuration to file."""
def is_new(self) -> bool:
"""True if configuration file doesn't exist yet."""def get_default_config_dir() -> str:
"""
Get the default HTTPie configuration directory.
Returns:
str: Platform-specific configuration directory path
"""
DEFAULT_CONFIG_DIR: str = get_default_config_dir()
"""Default configuration directory constant."""HTTPie stores configuration in platform-specific locations:
~/.config/httpie/config.json%APPDATA%\httpie\config.jsonThe configuration file uses JSON format:
{
"default_options": [
"--style=solarized",
"--timeout=30",
"--follow"
],
"implicit_content_type": "json",
"__meta__": {
"about": "HTTPie configuration file",
"help": "https://httpie.io/docs#config",
"httpie": "3.2.4"
}
}Set command-line options that apply to all HTTPie requests:
{
"default_options": [
"--style=monokai", // Color scheme
"--timeout=60", // Request timeout
"--follow", // Follow redirects
"--check-status", // Exit with error for HTTP errors
"--print=HhBb", // Print headers and body for request/response
"--pretty=all", // Pretty-print everything
"--verify=yes" // SSL verification
]
}from httpie.config import Config
from httpie.context import Environment
# Load configuration
env = Environment()
config = env.config
# Check if configuration exists
if config.is_new():
print("No configuration file found, using defaults")
# Access default options
print(f"Default options: {config.default_options}")
# Get plugins directory
print(f"Plugins directory: {config.plugins_dir}")
# Modify and save configuration
config.default_options.append("--timeout=120")
config.save()HTTPie respects several environment variables:
# Configuration directory override
export HTTPIE_CONFIG_DIR="/custom/config/path"
# Disable configuration file
export HTTPIE_CONFIG_DIR=""
# Default options (space-separated)
export HTTPIE_DEFAULT_OPTIONS="--style=solarized --timeout=30"
# Plugin directory override
export HTTPIE_PLUGINS_DIR="/custom/plugins/path"HTTPie applies options in the following order (later options override earlier ones):
config.json)HTTPIE_DEFAULT_OPTIONS){
"default_options": [
"--verify=ca-bundle.pem", // Custom CA bundle
"--cert=client.pem", // Client certificate
"--cert-key=client-key.pem" // Client certificate key
]
}{
"default_options": [
"--proxy=http:http://proxy.example.com:8080",
"--proxy=https:https://proxy.example.com:8080"
]
}{
"default_options": [
"--style=native", // Syntax highlighting style
"--format-options=json.indent:4", // JSON formatting
"--format-options=headers.sort:true" // Sort headers
]
}class ConfigFileError(Exception):
"""Configuration file parsing or validation error."""
passConfiguration errors are handled gracefully:
from httpie.config import Config, ConfigFileError
try:
config = Config()
config.load()
except ConfigFileError as e:
print(f"Configuration error: {e}")
# HTTPie continues with default settingsThe httpie command provides configuration management:
# Show current configuration
httpie config
# Edit configuration file
httpie config --edit
# Reset to defaults
httpie config --reset
# Show configuration directory
httpie config --dirSome configuration applies only to specific sessions:
# Session-specific defaults
http --session=api --style=monokai api.example.com/login
# Configuration is saved with the session
http --session=api api.example.com/data # Uses monokai stylePlugins can access configuration through the environment:
class MyPlugin(AuthPlugin):
def get_auth(self, username=None, password=None):
# Access global configuration
config = self.env.config
# Check for plugin-specific settings
plugin_options = getattr(config, 'my_plugin_options', {})
return MyAuth(plugin_options){
"default_options": [
"--debug",
"--traceback",
"--timeout=120",
"--style=fruity",
"--format-options=json.indent:2"
]
}{
"default_options": [
"--timeout=30",
"--check-status",
"--follow",
"--verify=yes",
"--style=none"
]
}{
"default_options": [
"--json",
"--print=HhBb",
"--style=solarized",
"--format-options=json.indent:2",
"--format-options=headers.sort:true"
]
}Configuration files can be copied between systems:
# Backup configuration
cp ~/.config/httpie/config.json ~/httpie-config-backup.json
# Restore configuration
cp ~/httpie-config-backup.json ~/.config/httpie/config.json
# Copy to another system
scp ~/.config/httpie/config.json user@remote:~/.config/httpie/Install with Tessl CLI
npx tessl i tessl/pypi-httpie