added an abstract HTTP client