【问题标题】:cURL & C++ (libcurl?)cURL & C++ (libcurl?)
【发布时间】:2014-08-09 02:11:44
【问题描述】:

我有点困惑,无法将我制作的简单 shell 脚本编译成 C++ 中的 exe。 我现在遇到并且研究无济于事的问题是如何让 cURL 与 C++ 一起工作。 本质上,我想让用户输入一个 url,将其存储在一个字符串中,然后在下一行中使用它来检测是否存在 url 重定向。

var url,
cout<<"Please enter a URL to detect if there is a redirect."<<endll
cin<<URL;
curl -b cookies -w "%{url_effective}\n" -L -s -S -o /dev/null URL      // <-   http://website.com/page/Redirected_PATH/

有什么方法可以导入头文件来支持我之前在终端中使用的 cURL 标志?

感谢您提供任何见解。

【问题讨论】:

  • 你看过libcurl's API了吗? curl 是一个围绕 libcurl 的命令行包装应用程序,因此您可以在 shell 中使用 curl 进行的所有操作,都可以在代码中使用 libcurl。

标签: c++ shell curl libcurl


【解决方案1】:

Curl 有一个名为libcurl 的库,它允许您直接与 curl 交互,而无需通过命令行。以下是向 URL 发送数据的示例:

extern "C" {
#include <curl/curl.h>
}

size_t CurlReadFunction(void *ptr, size_t size, size_t nmemb, void *userdata)
{
    stringstream& ssData = *(stringstream*)userdata;
    string sData = ssData.str();
    size_t iBytesToRead = sData.size() - ssData.tellp();

    if (iBytesToRead > nmemb)
        iBytesToRead = nmemb;

    memcpy(ptr, sData.data() + ssData.tellp(), iBytesToRead);
    ssData.seekp((size_t)ssData.tellp() + iBytesToRead);
    return iBytesToRead;
}

///... then when you want to send your data

curl_global_init(CURL_GLOBAL_ALL);

CURL* pCurl = curl_easy_init();
if (!pCurl)
    return;

curl_easy_setopt(pCurl, CURLOPT_TIMEOUT, 10L);
curl_easy_setopt(pCurl, CURLOPT_NOSIGNAL, 1L);
curl_easy_setopt(pCurl, CURLOPT_URL, "http://example.com/receive.php");
curl_easy_setopt(pCurl, CURLOPT_UPLOAD, 1);
curl_easy_setopt(pCurl, CURLOPT_READDATA, &ssData);
curl_easy_setopt(pCurl, CURLOPT_READFUNCTION, CurlReadFunction);
curl_easy_setopt(pCurl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)sData.size());

CURLcode eRes = curl_easy_perform(pCurl);
if(eRes == CURLE_OK)
    //success
else
    cout << "curl_easy_perform() failed: " << curl_easy_strerror(eRes) << "\n";

curl_easy_cleanup(pCurl);
curl_global_cleanup();

我意识到这与您想要做的完全不同,但是 curl 可以实现的任何事情都应该可以通过 libcurl API 实现。然后你链接到 libcurl.lib 就完成了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-14
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2019-05-25
    • 1970-01-01
    相关资源
    最近更新 更多