我使用curl访问指定网址中的文件。我使用VC ++ 2010和curl 7.21.2(我自己编译)和wxWidgets用户界面(除了curl之外都是内置的unicode)。我在发布版本中没有问题但是相同的代码(如下)在调试版本中因同一个网址的CURLE_COULDNT_RESOLVE_HOST错误而失败。
以下是代码:
CURL * pEasyHandle = curl_easy_init();
if(!pEasyHandle)
return wxEmptyString;
CURLcode curlcode;
curlcode = curl_easy_setopt(pEasyHandle, CURLOPT_VERBOSE, 1); // this is in ifdef _DEBUG actually
curlcode = curl_easy_setopt(pEasyHandle, CURLOPT_HTTPGET, 1);
curlcode = curl_easy_setopt(pEasyHandle, CURLOPT_URL, url.ToStdString());
curl_easy_setopt(pEasyHandle, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(pEasyHandle, CURLOPT_TIMEOUT, 10);
curl_easy_setopt(pEasyHandle, CURLOPT_CONNECTTIMEOUT , 10);
wxString fileListString = wxEmptyString;
curl_easy_setopt(pEasyHandle, CURLOPT_WRITEDATA, &fileListString);
curlcode = curl_easy_perform(pEasyHandle); // post away!
if(curlcode == CURLE_OK)
{
// cannot enter here in debug mode
}
else
{
m_errorString = curl_easy_strerror(curlcode);
wxMessageBox(m_errorString);
}
curl_easy_cleanup(pEasyHandle);
答案 0 :(得分:2)
以下行似乎是问题所在:
curlcode = curl_easy_setopt(pEasyHandle, CURLOPT_URL, url.ToStdString());
如果我的假设是正确的,ToStdString返回一个std :: string而不是一个C字符串。 curl是一个C库,因此它需要char *
- s。
你能说出网址的类型吗?
答案 1 :(得分:0)
您可以将url.ToStdString()
替换为url.c_str()
。