return HTTPError for bad HTTP status so caller can check the status