我使用了Curl 7.2.9并以这种方式检查连接:
以下是示例:
curl = curl_easy_init();
bool result = false;
if(curl)
{
curl_easy_setopt(curl, CURLOPT_URL, m_checkConnectionUrl);
CURLcode res = curl_easy_perform(curl);
}
if(res != CURLE_OK)
{
}
else
{
// connection is available
}
现在我切换到curl-7.33.0并得到* CURLE_WRITE_ERROR *错误, 为了使它工作,我必须像
一样编码std::string output;
char* encodedUrl = curl_easy_escape(curl, m_checkConnectionUrl, 0);
curl_easy_setopt(curl, CURLOPT_POST, 0);
curl_easy_setopt(curl, CURLOPT_URL, encodedUrl);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeMemoryCurlCallbackStub);
CURLcode res = curl_easy_perform(curl);
但我不需要写任何东西。有什么想法吗?
答案 0 :(得分:0)
Manily the Curl选项* CURLOPT_WRITEFUNCTION *用于定期(在回调函数中)有一定数量的数据来处理大文件下载。无论版本如何,我认为没有理由将此用于您的卷曲目的。
从代码中删除* CURLOPT_POST *(默认为0)和* CURLOPT_WRITEFUNCTION *,它应该可以工作。如果没有,那么你在代码中的其他地方做错了什么!
另外,如果您正在检查URL是否正常,那么使用CURL就可以了。但是,只检查连接,您只能检查域的端口80是否打开。
答案 1 :(得分:0)
您还需要编写一个writecallback
size_t CurlWriteCallback(char* buf, size_t size, size_t nmemb, void* up)
{
TRACE("CURL - Response received:\n%s", buf);
TRACE("CURL - Response handled %d bytes:\n%s", size*nmemb);
// tell curl how many bytes we handled
return size*nmemb;
}
if(curl)
{
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &CurlWriteCallback);
curl_easy_setopt(curl, CURLOPT_URL, m_checkConnectionUrl);
CURLcode res = curl_easy_perform(curl);
}