I am trying to use drupal_http_request to connect to a remote rest-based webservice that users http basic authorization. The following curl command works every time from a command line, and I'm trying to figure out how to do the same the "drupal 7 way".

        curl 'https://XXXXXXXX/login' -H 'Authorization: Basic XXXXXXXX==' \
          -H 'Content-Type: application/x-www-form-urlencoded' \
          --data 'username=XXXXXXXX&password=XXXXXXXX'

Here is the code I am using in Drupal

          function login($username='', $password='') {
            // construct url - returns https://XXXXXXXX/login
            $url = $this->constructLoginUrl();

            $data = array(
              'username' => $username,
              'password' => $password
            );

            $headers = array(
              'Authorization' => "Basic XXXXXXXX==",
              'Content-Type'  => "application/x-www-form-urlencoded"
            );

            $response = drupal_http_request( $url, $headers, 'POST', http_build_query( $data )     

            return $response;
          }

When I run the curl request, I get a json_encoded response. When I run the second bit of code, I get a 401 unauthorized error from the other server. So, my intent is to make the Drupal request work exactly the same as the curl request above. Is there something I should be doing differently?