What I found is not a complete answer yet, but it might help you to sort this out.
I tried the same using my own HTTP downloader and got exactly the same results.
But I also compared saved files and saw one big difference: there are hidden input elements with the name __VIEWSTATE:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="... I skipped the content here ... " />
I did not show the content of the attribute value — it's pretty long.
So, here is the difference: at least in one case this value is much longer if you use a Web browser. The application uses hidden elements to save the view state, which is the known method.
I don't know yet how requests are different though. Maybe you can figure this out. It's possible to spy on HTTP to get what the Web browser sends, verbosely.