卷曲 - 检查连接

时间:2013-12-25 14:11:07

标签: c++ curl

我使用了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);

但我不需要写任何东西。有什么想法吗?

2 个答案:

答案 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);
}