2014-04-04 4 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 서버 2008, VS

================ 업데이트를 2010 년 ================ ===== 매개 변수가 잘못되었습니다. 해야한다 : 를 ((ERROR_CODE = curl_easy_setopt (lCurlHandle, CURLOPT_URL, mstrURL c_str())) = CURLE_OK.!)이

+0

소비자 OS에서 개발해야한다는 조의. 귀하의 질문에 대답 할 수는 없지만, 4.4.4.4가 네임 서버가 될 것 같지는 않습니다. 아마 8.8.4.4를 의미했을 것입니다. – fstd

+0

의견을 보내 주셔서 감사합니다. 그러나 그것은 또한 8.8.4.4 –

+0

에 실패합니다. 그러므로 제 "나는 당신의 질문에 대답 할 수 없습니다". 구조화 된 방식으로 문제를 분석 할 수있는 플랫폼을 사용하고자 할 수 있습니다. 유닉스에서, 정확히 무엇이 잘못되었는지 알아 내려면 ktrace를 사용하고 디버거를 사용하여 오류의 일반적인 위치를 확인하십시오. Windows에서 Clippy에게 고객 지원 팀에 문의하십시오. – fstd

답변

0

대부분의 아마 당신이에 대한 libcurl에 말할 것을 잊었다 프록시를 사용하는 경우.

CURLOPT_VERBOSE을 켜면 libcurl에서 무슨 일이 일어나고 어떤 일이 일어나는지에 대한 자세한 정보를 얻을 수 있습니다.

1

비슷한 오류가 발생했습니다. verbose 옵션을 사용하여 로그 메시지를 검사했을 때 curl은 문자열을 전달할 때마다 url을 다시 작성하려고합니다. 그리고 재건 url 프로세스가 잘못된 URL을 생성했습니다. curl_easy_setopt (lCurlHandle, CURLOPT_URL, "http://www.google.com")와 같이 curl_easy_setopt 메서드에 URL을 직접 넣을 때만 작동했습니다. URL을 변수에 넣고 매개 변수에 전달하면 컬이 작동하지 않습니다. 그런 다음 CURLOPT_URL의 설명서를 here에서 확인했습니다. url 매개 변수는 char 포인터 여야합니다. 따라서 문자열 URL을 char 포인터로 변환했습니다.

그래서 내 제안 (아마도) 문자열 mstrURL 숯불 포인터로 변환하고 그것이 작동하는 경우 볼 수 있습니다. std :: string을 사용하면 c_str()을 사용하여이를 char 포인터로 변환 할 수 있습니다.

+0

사실 당신의 답은 그것을 고쳐주었습니다! 고맙습니다! – Chopnut

관련 문제