Page 1 of 1

Functii cURL/WinINet in Visual C++ 2010

Posted: 15 Feb 2012, 18:25
by curiosul
As-i avea si eu nevoie de niste tutoriale, carti, exemple, video-uri, orice care ma ajute sa invat cat de cat, sa folosesc cURL, sa stiu ce are la baza!
Nu vreau cine stie ce chestii, vreau sa stiu spre exemplu sa navighez pe o pagina, sa copii un text din ea, chesii din astea simple!
Am cautat pe net ceva tutoriale da nu prea am gasit nimic mai ales functia din c++!
Multumesc.

Re: Functii cURL in Visual C++ 2010

Posted: 15 Feb 2012, 18:41
by bu7ch3r
Pana sa fii scris tu acest post credeam ca CURL e doar pentru php. Exista intr-adevar o librarie pentru windows dar...

Eu personal am folosit CURL doar in php, am avut putine probleme in initializarea sa si face ceea ce vrei tu sa faca, garantat.

Ma indoiesc ca e la fel de usor de folosit CURL ca in php.

Ai la dispozitie exemple si functii din WINAPI, cum ar fi cele din WinHTTP si WinInet, eu le-am folosit fara nici o problema pe ambele.
http://msdn.microsoft.com/en-us/library ... s.85).aspx
E greu pana te obisnuiest cum sa le folosesti, pentru ca trebuie sa apelezi cateva functii intr-o ordine precisa si logica, dar e plin netul de exemple.

Poti sa folosesti MFC-ul si faci un obiect CHtmlCtrl care face singur navigatia si chiar ti-o randeaza:)
http://msdn.microsoft.com/en-us/library ... s.80).aspx

Si bineinteles mai ai COM :)

Re: Functii cURL in Visual C++ 2010

Posted: 15 Feb 2012, 21:56
by neagu_laurentiu
Daca stii sa citesti din engleza plus limbajul, nu-ti trebuie nimic altceva decat:
http://curl.haxx.se/libcurl/c/example.html

Re: Functii cURL in Visual C++ 2010

Posted: 23 Feb 2012, 00:27
by curiosul
Am incercat ceva cu cURL dar nu prea a iesit si pe deasupra a zis si bu7ch3r ca este destul de costisitor asa ca voi incerca sa vad cum sta treaba cu functiile WinINet.
Dar pentru inceput as vrea sa stabilesc niste nelamuriri:
1.Ce tip de proiect trebuie sa creez pentru ca intr-unul obisnuit nu vrea in nici-un caz sa ruleze. Si cum pot sa-mi dau singur seama pe viitor?
2.Toate functiile sunt de genul:

Code: Select all

GROUPID CreateUrlCacheGroup(
  __in        DWORD dwFlags,
  __reserved  LPVOID lpReserved
);
Imi puteti da un exemplu de program cap-coada care sa foloseasca una din functiile WinINet, nu conteaza care!

PS: Folosesc Visual c++ 2010 Express Edition

Re: Functii cURL in Visual C++ 2010

Posted: 23 Feb 2012, 09:44
by cristianamarie

Re: Functii cURL in Visual C++ 2010

Posted: 23 Feb 2012, 11:02
by Ovidiu Cucu
curiosul wrote:2.Toate functiile sunt de genul:

Code: Select all

GROUPID CreateUrlCacheGroup(
  __in        DWORD dwFlags,
  __reserved  LPVOID lpReserved
);
Cui ti-a zis porumbelul asta, spune-i sa traga un ochi mai atent la docomentatie. ;)

In fine, uite un exemplu simplu-simplu-simplificat care "ruleaza intr-o aplicatie obisnuita" (presupun ca te refereai la o aplicatie consola).

Code: Select all

#include <Windows.h>
#include <TCHAR.h>
#include <WinINet.h>  // Include WinINet SDK header
#include <stdio.h>

#pragma comment(lib, "WinINet.lib") // link to WinINet library

DWORD _HandleError(LPCTSTR pszFunction);

int main()
{  
   // open internet session
   HINTERNET hSession = ::InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, 0, 0);
   if(NULL == hSession)
   {
      return _HandleError(_T("InternetOpen"));
   }

   // open URL resource
   LPCTSTR pszUrl = _T("http://www.codexpert.ro/");
   HINTERNET hRes = ::InternetOpenUrl(hSession, pszUrl, NULL, 0, 0, NULL);
   if(NULL == hRes)
   {
      DWORD dwError = _HandleError(_T("InternetOpenUrl"));
      ::InternetCloseHandle(hSession);
      return dwError;
   }

   // read data
   // Note: This is just a simplified example for demo purpose and may read truncated data.
   // For more info, see InternetReadFile documentation.   
   const DWORD dwBytesToRead = 4096; 
   DWORD dwBytesRead = 0;
   char lpBuffer[dwBytesToRead];

   BOOL bRet = ::InternetReadFile(hRes, lpBuffer, dwBytesToRead, &dwBytesRead);
   if(! bRet)
   {
      ::InternetCloseHandle(hRes);
      ::InternetCloseHandle(hSession);
      return _HandleError(_T("InternetReadFile"));
   }

   if(dwBytesRead < dwBytesToRead)
      lpBuffer[dwBytesRead] = 0;
   else
      lpBuffer[dwBytesToRead - 1] = 0;

   // print read data
   printf(lpBuffer);

   ::InternetCloseHandle(hRes);
   ::InternetCloseHandle(hSession);

   system("pause");
   return 0;
}

DWORD _HandleError(LPCTSTR pszFunction)
{
   DWORD dwError = ::GetLastError();
   _tprintf(_T("%s failed\nError: %u"), pszFunction, dwError);
   return dwError;
}
Domeniul e destul de vast, asa ca pentru a face exact ce vrei tu ai de sapat putin prin documentatie (MSDN, Dev Center, etc) unde gasesti si ceva exemple.
Poti porni voiniceste de la: Dev Center - Windows Internet