2013-04-22 87 views
0

我是新手,正在編寫SOAP Web服務(用於集成目的),以便執行我需要首先驗證用戶(標準集成用戶)的SOAP調用。從Salesforce到Taleo的基本HTTP認證

以下是它的代碼片段。但是,當我執行標註時,它會針對基本Http請求引發錯誤代碼500,併爲第二個Http請求引發錯誤代碼401。

這是正確的方法嗎?

HTTP auth = new HTTP(); 
HTTPRequest r = new HTTPRequest(); 
r.setEndpoint('https://domainname.net/enterprise/soap?ServiceName=IntegrationManagementService'); 
Blob headerValue = Blob.valueOf(username+':'+password); 
String authorizationHeader = 'Basic ' + EncodingUtil.base64Encode(headerValue); 
r.setHeader('Authorization', authorizationHeader); 
r.setMethod('POST'); 

try 
{ 
HTTPResponse authresp = auth.send(r); 
if(authresp.getStatusCode() == 200) 
     { 
      system.debug('Authentication success!!!' + authresp); 
     } 
     else 
     {system.debug('Authentication failed!!!' + authresp + authresp.getStatusCode());}  
     }catch(exception e){} 

    //construct http request 
    string endpointURL = 'https://doaminname.net/enterprise/soap?ServiceName=IntegrationManagementService'; 
    HttpRequest req = new HttpRequest(); 
    req.setMethod('POST'); 

    req.setEndpoint(endpointURL); 
    req.setHeader('Content-Type','application/xml'); 
    req.setBody(TaleoXML); 

    //send http request 
    Http http = new Http(); 
    try 
    { 
     HttpResponse res = http.send(req); 

     //check the response 
     if(res.getStatusCode() == 200) 
     { 
      system.debug('Callout success!!!' + res); 
     } 
     else 
     {system.debug('Callout failed!!!' + res + res.getStatusCode());}  
    }catch(exception e){} 

回答

0

我不熟悉您正在使用這裏的圖書館,但我可以建議幾種可能性進行調查:

  • 基本身份驗證是一個無狀態的方法。您不會登錄並保持登錄狀態。這意味着沒有單獨的初始身份驗證請求(如您的代碼所暗示);每個請求包含Authorization標題。這就是爲什麼你在第二次請求時獲得401

  • 在第一次請求時,您提供的憑據和服務器遇到意外的內部錯誤(這就是500的含義)。如果它包含具有錯誤響應的主體,則可能具有更多信息。我猜想這與你沒有爲你的POST提供正文並且服務器沒有期待那樣的事實有關。

如果這是您第一次使用SOAP,那麼最好使用專用的SOAP庫,而不是嘗試自己構造請求。

0

在第二個請求中,您不包含身份驗證,這就是爲什麼您會收到401(未授權)錯誤。

在第一個請求中,您似乎認證正常,但服務器無法處理請求。我認爲您錯過了要引用您要使用的IntegrationManagementService webservice的功能/操作。或者您正在使用需要啓用MTOM的功能/操作。