uses urlread with better errors