bild von url runterladen mit c++
-
hallo leute,
ich hab nun schon sehr viel gesucht im netz um mein problem zu lösen. und wenn ich mal was finde ist es für ne andere sprache.
ich habe eine url gegeben, welche auf ein bild im internet verweist, und möchte nun dieses bild runterladen und lokal speichern, sodass es in meinem programm verwendet werden kann.
ich bin nicht unbedingt unerfahren im programmieren. genau das gleiche habe ich vor jahren mal mit delphi gemacht. mit c# sollte es auch kein problem mittels system.net und webrequest sein. aber in c++ kostet es mich zur zeit viele nerven.
(ich nutze visual studio 2010 auf win7)kann mir jemand weiter helfen?
-
was hast dud enn schon selbst erarbeitet bzw. wo genau ist dein problem (schreib zum beispiel deine fehlermeldung...?
wir machen hier nicht deine hausaufgaben...
-
Für Windows siehe hier: http://msdn.microsoft.com/en-us/library/ms775123
-
Http-Protkoll und boost::asio

-
mir ist schon klar, dass ihr hier von niemanden hausaufgaben macht.
ich bin informatik-student und es ist für ein hobbyprojekt.fehlermeldung gabs nich, da ich keinen ansatz hatte wie mans mit c++ umsetzen könnte.
aber an dieser stelle vielen dank an HighLigerBiMBam
das war der entscheidende link. funzt wunderbar 
-
Dafür gibt es libcurl.
-
Immer diese verwöhnten Managed-Programmierer *kopfschüttel*
-
Ev. sind fie Funktionen aus der WinAPI für dich hilfreich:
http://msdn.microsoft.com/en-us/library/aa385473(v=vs.85).aspxVorallem:
InternetOpen(..)
InternetOpenURL(..)
InternetReadFile(..)
-
libcurl ist dafür ganz gut.
Beispiel:
#include <curl/curl.h> #include <curl/easy.h> #include <string> #pragma comment(lib, "libcurl_imp.lib") namespace Internet{ class EasyCurl { public: bool downloadFile(const std::string& url) { CURL* curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &EasyCurl::callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, this); if ( curl_easy_perform(curl) != CURLE_OK ) { return false; } curl_easy_cleanup(curl); return true; } static size_t callback( void *ptr, size_t size, size_t nmemb, void *user) { if ( user != NULL ) { EasyCurl* p = static_cast<EasyCurl*>(user); if ( p ) { p->setResult(static_cast<const char*>(ptr)); } } return size*nmemb; } void setResult(const char* r) { m_lastResult += std::string(r); } const std::string& getResult() const { return m_lastResult; } private: std::string m_lastResult; }; } // Namespace
-
Wie die anderen schon sagten nehm das Http-Protokoll, boost::asio oder libcurl.
Was ich dir empfehlen kann lern zuerst mit Socket zu arbeiten.
Unix:http://www.zotteljedi.de/socket-tipps/index.html
Win:http://www.c-worker.ch/tuts/wstut_op.php
-
Zen schrieb:
aber an dieser stelle vielen dank an HighLigerBiMBam
das war der entscheidende link. funzt wunderbar 
vielen dank für die vielen posts, aber mein problem is doch schon seit dem 2. post gelöst leute
