使用C ++中的预定义变量发出cURL GET请求

时间:2017-11-12 10:15:03

标签: c++ http curl get

我目前正在macOS上编写一个C ++程序,它要求我们从用户那里获取两个变量,即HWID和IP地址,并在get请求中使用它们,如此;

CURL* curl;
string result;

curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "website.com/c.php?ip=" + ip + "&hwid=" + hwid);

这是定义hwidip的方式;

auto hwid = al.exec("ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { print $3; }'");

auto ip = al.exec("dig +short myip.opendns.com @resolver1.opendns.com.");

请记住,al.exec只是一个执行并返回终端命令输出的函数。

然而,做这一切的问题是,我为params提供了curl_easy_setopt不正确的类型......我在制作GET请求时遇到了这些错误,如前面的示例所示;

Cannot pass object of non-trivial type 'basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >' through variadic function; call will abort at runtime

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

cURL库是 C 库,其所有功能都是 C 功能。因此,他们无法处理像std::string这样的对象。当您执行"website.com/c.php?ip=" + ip + "&hwid=" + hwid时,结果 一个std::string对象。

解决此问题的一种方法是将"website.com/c.php?ip=" + ip + "&hwid=" + hwid的结果保存在变量中,然后将该变量与c_str函数一起使用以获得C样式的字符串:

std::string url = "website.com/c.php?ip=" + ip + "&hwid=" + hwid;
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());

答案 1 :(得分:1)

您应准备一个const char*来致电curl_easy_setopt()

std::ostringstream oss;
oss << "website.com/c.php?ip=" << ip << "&hwid=" << hwid;
std::string url = oss.str();
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());