diff --git a/uc_canadapost.module b/uc_canadapost.module
index 0380b2f..2fa5ff9 100644
--- a/uc_canadapost.module
+++ b/uc_canadapost.module
@@ -331,32 +331,53 @@ function _uc_canadapost_build_xml($package, $destination) {
  * Sends quote request to Canada Post server, returns object with results.
  */
 function _uc_canadapost_post_xml($xml) {
+ 
   $url = variable_get('uc_canadapost_url', 'http://sellonline.canadapost.ca:30000/');
-  $http_response = drupal_http_request($url, array('method' => 'POST', 'data' => 'XMLRequest=' . urlencode($xml)));
 
-  if (isset($http_response->data)) {
-    $response = new SimpleXMLElement($http_response->data);
+  $service_ip   = gethostbyname('tcp://' . parse_url($url, PHP_URL_HOST));
+  $service_port = parse_url($url, PHP_URL_PORT) ? parse_url($url, PHP_URL_PORT) : 30000;
 
-    if (isset($response->ratesAndServicesResponse) &&
-        isset($response->ratesAndServicesResponse->statusCode) &&
-        ($response->ratesAndServicesResponse->statusCode == 1))   {
+  // Open a socket, write the data, read the response.
+  $fp = fsockopen($service_ip, $service_port, $errno, $errstr, 10);
 
-      return $response;
-    }
-    else {
-      watchdog(
-        'uc_canadapost',
-        'Shipping failed. Request was: !request, response was !response',
-        array(
-          '!request'  => htmlentities($xml),
-          '!response' => htmlentities($http_response->data),
-        ),
-        WATCHDOG_ERROR
-      );
+  if (!$fp) {
+    // Log any errors to the watchdog.
+    watchdog(
+      'uc_canadapost',
+      'Failed to open a socket to the Canada Post server.',
+      array(),
+      WATCHDOG_ERROR
+    );
+    return;
+  }
+  else {
+    fwrite($fp, 'XMLRequest=' . $xml);
+    $socket_response = '';
+    while (!feof($fp)) {
+      $socket_response .= fgets($fp, 1024);
     }
+    fclose($fp);
+  }
+
+  $response = new SimpleXMLElement($socket_response);
+
+  if (isset($response->ratesAndServicesResponse) &&
+      isset($response->ratesAndServicesResponse->statusCode) &&
+      ($response->ratesAndServicesResponse->statusCode == 1))   {
+
+    return $response;
   }
   else {
-    return FALSE;
+    watchdog(
+      'uc_canadapost',
+      'Shipping failed. Request was: !request, response was !response',
+      array(
+        '!request'  => htmlentities($xml),
+        '!response' => htmlentities($socket_response),
+      ),
+      WATCHDOG_ERROR
+    );
+    return;
   }
 }
 
