2016-05-13 169 views
0

我的目標是使用curl來確定提供的urluidPwd是否足以連接到提供的URL。如果網址錯誤,curl_easy_perform返回CANNOT_RESOLVE_HOST。但是,如果url正常,則無論用戶是否提供了有效憑證,該調用都會返回CURLE_OK。我明白爲什麼會發生這種情況,curl連接到提供的url,無論憑證是否正確(如果它們不正確,而不是提供所請求的資源,它將返回什麼等於「身份驗證失敗」)。我的問題是,有沒有什麼辦法可以知道認證是否僅僅使用'curl_easy_perform'的返回碼而失敗?如果不是,解決這個問題最簡單的方法是什麼?我不想去解析返回的HTTP的麻煩。使用libcurl驗證用戶憑證

 curl_easy_setopt(curlHandle, CURLOPT_URL, url); 
     curl_easy_setopt(curlHandle, CURLOPT_USERPWD, uidPwd); 
     curl_easy_setopt(curlHandle, CURLOPT_HTTPAUTH, (long)CURLAUTH_ANY); 

     curl_easy_setopt(curlHandle, CURLOPT_WRITEFUNCTION, &BJConnection::writefunc); 
     curl_easy_setopt(curlHandle, CURLOPT_WRITEDATA, &s); 

     returnCode = curl_easy_perform(curlHandle); 
     assert(returnCode == CURLE_OK); 

回答

0

我無法弄清楚如何單獨使用libcURL。但是,我使用PugiXML來解析libcURL返回的結果,並找出了一種解決方法來檢查使用Pugi提供的憑據的有效性。解決方案如下:

 returnCode = curl_easy_perform(curlHandle); 

     pugi::xml_document doc; 
     // We will only be able to load the result into Pugi XML if libcURL 
     // returns XML. HTTP is returned in the event of a login error 
     pugi::xml_parse_result loginSuccess = doc.load_string(s.ptr); 
     if (returnCode != CURLE_OK) { 
      BJTHROWGEN("Error connecting to Bamboo server. cURL return code: " + 
       returnCode); 
     } else if (!loginSuccess) { 
      BJTHROWGEN("Could not login to Bamboo using the provided credientials."); 
     } 
     else { 
      // Success 
      m_isConnected = true; 
     }