public
Last active

A small tutorial depicting the use of curl libraries to upload a picture to twitpic with basic HTTP authentication

  • Download Gist
TwitpicUpload.cpp
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
#include <iostream>
#include <sstream>
#include <curl/curl.h>
#define END_POINT "http://twitpic.com/api/upload"
#define EXPECT_ARGS 4
size_t write_data(void *buffer, size_t size, size_t nmemb, void* userp)
{
std::stringstream strmResponse;
size_t nReal = size * nmemb;
strmResponse << std::string((char*)buffer, size*nmemb);
std::string sLine("");
while (getline(strmResponse, sLine)) {
std::cout << sLine.c_str() << std::endl;
}
return nReal;
}
int main (int argc, char * const argv[]) {
int result = 0;
CURL* hCurl = NULL;
CURLcode hResult;
std::string sUser("");
std::string sPass("");
std::string sFileName("");
//Curl for form data
struct curl_httppost *post = NULL;
struct curl_httppost *last = NULL;
try{
if(argc < EXPECT_ARGS) {
std::cout << "Usage twitpic_upload twitterUserName twiiterPassword fileName" << std::endl;
throw false;
}
//Get the require params from command line args
sUser = argv[1];
sPass = argv[2];
sFileName = argv[3];
//Initialize curl, just don't let easy_init to do it for you
curl_global_init(CURL_GLOBAL_ALL);
//Handle to the curl
hCurl = curl_easy_init();
if(NULL == hCurl) {
throw false;
}
//Construct the form
curl_formadd(&post, &last, CURLFORM_COPYNAME, "username", CURLFORM_COPYCONTENTS, sUser.c_str(), CURLFORM_END);
curl_formadd(&post, &last, CURLFORM_COPYNAME, "password", CURLFORM_COPYCONTENTS, sPass.c_str(), CURLFORM_END);
curl_formadd(&post, &last, CURLFORM_COPYNAME, "media", CURLFORM_FILE, sFileName.c_str(), CURLFORM_END);
//Specify the API Endpoint
hResult = curl_easy_setopt(hCurl,CURLOPT_URL, END_POINT);
//Specify the HTTP Method
hResult = curl_easy_setopt(hCurl, CURLOPT_HTTPPOST, post);
//Post Away !!!
hResult = curl_easy_perform(hCurl);
if(hResult != CURLE_OK){
std::cout << "Cannot find the twitpic site " << std::endl;
throw false;
}
}
catch (...) {
result = -1;
}
curl_formfree(post);
curl_easy_cleanup(hCurl);
curl_global_cleanup();
return result;
}

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.