una todas que por permiten para paginas pagina online link las imagenes gratis google extraer directa descargar descarga crear bloqueada archivo c++ http download

c++ - todas - ¿Cómo descargar una imagen desde una URL a un directorio local?



extraer imagenes de una pagina web (7)

Estoy usando C ++ sin .NET en Win32, ¿cómo puedo descargar una imagen a través de HTTP desde un sitio web sin tener que reinventar la rueda? ¿Hay una API o biblioteca que proporciona una función única para hacer esto?

http: //mywebsite/file.imgext -> C: / path / to / dir / file.imgext


Podría usar cURLpp

Todavía no lo he usado, pero example20 parece que podría resolver su problema.


Puede usar las clases de WinInet o WinHTTP en C ++. Estas son las API nativas de Win32, que resumen parte del trabajo de obtener y recibir archivos de Internet.

He utilizado WinInet con gran éxito para hacer exactamente lo que estás tratando de hacer.


Si comenzar un nuevo proceso está bien, puedes echarle un vistazo a WGET . (E incluso si no, las fuentes están disponibles, puede mirar allí para ver cómo se ha implementado).



Usando POCO para esto ahora. :-)


Las API de WinInet son más fáciles de lo que crees

Aquí hay un programa completo de consola win32. Se puede compilar con VS 2010 Express y descargar Windows SDK para obtener WinInit.

// imaged.cpp : Defines the entry point for the console application. // // Copy file from internet onto local file // Uses Wininet API // program takes 1 mandatory command line argument - URL string // it downloads ito the current directory, or whatever is passed // as the second parameter to DownloadURLImage. // optional parameter, the name of the file (excluding path), by default it uses the // filename from the URL string. #include "stdafx.h" #include <iostream> #include <windows.h> #include <WinInet.h> // from SDK #include "string.h" //#include<TCHAR.H> //#include "Tchar.h" using namespace std ; int convertURLtofname (TCHAR * szURL, TCHAR * szname ) // extract the filename from the URL { char aszfilename [100]; HRESULT result; char achar[3], aszURL [100]; size_t nchars, i, j; int fresult; fresult = 0; nchars= _tcslen(szURL); i= nchars -1; while ((i > 0) && (szURL[i] != ''/'') && (szURL[i] != ''//')) {i--;} j= 0; i++; while (i < nchars) { szname [j++]= szURL[i++]; } szname[j]=_T(''/0''); // wcstombs ( aszfilename, szname, 100 ); // cout << aszfilename << endl; //---------------------------------------------- return fresult ; } int determinepathfilename (TCHAR * szURL, TCHAR * szpath, TCHAR * szname, TCHAR * szpathfilename) { // use path and filename when supplied. If filename (e.g. funkypic.jpg) is not supplied, then the // filename will be extracted from the last part of the URL int result ; result= 0; TCHAR szname_copy [100] ; if ((szname == NULL) || (szname[0] == ''/0'')) convertURLtofname (szURL, szname_copy); else _tcscpy (szname_copy, szname); if ((szpath == NULL) || (szpath[0] == ''/0'')) _tcscpy (szpathfilename, szname_copy); else { _tcscpy (szpathfilename, szpath); _tcscat (szpathfilename, szname_copy); } return result ; } bool GetFile (HINTERNET hOpen, // Handle from InternetOpen() TCHAR *szURL, // Full URL TCHAR * szpath, TCHAR * szname) { DWORD dwSize; TCHAR szHead[15]; BYTE * szTemp[1024]; HINTERNET hConnect; FILE * pFile; TCHAR szpathfilename [100] ; szHead[0] = ''/0''; if ( !(hConnect = InternetOpenUrl( hOpen, szURL, szHead, 15, INTERNET_FLAG_DONT_CACHE, 0))) { std::cout << "Error: InternetOpenUrl" << std::endl; return 0; } determinepathfilename (szURL, szpath, szname, szpathfilename); if ( !(pFile = _tfopen (szpathfilename, _T("wb") ) ) ) { std::cerr << "Error _tfopen" << std::endl; return false; } do { // Keep copying in 1024 bytes chunks, while file has any data left. // Note: bigger buffer will greatly improve performance. if (!InternetReadFile (hConnect, szTemp, 1024, &dwSize) ) { fclose (pFile); std::cerr << "Error InternetReadFile" << std::endl; return FALSE; } if (!dwSize) break; // Condition of dwSize=0 indicate EOF. Stop. else fwrite(szTemp, sizeof (BYTE), dwSize , pFile); } // do while (TRUE); fflush (pFile); fclose (pFile); return TRUE; } int DownloadURLImage (TCHAR * szURL, TCHAR * szpath, TCHAR * szname) { int result ; HINTERNET hInternet; result= 0; hInternet= InternetOpen (_T("imaged"), INTERNET_OPEN_TYPE_DIRECT, //__in DWORD dwAccessType NULL, //__in LPCTSTR lpszProxyName, NULL, //__in LPCTSTR lpszProxyBypass, NULL //_in DWORD dwFlags ); GetFile (hInternet, szURL, szpath, szname) ; InternetCloseHandle(hInternet); return result ; } int _tmain(int argc, _TCHAR* argv[]) { if (argc == 2) { DownloadURLImage (argv[1], NULL, NULL); //DownloadURLImage (argv[1], _T"C:/", NULL); } else if (argc == 3) { DownloadURLImage (argv[1], NULL, argv[2]); //DownloadURLImage (argv[1], _T"C:/", argv[2]); } else { cout << "Usage: imaged <image URL>" << endl ; } system("pause") ; return 0; }


Si desea una solución FÁCIL y NO LE PREOCUPA la seguridad, use este delineador increíblemente simple:

system("C://Users//Me//Desktop//wget.exe http://pixelcaster.com/yosemite/webcams/ahwahnee2.jpg -O C://Users//Me//Desktop//ahwahnee2.jpg");

Con wget para windows

choco install wget

Ver chocolatey.org