簡體   English   中英

cURL和C ++(libcurl?)

[英]cURL & C++ (libcurl?)

我有些困惑,無法接受我制作的簡單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標志?

感謝您的見解。

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();

我意識到這與您要執行的操作不同,但是使用curlcurl API可以進行curl的所有操作。 然后,您鏈接到libcurl.lib並完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM