abstract http to use different downloaders