diff --git src/wp-includes/class-oembed.php src/wp-includes/class-oembed.php
index 052a215..19d2f82 100644
--- src/wp-includes/class-oembed.php
+++ src/wp-includes/class-oembed.php
@@ -464,7 +464,18 @@ class WP_oEmbed {
 
 		$provider = add_query_arg( 'maxwidth', (int) $args['width'], $provider );
 		$provider = add_query_arg( 'maxheight', (int) $args['height'], $provider );
-		$provider = add_query_arg( 'url', urlencode($url), $provider );
+
+		/*
+		 * Only add the 'url' query variable if it is not already present.
+		 *
+		 * @see https://core.trac.wordpress.org/ticket/34335
+		 */
+		$url_query = parse_url( $provider, PHP_URL_QUERY );
+		parse_str( $url_query, $query_variables );
+
+		if ( ! isset ( $query_variables['url'] ) ) {
+			$provider = add_query_arg( 'url', urlencode( $url ), $provider );
+		}
 
 		/**
 		 * Filters the oEmbed URL to be fetched.
diff --git tests/phpunit/tests/oembed/wpOembed.php tests/phpunit/tests/oembed/wpOembed.php
index b7e6887..a1fecd4 100644
--- tests/phpunit/tests/oembed/wpOembed.php
+++ tests/phpunit/tests/oembed/wpOembed.php
@@ -11,6 +11,11 @@ class Tests_WP_oEmbed extends WP_UnitTestCase {
 
 	public $pre_oembed_result_filtered = false;
 
+	/**
+	 * @var string
+	 */
+	protected $_provider_url = null;
+
 	public function setUp() {
 		parent::setUp();
 
@@ -18,6 +23,7 @@ class Tests_WP_oEmbed extends WP_UnitTestCase {
 		$this->oembed = _wp_oembed_get_object();
 
 		$this->pre_oembed_result_filtered = false;
+		$this->_provider_url = null;
 	}
 
 	public function _filter_pre_oembed_result( $result ) {
@@ -69,4 +75,54 @@ class Tests_WP_oEmbed extends WP_UnitTestCase {
 		$this->assertTrue( false !== $this->pre_oembed_result_filtered );
 		$this->assertFalse( $actual );
 	}
+
+	/**
+	 * @ticket 34335
+	 */
+	public function test_fetch_of_provider_with_url() {
+		add_filter( 'pre_http_request', array( $this, '_http_mock_response' ), 10, 3 );
+
+		//Discovered endpoint contains an url query variable, this should be used instead of the passed url
+		$this->oembed->fetch( 'https://example.com/provider/endpoint?url=https://example.com/foo', 'https://example.com/bar', array(
+			'discovered' => true
+		) );
+
+		remove_filter( 'pre_http_request', array( $this, '_http_mock_response' ) );
+
+		$url_query = parse_url( $this->_provider_url, PHP_URL_QUERY );
+		parse_str( $url_query, $query_variables );
+		$this->assertEquals( 'https://example.com/foo', $query_variables['url'] );
+	}
+
+	/**
+	 * @ticket 34335
+	 */
+	public function test_fetch_of_provider_without_url() {
+		add_filter( 'pre_http_request', array( $this, '_http_mock_response' ), 10, 3 );
+
+		//Discovered endpoint does not contain an url query variable, we should insert the passed url
+		$this->oembed->fetch( 'https://example.com/provider/endpoint', 'https://example.com/bar', array(
+			'discovered' => true
+		) );
+
+		remove_filter( 'pre_http_request', array( $this, '_http_mock_response' ) );
+
+		$url_query = parse_url( $this->_provider_url, PHP_URL_QUERY );
+		parse_str( $url_query, $query_variables );
+		$this->assertEquals( 'https://example.com/bar', $query_variables['url'] );
+	}
+
+	public function _http_mock_response( $response,  $request_args, $request_url ) {
+		$this->_provider_url = $request_url;
+		return array(
+			'headers'  => array(),
+			'body'     => '',
+			'response' => array(
+				'code'    => 200,
+				'message' => '',
+			),
+			'cookies'  => array(),
+			'filename' => false,
+		);
+	}
 }
