Why does drupal_http_request return a 400?
It's probably that you are missing the Content-Type header, as detailed here. For Drupal 7, this should look like this:

&lt;?php
$response = drupal_http_request(
 'http://www.example.com',
 array('headers' =&gt; array('Content-Type' =&gt; 'application/x-www-form-urlencoded'),
 'method' =&gt; 'POST',
 'data' =&gt; 'param1=value1&amp;param2=value2'));
?&gt;