I'm aware of wget -i as a way to download a list of URLs. The only trouble is that I need to pass some different POST data to each one, which works for single urls using wget --post-data= but not for lists.

I'm open to any CLI downloader, or even something in JS or Python. I would however like to get either a progress bar for each download or a log file updated each time a dl finishes, or some other way of knowing when a dl finishes.

I've not used this tool before but thought I'd add it since it sounds exactly like what you're looking for.

uget

It's a GUI tool called uget. It has the ability to take a input file that would contain the URLs to download along with HTTP POST data from a second file. It's unclear if this allows you to use different POST data per URL or if it's only a single set for all the URLs but might be worth a closer look.

$ uget-gtk --help
...
-i, --input-file=FILE add URLs found in FILE.
--http-post-data=STRING use the POST method; send STRING as the data.
--http-post-file=FILE use the POST method; send contents of FILE