从Salesforce到Taleo的基本HTTP身份验证
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Salesforce到Taleo的基本HTTP身份验证相关的知识,希望对你有一定的参考价值。
我是一个新手,正在编写SOAP Web服务(用于集成目的),为了执行SOAP调用,我需要首先验证用户(标准集成用户)。
以下是它的代码片段。但是,当我执行callout时,它会为Basic 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){}
答案
我不熟悉你在这里使用的库,但我可以建议一些调查的可能性:
- 基本身份验证是一种无状态方法。您没有登录并保持登录状态。这意味着没有单独的初始身份验证请求(如您的代码所暗示的);每次请求都包含
Authorization
标头。这就是为什么你在第二次请求时获得401的原因。 - 在第一个请求中,您提供凭据,服务器遇到意外的内部错误(这就是500的意思)。如果它包含具有错误响应的正文,则可能包含更多信息。我猜这与你没有提供你的POST机构以及服务器没有预料到这一事实有关。
如果这是您第一次使用SOAP,那么最好使用专用的SOAP库,而不是尝试自己构建请求。
另一答案
在第二个请求中,您不包含身份验证,这就是您收到401(未授权)错误的原因。
在第一个请求中,您似乎认证正常,但服务器无法处理请求。我想你错过了引用你想要使用的IntegrationManagementService webservice的功能/操作。或者您正在使用需要启用MTOM的功能/操作。
以上是关于从Salesforce到Taleo的基本HTTP身份验证的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Taleo 连接客户端(TCC)导出文件发送到 s3
用于从 Salesforce 在 android 移动应用程序上发送通知的 GCM