Cleaned up HTTP client abstraction