Skip to content

Instantly share code, notes, and snippets.

@alghanmi
Created May 5, 2014 20:12
Show Gist options
  • Star 78 You must be signed in to star a gist
  • Fork 22 You must be signed in to fork a gist
  • Save alghanmi/c5d7b761b2c9ab199157 to your computer and use it in GitHub Desktop.
Save alghanmi/c5d7b761b2c9ab199157 to your computer and use it in GitHub Desktop.
cURL C++ Example
#include <iostream>
#include <string>
#include <curl/curl.h>
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
((std::string*)userp)->append((char*)contents, size * nmemb);
return size * nmemb;
}
int main(void)
{
CURL *curl;
CURLcode res;
std::string readBuffer;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
std::cout << readBuffer << std::endl;
}
return 0;
}
@abhishekaryan013
Copy link

How can i run this code in code block ?

@supern64
Copy link

supern64 commented Oct 7, 2019

Thank you so much for writing this as an example!

@pavel-shvetsov
Copy link

Hello,

For those folks who are looking for cURL + HTTPS - curl team has nice example on their project page:

Also there are tons of useful code snippets for many use cases: https://curl.haxx.se/libcurl/c/example.html

Copy link

ghost commented Dec 19, 2020

Where would one find the curl.h file in curl's source code? Is it on GitHub by any chance?

Incredible code nevertheless!

@sardar01
Copy link

sardar01 commented Feb 5, 2022

Works perfectly

@hasirciogli
Copy link

hasirciogli commented Nov 14, 2022

guys i dont know how to integrate my project can you halp me ?

Build started...
1>------ Build started: Project: cmk, Configuration: Release Win32 ------
1>cmk.cpp
1>cmk.obj : error LNK2001: unresolved external symbol _curl_easy_perform
1>cmk.obj : error LNK2001: unresolved external symbol _curl_easy_init
1>cmk.obj : error LNK2001: unresolved external symbol _curl_easy_strerror
1>cmk.obj : error LNK2001: unresolved external symbol _curl_easy_cleanup
1>cmk.obj : error LNK2001: unresolved external symbol _curl_easy_setopt
1>C:\Users\Mustafa_Owner\source\repos\cmk\Release\cmk.exe : fatal error LNK1120: 5 unresolved externals
1>Done building project "cmk.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Elapsed 00:01,275 ==========

main.cpp - > \n
#include
#include <curl/curl.h>

int main()
{
CURL* curl;
CURLcode res;

curl = curl_easy_init();
if (curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");

    /* Forcing HTTP/3 will make the connection fail if the server is not
       accessible over QUIC + HTTP/3 on the given host and port.
       Consider using CURLOPT_ALTSVC instead! */
    curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, (long)CURL_HTTP_VERSION_3);

    /* Perform the request, res will get the return code */
    res = curl_easy_perform(curl);
    /* Check for errors */
    if (res != CURLE_OK)
        fprintf(stderr, "curl_easy_perform() failed: %s\n",
            curl_easy_strerror(res));

    /* always cleanup */
    curl_easy_cleanup(curl);
}

}

@lukechikkala
Copy link

@hasirciogli

  1. It looks like you did not include the -lcurl library when you compiled, hence the "unresolved external symbol" errors.
  2. https://example.com does not support --http3, yet; you could test this using any HTTP/3 verifier.
    Try using any of the HTTP/3 supported websites, some are mentioned here.
  3. I compiled and executed your code using https://quic.tech but received a curl_easy_perform() failed: SSL connect error error.
    Most probably because I don't have the OpenSSL libraries installed, and this is expected.
    But the code itself is executing fine.
#include <curl/curl.h>

int main()
{
	CURL* curl;
	CURLcode res;
	curl = curl_easy_init();
	if (curl)
	{
		curl_easy_setopt(curl, CURLOPT_URL, "https://quic.tech");
		curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, (long)CURL_HTTP_VERSION_3);
		res = curl_easy_perform(curl);
		if (res != CURLE_OK)
			fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
		
		curl_easy_cleanup(curl);
	}
}

Hope that helps :)

@PardeepSangha
Copy link

I developed a client which is receiving data from server occasionally. But when I receive first data, then program exists. I tried while loop like windows message loop, but it gives me last data.

How can I stay in program so that I can receive more messages from server.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment