Downloads a url to a local temporary file using the WordPress HTTP Class. Please note, That the calling function must unlink() the file.

Signature

download_url( $url, $timeout = 300 )
url
 (string) the URL of the file to download
timeout
 (int) The timeout for the request to download the file default 300 seconds
Default: 300

Return

(mixed) WP_Error on failure, string Filename on success.

Source

function download_url( $url, $timeout = 300 ) {
	//WARNING: The file is not automatically deleted, The script must unlink() the file.
	if ( ! $url )
		return new WP_Error('http_no_url', __('Invalid URL Provided.'));

	$tmpfname = wp_tempnam($url);
	if ( ! $tmpfname )
		return new WP_Error('http_no_file', __('Could not create Temporary file.'));

	$response = wp_safe_remote_get( $url, array( 'timeout' => $timeout, 'stream' => true, 'filename' => $tmpfname ) );

	if ( is_wp_error( $response ) ) {
		unlink( $tmpfname );
		return $response;
	}

	if ( 200 != wp_remote_retrieve_response_code( $response ) ){
		unlink( $tmpfname );
		return new WP_Error( 'http_404', trim( wp_remote_retrieve_response_message( $response ) ) );
	}
12 more lines...
WP Trac GitHub

Link here