libcurl不会加载URL的内容

时间:2019-03-06 02:44:31

标签: c++ curl libcurl

我正在尝试加载此URL的内容以发送SMS;

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

使用以下代码实现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);
    }
}

在将URL的JSON内容保存到文件之前,我已经使用了很多确切的代码,尽管我在这里尝试了一些不同的方法。

此URL在访问时实际上会发送一条SMS。在cli中使用curl时,这样做没有问题。尽管从C ++开始,它不会将任何内容视为错误,但是发送短信的实际功能可能并没有像我实际访问URL一样被激活。

我已经在Google上搜索了某种无法解决的解决方案。也许我还不是一个新手,很难知道要搜索什么。

编辑#1:getFile函数

//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
}

1 个答案:

答案 0 :(得分:1)

此行是错误的:

curl_easy_setopt(curl, CURLOPT_URL, fullSmsURL);

CURLOPT_URL需要一个char*指针,该指针指向以null结尾的C字符串,而不是std::string对象。您需要使用它:

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

此外,您根本不会对getFile()fopen()curl_easy_perform()的返回值执行任何错误检查。因此,您的代码在任何一个地方都可能失败,并且您永远不会知道。