etfreima
etfreima

Reputation: 68

libcurl won't load contents of URL

I'm trying to load the contents of this URL in order to send an SMS;

https://app2.simpletexting.com/v1/send?token=[api key]&phone=[phone number]&message=Weather%20Alert!

Using this bit of code implementing libcurl:

std::string sendSMS(std::string smsMessage, std::string usrID) {   
    std::string simplePath = "debugOld/libDoc.txt";
    std::string preSmsURL = "https://app2.simpletexting.com/v1/send?token=";

    std::cout << "\n" << getFile(simplePath) << "\n";
    std::string fullSmsURL = preSmsURL + getFile(simplePath) + "&phone=" + usrID + "&message=" + smsMessage;

    std::cout << fullSmsURL;

    //Outputs URL contents into a file
    CURL *curl;
    FILE *fd;
    CURLcode res;
    char newFile[FILENAME_MAX] = "debugOld/noSuccess.md";
    curl = curl_easy_init();
    if (curl) {
        fd = fopen(newFile, "wb");
        curl_easy_setopt(curl, CURLOPT_URL, fullSmsURL);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fd);
        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
        fclose(fd);
    }
}

I've used pretty much this exact code before to save the JSON contents of a URL to a file, although I'm trying something a bit different here.

This URL will actually send an SMS when visited. When using curl in a cli, I have no problem doing this. Although from C++, it doesn't treat anything as a error, just perhaps the actual function to send the sms isn't being actuated in the same way it would had I visited the URL physically.

I've scoured google for some kind of a solution to no avail. Perhaps I'm too novice to curl to know exactly what to search for.

Edit #1: getFile function

//Read given file
std::string getFile(std::string path) {
    std::string nLine;
    std::ifstream file_(path);

    if (file_.is_open()) {
        while (getline(file_, nLine)) {
            return nLine;
        }
        file_.close();
    }
    else {
        std::cout << "file is not open" << "\n";
        return "Error 0x000001: inaccesable file location";
    }
    return "Unknown error in function 'getFile()'"; //This should never happen
}

Upvotes: 0

Views: 272

Answers (1)

Remy Lebeau
Remy Lebeau

Reputation: 595339

This line is wrong:

curl_easy_setopt(curl, CURLOPT_URL, fullSmsURL);

CURLOPT_URL expects a char* pointer to null-terminated C string, not a std::string object. You need to use this instead:

curl_easy_setopt(curl, CURLOPT_URL, fullSmsURL.c_str());

Also, you are not performing any error checking on the return values of getFile(), fopen(), or curl_easy_perform() at all. So, your code could be failing in any one of those places and you would never know it.

Upvotes: 1

Related Questions