CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-httpie

HTTPie: modern, user-friendly command-line HTTP client for the API era.

Pending
Overview
Eval results
Files

configuration.mddocs/

Configuration

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, List

Capabilities

Configuration Class

The 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."""

Configuration Directory Functions

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."""

Configuration File Location

HTTPie stores configuration in platform-specific locations:

  • Linux/macOS: ~/.config/httpie/config.json
  • Windows: %APPDATA%\httpie\config.json

Configuration File Format

The 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"
  }
}

Default Options

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
  ]
}

Programmatic Configuration

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()

Environment Variables

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"

Configuration Precedence

HTTPie applies options in the following order (later options override earlier ones):

  1. Built-in defaults
  2. Configuration file (config.json)
  3. Environment variables (HTTPIE_DEFAULT_OPTIONS)
  4. Command-line arguments

Advanced Configuration Options

SSL/TLS Configuration

{
  "default_options": [
    "--verify=ca-bundle.pem",     // Custom CA bundle
    "--cert=client.pem",          // Client certificate
    "--cert-key=client-key.pem"   // Client certificate key
  ]
}

Proxy Configuration

{
  "default_options": [
    "--proxy=http:http://proxy.example.com:8080",
    "--proxy=https:https://proxy.example.com:8080"
  ]
}

Output Configuration

{
  "default_options": [
    "--style=native",           // Syntax highlighting style
    "--format-options=json.indent:4",  // JSON formatting
    "--format-options=headers.sort:true"  // Sort headers
  ]
}

Configuration Validation

class ConfigFileError(Exception):
    """Configuration file parsing or validation error."""
    pass

Configuration 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 settings

Configuration Management Commands

The 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 --dir

Session-Specific Configuration

Some 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 style

Plugin Configuration

Plugins 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)

Configuration Examples

Development Configuration

{
  "default_options": [
    "--debug",
    "--traceback", 
    "--timeout=120",
    "--style=fruity",
    "--format-options=json.indent:2"
  ]
}

Production Configuration

{
  "default_options": [
    "--timeout=30",
    "--check-status",
    "--follow",
    "--verify=yes",
    "--style=none"
  ]
}

API Testing Configuration

{
  "default_options": [
    "--json",
    "--print=HhBb",
    "--style=solarized",
    "--format-options=json.indent:2",
    "--format-options=headers.sort:true"
  ]
}

Migration and Backup

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

docs

cli.md

client.md

configuration.md

index.md

models.md

plugins.md

sessions.md

utilities.md

tile.json