2016-05-13 8 views
0

Mein Ziel mit dem folgenden Code ist es, mit curl festzustellen, ob die bereitgestellten url und uidPwd ausreichen, um eine Verbindung zur angegebenen URL herzustellen. Wenn die URL falsch ist, gibt curl_easy_performCANNOT_RESOLVE_HOST zurück. Wenn die URL jedoch in Ordnung ist, gibt der Aufruf CURLE_OK zurück, unabhängig davon, ob der Benutzer gültige Anmeldeinformationen eingegeben hat oder nicht. Ich verstehe, warum dies passiert, curl verbindet sich mit der angegebenen URL, unabhängig davon, ob die Credentials korrekt sind oder nicht (wenn sie nicht korrekt sind, anstatt die angeforderte Ressource zur Verfügung zu stellen, wird "Authentifizierung fehlgeschlagen" zurückgegeben). Meine Frage ist, gibt es eine Möglichkeit zu wissen, ob die Authentifizierung fehlgeschlagen ist mit nichts mehr als den Return-Code von 'curl_easy_perform'? Wenn nicht, was wäre der einfachste Weg, um dieses Problem zu lösen? Ich möchte nicht die Mühe machen, das zurückgegebene HTTP zu analysieren.Überprüfen von Benutzer-Credentials mit 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); 

Antwort

0

Ich konnte nicht herausfinden, wie dies mit libcURL allein zu tun. Allerdings verwende ich PugiXML, um das von libcURL zurückgegebene Ergebnis zu analysieren, und habe eine Problemumgehung gefunden, um die Gültigkeit der angegebenen Anmeldeinformationen mit Pugi zu überprüfen. Hier ist die Lösung:

 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; 
     }