Index: wp-includes/http.php
===================================================================
--- wp-includes/http.php	(revision 12748)
+++ wp-includes/http.php	(working copy)
@@ -989,12 +1015,12 @@
 			$url = preg_replace('|^' . preg_quote($arrURL['scheme'], '|') . '|', 'http', $url);
 
 		// Convert Header array to string.
-		$strHeaders = '';
+		/*$strHeaders = '';
 		if ( is_array( $r['headers'] ) )
 			foreach ( $r['headers'] as $name => $value )
 				$strHeaders .= "{$name}: $value\r\n";
 		else if ( is_string( $r['headers'] ) )
-			$strHeaders = $r['headers'];
+			$strHeaders = $r['headers'];*/
 
 		$is_local = isset($args['local']) && $args['local'];
 		$ssl_verify = isset($args['sslverify']) && $args['sslverify'];
@@ -1006,11 +1032,12 @@
 		$arrContext = array('http' =>
 			array(
 				'method' => strtoupper($r['method']),
-				'user_agent' => $r['user-agent'],
+				//'user_agent' => $r['user-agent'],
 				'max_redirects' => $r['redirection'] + 1, // See #11557
 				'protocol_version' => (float) $r['httpversion'],
-				'header' => $strHeaders,
+				//'header' => $strHeaders,
 				'timeout' => $r['timeout'],
+				'ignore_errors' => true, // Return non-200 requests.
 				'ssl' => array(
 						'verify_peer' => $ssl_verify,
 						'verify_host' => $ssl_verify
@@ -1018,6 +1045,25 @@
 			)
 		);
 
+		if ( is_null( $r['headers'] ) )
+			$r['headers'] = array();
+
+		if ( is_string($r['headers']) ) {
+			$processedHeaders = WP_Http::processHeaders($r['headers']);
+			$r['headers'] = $processedHeaders['headers'];
+		}
+
+		$initial_user_agent = ini_get('user_agent');
+
+		if ( !empty($r['headers']) && is_array($r['headers']) ) {
+			$user_agent_extra_headers = '';
+			foreach ( $r['headers'] as $header => $value )
+				$user_agent_extra_headers .= "\r\n$header: $value";
+			@ini_set('user_agent', $r['user-agent'] . $user_agent_extra_headers);
+		} else {
+			@ini_set('user_agent', $r['user-agent']);
+		}
+
 		$proxy = new WP_HTTP_Proxy();
 
 		if ( $proxy->is_enabled() && $proxy->send_through_proxy( $url ) ) {
@@ -1039,7 +1088,7 @@
 		else
 			$handle = fopen($url, 'r', false, $context);
 
-		if ( ! $handle)
+		if ( ! $handle )
 			return new WP_Error('http_request_failed', sprintf(__('Could not open handle for fopen() to %s'), $url));
 
 		$timeout = (int) floor( $r['timeout'] );
@@ -1049,6 +1098,7 @@
 		if ( ! $r['blocking'] ) {
 			stream_set_blocking($handle, 0);
 			fclose($handle);
+			@ini_set('user_agent', $initial_user_agent); //Clean up any extra headers added
 			return array( 'headers' => array(), 'body' => '', 'response' => array('code' => false, 'message' => false), 'cookies' => array() );
 		}
 
@@ -1057,6 +1107,8 @@
 
 		fclose($handle);
 
+		@ini_set('user_agent', $initial_user_agent); //Clean up any extra headers added
+
 		$processedHeaders = array();
 		if ( isset( $meta['wrapper_data']['headers'] ) )
 			$processedHeaders = WP_Http::processHeaders($meta['wrapper_data']['headers']);