我目前正在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);
这是定义hwid
和ip
的方式;
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
非常感谢任何帮助。
答案 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());