Pobieranie źródła strony z linku zapisanego w zmiennej za pomocą biblioteki cURL

0

Witam,
mam problem z pobieraniem źródła strony z linku zapisanego w zmiennej. Kod wygląda następująco:

#include <iostream>
#include <sstream>

#define CURL_STATICLIB
#include "curl/curl.h"

#ifdef _DEBUG
#pragma comment (lib, "curl/libcurl_a_debug.lib")
#else
#pragma comment (lib, "curl/libcurl_a.lib")
#endif

static int writer(char *data, size_t size, size_t nmemb, std::string *writerData)
{
	if (writerData == NULL)
	return 0;
	writerData->append(data, size*nmemb);
	return size * nmemb;
}

using namespace std;

int main()
{
	string  link = "https://www.onet.pl"; //onet służy tu jako przykład
	string strona;
	curl_global_init(CURL_GLOBAL_ALL);
	CURL *curl = nullptr;
	curl = curl_easy_init();
	if (curl)
	{
		curl_easy_setopt(curl, CURLOPT_URL, link);
		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
		curl_easy_setopt(curl, CURLOPT_WRITEDATA, &strona);
		CURLcode res = curl_easy_perform(curl);
		curl_easy_cleanup(curl);
	}
	cout << strona;
	return 0;
}

Jak można zauważyć, program ma pobrać źródło strony, zapisać je w zmiennej strona i wyświetlić. Gdy zamiast zmiennej link w pierwszej linijce if(curl) damy adres w postaci " ", program wykona swoje zadanie, lecz gdy wpiszemy tam zmienną, program nie zrobi nic. Czy możecie mi powiedzieć, co zrobić, aby program działał dla zmiennej?

3

libcurl to libka w C. Oczekuje ona typu const char *, nie C++owego stringa. Taki problem masz w kilku miejscach w kodzie. Co więcej, powinieneś łapać WSZYSTKIE wyjątki jakie mogą polecieć w funkcji writer, bo jeśli polecą one do kodu w C to będzie bardzo brzydko.
https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
Swoją drogą możesz zastanowić się nad użyciem https://github.com/whoshuu/cpr

1 użytkowników online, w tym zalogowanych: 0, gości: 1