Базовая HTTP-аутентификация от Salesforce до Taleo

Я новичок и пишу веб-сервис SOAP (для целей интеграции), чтобы выполнить вызов SOAP, мне сначала нужно аутентифицировать пользователя (стандартного пользователя интеграции).

Ниже приведен фрагмент кода для этого. Однако, когда я выполняю обратный вызов, он генерирует код ошибки 500 для запроса Basic Http и код ошибки 401 для второго запроса Http.

Это правильный подход?

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){}  

2 ответа

Во втором запросе вы не включаете Аутентификацию, поэтому вы получаете ошибку 401 (Несанкционированный).

В первом запросе кажется, что вы проходите проверку подлинности, но сервер не может обработать запрос. Я думаю, что вы пропустили ссылку на функцию / работу веб-службы IntegrationManagementService, которую вы хотите использовать. Или вы используете функцию / операцию, для которой необходимо включить MTOM.

Я не знаком с библиотекой, которую вы используете здесь, но я могу предложить несколько возможностей для исследования:

  • Базовая аутентификация - это метод без сохранения состояния. Вы не авторизуетесь и остаетесь зарегестрированным. Это означает, что нет отдельного начального запроса аутентификации (как и предполагает ваш код); Вы включаете Authorization заголовок с каждым запросом. Вот почему вы получаете 401 по второму запросу.

  • При первом запросе вы предоставляете учетные данные, а на сервере произошла непредвиденная внутренняя ошибка (что означает 500). Если он включает тело с ответом об ошибке, он может иметь больше информации. Я предполагаю, что это связано с тем, что вы не предоставили тело с вашим POST, а сервер этого не ожидал.

Если вы впервые используете SOAP, вам лучше использовать выделенную библиотеку SOAP, а не пытаться создавать запросы самостоятельно.

Другие вопросы по тегам