client: implement HTTP client