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
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!
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.
- 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
- 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.
enseguida lo tratare de implementar así, Muchas Gracias !
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!!
Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.