First, it seems that the code you listed does not match the output you listed. I don't see anywhere in the code where you print out the JSON String, yet this appears in the output "JSON String: {"qty":100,"name":"iPad 4"} ".
Secondly, 405 errors have to do with method mismatches (like trying to send a POST request to a server that only allows GET requests). Are you sure your server is set up to accept and process POST requests?
Don't get me started about those stupid light bulbs.