cancel
Showing results for 
Search instead for 
Did you mean: 

Call API

aben.cordero
Level 3
Hola, buenos días, tengo un problema relacionado a la configuración de una API. Necesito llamar a una API que posee doble autenticación, el primer POST es por Oauth, luego este me entrega un llave de tipo Bearer que debe ir en el Headers del GET que necesito consultar finamente.
Según la configuración que posee BP en la API, permite solo un "Common Authentication".

Tienen alguna idea de que me puede faltar?
5406.png


------------------------------
Aben Abd-El-Kader
Leader RPA
Banco Santander Chile
America/Santiago
------------------------------
1 BEST ANSWER

Best Answers

PabloSarabia
Level 11
Buenas,

Hace tiempo, tuvimos un problema similar a este con un web api. Y por limitaciones de la versión de BP que teníamos en ese momento la mejor solución fue implementar la llamada por código con un WebRequest y pasandole nosotros mismos los headers.

En este caso, para los barear te valdría poniendo "Barear " + el token que te devuelva.

Al final, tengo la sensación de que si te sales del "ABC" tipico, los asistentes que te dan en BP son algo limitados y lo mas cómodo es tirar de un poco de código para solventarlo. Te pongo por aqui el código resumiedo por si te pudiera ayudar en algo:

Vas a necesitar pasarle los siguientes parametros:
addressUrl = Url donde está el recurso que vas a consultar.
token = el WTJSON que calculas con el método anterior.
body = Tu JSON que quieras tirale al API
resultData = Variable donde se va a almacenar lo que devuelva el metodo.


Dim request As WebRequest = WebRequest.Create(addressURL)
request.Headers.Add("Authorization", "Basic " & token)
request.Method = "POST" 
request.ContentType = "application/json"

Dim requestStream As IO.Stream = request.GetRequestStream()
Using sw As New IO.StreamWriter(requestStream, New Text.UTF8Encoding(False))
sw.Write(body)
End Using

Using response As WebResponse = request.GetResponse()
Dim responseStream As IO.Stream = response.GetResponseStream()
Dim sr As New IO.StreamReader(responseStream)
resultData = sr.ReadToEnd()
End Using


Le faltan try catch y demás para que no se caiga a trozos. pero a modo de resumen creo que está completo

Espero que te haya ayudado.

------------------------------
Pablo Sarabia
Programmer
Altamira AM
------------------------------

View answer in original post

2 REPLIES 2

JoseGleiser
Level 3
Lo que a mi me ha funcionado para usar doble autenticación es implementar como si fuesen 2 API distintas, donde el objetivo de la primera es obtener el bearer token, usando esta como input a la 2da API, por lo que esta 2da API no utilizaría una credencial y solo tendrías que configurar los headers con la variable.

------------------------------
Jose Gleiser
Head of Automation CoE
BCI
America/Santiago
------------------------------

PabloSarabia
Level 11
Buenas,

Hace tiempo, tuvimos un problema similar a este con un web api. Y por limitaciones de la versión de BP que teníamos en ese momento la mejor solución fue implementar la llamada por código con un WebRequest y pasandole nosotros mismos los headers.

En este caso, para los barear te valdría poniendo "Barear " + el token que te devuelva.

Al final, tengo la sensación de que si te sales del "ABC" tipico, los asistentes que te dan en BP son algo limitados y lo mas cómodo es tirar de un poco de código para solventarlo. Te pongo por aqui el código resumiedo por si te pudiera ayudar en algo:

Vas a necesitar pasarle los siguientes parametros:
addressUrl = Url donde está el recurso que vas a consultar.
token = el WTJSON que calculas con el método anterior.
body = Tu JSON que quieras tirale al API
resultData = Variable donde se va a almacenar lo que devuelva el metodo.


Dim request As WebRequest = WebRequest.Create(addressURL)
request.Headers.Add("Authorization", "Basic " & token)
request.Method = "POST" 
request.ContentType = "application/json"

Dim requestStream As IO.Stream = request.GetRequestStream()
Using sw As New IO.StreamWriter(requestStream, New Text.UTF8Encoding(False))
sw.Write(body)
End Using

Using response As WebResponse = request.GetResponse()
Dim responseStream As IO.Stream = response.GetResponseStream()
Dim sr As New IO.StreamReader(responseStream)
resultData = sr.ReadToEnd()
End Using


Le faltan try catch y demás para que no se caiga a trozos. pero a modo de resumen creo que está completo

Espero que te haya ayudado.

------------------------------
Pablo Sarabia
Programmer
Altamira AM
------------------------------