How to download files from the internet using C++
Hello, Coders! In this tutorial, we will learn to download files from the internet using C++.
Win32 API UrlBlockingStream
Let’s have a look at the Win32 API UrlBlockingStream function.
- This is an extract from MSDN documentation. URL Blocking Stream is a component object model COM function.
- It downloads the data from the Internet by creating a blocking-type stream object. By applying the IStream::Read method, the client application can read the downloaded data.
- URL Blocking Stream accepts five arguments.
Syntax:
HRRESULT URLOpenBlockingStream ( //Keep Null, not relevant in our case. LPUNKNOWN pCaller, // URL Address(google.com) LPCSTR szURL, //IStream** input pointer address. //URL Blocking Stream uses this address to create a stream object for us. LPSTREAM *ppStream, _Reserved_DWORD dwReserved, //Kept Null the last two parameters. LPBINDSTATUSCALLBACK lpfnCB );
In this tutorial, we will download the homepage of facebook as a file to our system by using the URL Blocking Stream. The URL Blocking Stream will provide us with an Istream object, then we shall install a loop to collect all the available bytes, and finally display them into a console output.
Program to Download text file From Internet to the Console in C++
#pragma comment(lib, "Urlmon.lib") //urlmon library for the URL Open Blocking Stream function #include <urlmon.h> #include <cstdio> #include <iostream> //Headers for String Operations #include <string> using namespace std; int main() { //WIndows IStream interface IStream* stream; //Source URL const char* URL = "http://facebook.com"; // URLDownloadToFile returns S_OK on success if (S_OK != URLOpenBlockingStreamA(0, URL, &stream, 0, 0)) { cout << "Failed."; //Return On Failure return -1; } char buff[100]; //char buffer to repeatedly get data from the stream. string s; unsigned long bytesRead; while(true) { stream -> Read(buff,100,&bytesRead); //It Read the data till available if(0U == bytesRead) // bytesRead are zero when end of file reached. { break; } s.append(buff, bytesRead); //append and collect to the string. }; stream -> Release(); //Realease the interface. cout << s << endl; return 0; }
Output:
We will get the Source Code file of facebook.com home page on our output console.
Download Multimedia Files from the internet to the System by using C++
To download the multimedia files like image files in JPG format, PNG format, and Music files like MP3 or any other file format, we would use the Win32 API URLDownloadToFile. It will download the file from the URL of that file.
#pragma comment(lib, "Urlmon.lib") #include <windows.h> #include <cstdio> using namespace std; int main() { // URL of the music file, image file etc. const wchar_t* sURL = L"https://www.shutterstock.com/image-photo/businessman-finger-click-download-pushing-button-290775059"; // Name of the Destination file const wchar_t* dFile = L"image.jpg"; if (S_OK == URLDownloadToFile(NULL, sURL, dFile, 0, NULL)) { cout << "The file is saved to image.png" << endl; return 0; } else { cout << "Unable to Download the file."; return -1; } }
Output:
The image file is saved in the same working directory where the program is running.
Hope this article has helped you understand how to download any file from the internet by using the C++ programming language.
Happy Coding!!!
You can also read, Fetch line from a text file in C++
Leave a Reply