2016-05-13 11 views
0

私の目標は以下のコードで、curlを使用して、提供されたURLに接続するにはurluidPwdで十分かどうかを判断することです。 URLが間違っている場合、curl_easy_performCANNOT_RESOLVE_HOSTを返します。ただし、URLが正常であれば、ユーザーは有効な資格情報を提供しているかどうかにかかわらず、CURLE_OKを返します。私は、なぜこれが起こっているのか理解しています。カールは、資格情報が正しいかどうかにかかわらず、提供された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だけではこれを行う方法がわかりませんでした。しかし、私はlibcURLによって返された結果を解析するためにPugiXMLを使用しており、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; 
     } 
関連する問題