¿Como obtener cookies en un servicio http_client?

lo he tratado de hacer de varias formas y no logro ver el campo key que contiene la cookie por lo tanto no puedo no puedo loggearme a la url

No se si podrías comentar un poco más el escenario…

Esto en ABAP? Parece desarrollo web :thinking:

Buen día.

Estas tratando de hacer esto en un ambiente web? puedes explicar mas cual es tu caso, o procedimiento que estas realizando.

OK, El requerimiento es consumir Web Service
RESTful XML, ya investigue y subi unos certificados a la STRUS también realice una RFC en la Sm59 y adicional un programa para conectarme (clase http_client ) no logro loggearme por que al parecer necesito obtener información de una cookie y usarla como token, si corrres el servicio desde la web fuera de SAP esto es automático me loggea y me regresa un xml.
Ya intente un buen de métodos y no logro ver las cookies y menos setearla al llamado posterior. ojala me explique bien.
Saludos!

1 me gusta

Mi pregunta es: Si desde fuera de SAP te estas logueando correctamente, porque desde ABAP necesitas una cookie? si es un Restful, con los mismos parámetros de acceso al API puedes extraer lo mismo, de lo contrario te deben de proporcionar las constantes para conectarte de manera correcta al API.

El proveedor no me da mas información supongo que no conoce

Por fuera de SAP con que lenguaje es con lo que estas consumiendo el Rest?

chrome-extension://aejoelaoggembcahagimdiliamlcdmfm/restlet_client.html#requests

Buenas,
yo consumo web service rest api y lo primero que tengo que hacer es una petición (post por ejemplo) a un servicio concreto que me devuelve un token. En un segundo paso, hago otra petición usando ese token a otro servicio que es el que ya me devuelve un json con los datos por ejemplo de facturas.

2 Me gusta

@Salco
¿podrías compartirme ese código?
me serviría mucho ver como lo haces ya que yo sigo atorado

  1. Se pide token (se asume que el certificado está instalado en la STRUST y los puertos abiertos en ICM)
  CALL METHOD CL_HTTP_CLIENT=>CREATE
    EXPORTING
      HOST          = 'XXX.XXX'  "--->>> aqui tu nombre de host
      SCHEME        = '2'    "--->>> HTTPS
      SSL_ID        = 'DFAULT'  "--->>> aqui tu pse de la STRUST
    IMPORTING
      CLIENT        = HTTP_CLIENT.

CALL METHOD HTTP_CLIENT->REQUEST->SET_HEADER_FIELD(
  NAME = '~request_method'
  VALUE = 'POST' ).

  CALL METHOD HTTP_CLIENT->REQUEST->SET_HEADER_FIELD
    EXPORTING
      NAME  = '~request_uri'
      VALUE = '/rest-service/api/v1/auth'. "--->>> url del api rest de petición de token

  CALL METHOD HTTP_CLIENT->REQUEST->SET_HEADER_FIELD
    EXPORTING
*   name  = '~server_protocol'             " <<<--- DELETE
      NAME  = '~request_protocol'         " <<<-- INSERT must be request
      VALUE = 'HTTP/1.1'.

CALL METHOD HTTP_CLIENT->REQUEST->SET_FORM_FIELD
    EXPORTING
      NAME  = 'user'         " <<<-- INSERT must be request
      VALUE = 'XXXXXXXXX.

CALL METHOD HTTP_CLIENT->REQUEST->SET_FORM_FIELD
    EXPORTING
      NAME  = 'pass'         " <<<-- INSERT must be request
      VALUE = 'ZZZZZZZZ'.

CALL METHOD HTTP_CLIENT->SEND
  EXCEPTIONS
    HTTP_COMMUNICATION_FAILURE = 1
    HTTP_INVALID_STATE         = 2.

CALL METHOD HTTP_CLIENT->RECEIVE
  EXCEPTIONS
    HTTP_COMMUNICATION_FAILURE = 1
    HTTP_INVALID_STATE         = 2
    HTTP_PROCESSING_FAILED     = 3.

HTTP_CLIENT->RESPONSE->GET_STATUS( IMPORTING CODE = LV_LAST_ERROR ).
* IF ERROR = '200' --> ENTONCES HA IDO BIEN
  1. Con el token se hace la petición de consulta de datos
  CALL METHOD CL_HTTP_CLIENT=>CREATE
    EXPORTING
      HOST          = 'XXX.XXX'  "--->>> aqui tu nombre de host
      SCHEME        = '2'  "--->>> HTTPS
      SSL_ID        = 'DFAULT' 
    IMPORTING
      CLIENT        = HTTP_CLIENT.


CALL METHOD HTTP_CLIENT->REQUEST->SET_HEADER_FIELD(
  NAME = '~request_method'
  VALUE = 'POST' ).

  CALL METHOD HTTP_CLIENT->REQUEST->SET_HEADER_FIELD
    EXPORTING
      NAME  = '~request_uri'
      VALUE = '/rest-service/api/v1/bookeeping'. "--->>> el método de consulta


  CALL METHOD HTTP_CLIENT->REQUEST->SET_HEADER_FIELD
    EXPORTING
      NAME  = '~request_protocol'
      VALUE = 'HTTP/1.1'.


CALL METHOD HTTP_CLIENT->REQUEST->SET_HEADER_FIELD(
  NAME = 'Authorization'
  VALUE = LV_TOKEN ).  "--->>> en esta variable está el token recibido del paso 1

 CALL METHOD HTTP_CLIENT->REQUEST->SET_HEADER_FIELD
      EXPORTING NAME  = 'Content-Type'
                VALUE = 'application/json'.
*
* Rellenar la variable json_response con el json de petición
*
CALL METHOD HTTP_CLIENT->REQUEST->SET_CDATA(
    EXPORTING
      DATA   = JSON_RESPONSE    " Character data
*        offset = 0    " Offset into character data
*        length = -1    " Length of character data
  ).

CALL METHOD HTTP_CLIENT->SEND
  EXCEPTIONS
    HTTP_COMMUNICATION_FAILURE = 1
    HTTP_INVALID_STATE         = 2.

CALL METHOD HTTP_CLIENT->RECEIVE
  EXCEPTIONS
    HTTP_COMMUNICATION_FAILURE = 1
    HTTP_INVALID_STATE         = 2
    HTTP_PROCESSING_FAILED     = 3.
3 Me gusta

enseguida lo tratare de implementar así, Muchas Gracias !:partying_face:

Ya logre conectarlo…Muchas Gracias @Salco
Lo documento y lo pongo aquí por si alguien mas lo ocupa
no es igual a la solución de Salco pero me dio mucha Idea .
GRACIAS!!:v:

1 me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.