2014-04-04 32 views
0

的代碼片段如下:用c「不能解析主機」錯誤libcurl中++

const int BUFFERSIZE = 50*1024; 
char lLoadedData[BUFFERSIZE]; 
memset(lLoadedData, 0, sizeof(lLoadedData)); 

mstrURL = "http://www.google.com"; 
CURL* lCurlHandle = curl_easy_init(); 
if (lCurlHandle) 
{ 
    //url 
    if ((error_code = curl_easy_setopt(lCurlHandle, CURLOPT_URL, mstrURL)) != CURLE_OK) 
     return; 

    if((error_code = curl_easy_setopt(lCurlHandle, CURLOPT_WRITEDATA, (void *)lLoadedData)) != CURLE_OK) 
     return; 

    error_code = curl_easy_perform(lCurlHandle); 

    if (error_code == CURLE_OK) 
    {   
       ... 
     } 
} 

執行curl_easy_perform後的ERROR_CODE()是CURLE_COULDNT_RESOLVE_HOST。

我已將DNS服務器更改爲8.8.8.8和4.4.4.4,但error_code仍未更改。

有誰知道如何解決這個問題?謝謝!

環境:Windows Server 2008中,2010年VS

================更新================ ===== 似乎參數是錯誤的。應該是:如果 ((錯誤代碼= curl_easy_setopt(lCurlHandle,CURLOPT_URL,mstrURL c_str()))= CURLE_OK!)

+0

我對在一個消費者操作系統上開發表示哀悼。我無法回答你的問題,但我可以告訴你,4.4.4.4不太可能是名稱服務器。你可能意思是8.8.4.4。 – fstd

+0

感謝您的評論。但它也沒有在8.8.4.4 –

+0

是,因此我'''我不能回答你的問題''。您可能想要使用一個平臺,以便您以結構化的方式分析問題。在unix上,我會跟蹤它以確定究竟出了什麼問題,然後使用調試器來查找錯誤的大致位置。在Windows上,我會問Clippy,然後致電客戶支持。 – fstd

回答

0

最大的可能是你使用,你忘了告訴libcurl的代理。

您可以打開CURLOPT_VERBOSE以從libcurl獲取有關其功能和發生情況的更多信息。

1

我有類似的錯誤。當我通過啓用詳細選項檢查日誌消息時,curl會嘗試重建url,只要我將它作爲字符串傳遞。重建url過程產生了一個無效的url。 它只有當我把URL直接放在curl_easy_setopt方法上時才起作用,例如:curl_easy_setopt(lCurlHandle,CURLOPT_URL,「http://www.google.com」)。如果我把url放入一個變量並傳遞參數,curl將不起作用。 但之後,我查看了here中的CURLOPT_URL手冊。 url參數應該是char指針。因此,我將字符串url轉換爲字符指針。

所以我的建議是將您的(可能)字符串mstrURL轉換爲字符指針,並讓它看看它是否工作。如果使用std :: string,則可以使用c_str()將其轉換爲字符指針。

+0

其實你的答案固定它大聲笑!謝謝! – Chopnut