Is this code running in a CGI application? If so, the error may be caused by the fact that you are trying to write to a file that you can't write to. If not, the 500 series codes refer to server errors - this may indicate problems on the remote server. Can you post the parameters manually?
Also, you might try using URI::Escape(uri_escape) to escape your query string. There may be characters in there that are causing problems with the post.
One thing that I usually do when running into LWP is use Data::Dumper and print out the UserAgent object ($ua). This shows the contents of the header, the retrieved document, the return code and other useful information. That might help you track down the problem.