Spanish Problemas con https

Santiago Russo

Member
Licensed User
Buenos días. Comento mi problema.
Hemos puesto en el Server un certificado. Por lo cual, para conectarnos, ahora usamos https. Bueno, a partir de allí, no hemos podido conectarnos más.
El error que indica es que "no pasamos el user y la contraseña", pero antes salía otro.
Pongo parte del código para que lo vean.

B4A:
Private j As HttpJob
cadena = "{""email"":""" & [email protected] & """,""password"":""" & 123456 & """}"
j.Initialize("", Me)
               
j.PostString("https://api.somostally.com/api/auth/login", cadena)
j.GetRequest.SetHeader("Content-Type", "application/json")
j.GetRequest.SetHeader("X-Requested-With", "XMLHttpRequest")
Wait For (j) jobdone (j As HttpJob)
If j.Success Then
    ' ...
Else
    ' ...
    Log("Usuario no autorizado o no existe. Seleccione en ""Soy nuevo"" para registrarse. " & j.ErrorMessage)
End if

Probé con poner un user y pass en j.username y j.password y la respuesta fue la misma.

El error es: ResponseError. Reason: Unprocessable Entity, Response: {"error":{"email":["El campo email es obligatorio."],"password":["El campo password es obligatorio."]},"code":422}
Anteriormente el error era: Usuario no autorizado o no existe. Seleccione en "Soy nuevo" para registrarse. javax.net.ssl.SSLException: hostname in certificate didn't match: <api.somostally.com> != <server57.somostally.com> OR <server57.somostally.com>
Esto cambió cuando cree el usuario desde Posman, no desde la App, porque no se puede.

Bueno, espero haber sido claro.

Gracias.
 
Last edited:

Alberto Michelis

Well-Known Member
Licensed User
Longtime User
Proba agregando esto:
j.GetRequest.SetHeader("email", "xxxxxx@xxxxxxxxx")
j.GetRequest.SetHeader("password", "yyyyyyyyyyyyy")
 

Alberto Michelis

Well-Known Member
Licensed User
Longtime User
El server es tuyo? lo programaste vos? podes conectarte con Postman? es probable que necesites tener un certificado del lado cliente, pero lo deberias saber.
 

Santiago Russo

Member
Licensed User
El Server es nuestro, lo programó mi compañero. Y puedo conectarme perfectamente con Postman. Solamente pongo los mismos datos que aquí y devuelve la conexión de manera correcta.
Adjunto imágenes con Postman.
 

Attachments

  • Postman02.png
    Postman02.png
    37.8 KB · Views: 270
  • Postman01.png
    Postman01.png
    39.5 KB · Views: 278

Alberto Michelis

Well-Known Member
Licensed User
Longtime User
supongo entonces debe ser que la app no levanta el certificado que necesita para conectarse al server, existira un postman para android y probar con eso?
 

josejad

Expert
Licensed User
Longtime User
Hola Santiago:

Yo tengo el mismo error haciendo tu petición desde Firefox con la extensión RESTClient.
No tengo mucha idea de esto, pero veo que hay un toquen por ahí. No tienes antes que hacer por algún sitio:
B4X:
JobNDLogin.GetRequest.SetHeader("Authorization","Bearer "&access_token )
?

1585745238247.png


Encuentro esto:
 

Santiago Russo

Member
Licensed User
En realidad, todavía no tenemos el token del usuario. Hay que conectarse y ahí podemos obtenerlo.
En el código, luego de j.succes, está la recuperación de ese token, pero no llego hasta ahí porque no permite el logueo.

En tu Firefox podes probar con:
email: [email protected]
password: 123

Y creo que sí se te va a conectar. No me pasa a mí igual en la App. Algo falta aquí.
 

Santiago Russo

Member
Licensed User
supongo entonces debe ser que la app no levanta el certificado que necesita para conectarse al server, existira un postman para android y probar con eso?
Encontré uno, lo hace bien. Pero en mi App sigue fallando.
Vistas en el celular.
 

Attachments

  • RestAPI03.jpeg
    RestAPI03.jpeg
    88.7 KB · Views: 262
  • RestAPI02.jpeg
    RestAPI02.jpeg
    100.6 KB · Views: 237
  • RestAPI01.jpeg
    RestAPI01.jpeg
    144.6 KB · Views: 255

Alberto Michelis

Well-Known Member
Licensed User
Longtime User
un tiro al aire , proba agregando:
h.GetRequest.SetHeader("Accept-Encoding", "identity") 'desactiva la compresion, importante para servers NT
despues del post
 

josejad

Expert
Licensed User
Longtime User

TILogistic

Expert
Licensed User
Longtime User
Veo como creas el JSON... revisalo.

B4X:
Dim cadena As Map = CreateMap("email": "[email protected]", "password": "123")
Dim jq As JSONGenerator
jg.Initialize(cadena)
j.Initialize("", Me)
j.PostString("https://api.somostally.com/api/auth/login", jg.ToString)

???

B4X:
cadena = "{""email"":""" & [email protected] & """,""password"":""" & 123456 & """}"
j.Initialize("", Me)
           
j.PostString("https://api.somostally.com/api/auth/login", cadena)
 
Last edited:

TILogistic

Expert
Licensed User
Longtime User
Tips de APIS

PHP:
/*
    * API Response HTTP CODE
    * Used as reference for API REST Response Header
    * 200     OK
    * 201     Created
    * 304     Not Modified
    * 400     Bad Request
    * 401     Unauthorized
    * 403     Forbidden
    * 404     Not Found
    * 422     Unprocessable Entity
    * 500     Internal Server Error
    *
    * Los headers permiten el acceso a nuestra REST API desde otro dominio (CORS) o desde un cliente remoto via HTTP
    * Removiendo las lineas header() limitamos el acceso a nuestro RESTfull API.
    * Nota:
    * los métodos permitidos en Access-Control-Allow-Methods, limita los métodos de consulta a nuestro RESTfull API
    * Mas información: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
*/

    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Credentials: true");
    header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");
    header("Access-Control-Allow-Headers: X-Requested-With");
    header("Content-type: application/json; charset=UTF-8");
 

Santiago Russo

Member
Licensed User
Bueno. Poniendo ContentType... funcionó.
Ahora mi duda es, hasta hace unos días la cosa funcionaba bien, de repente empezó a salir esto. ¿Alguien tiene una explicación coherente?
Bueno, gracias miles igualmente.
Pongo como quedó el pedacito de código. También arreglé lo de JSON.

B4A:
Private MIJSON As Map = CreateMap("email": email.Text, "password": contrasenia.Text)
Private gn As JSONGenerator
Private cadena As String
gn.Initialize(MIJSON)
cadena = gn.ToPrettyString(2)
j.Initialize("https", Me)
j.PostString(Starter.cadenaconexion & "auth/login", cadena)  ' https://api.somostally.com/api/
J.GetRequest.SetContentType("application/json;charset=UTF-8")
j.GetRequest.SetHeader("Content-Type", "application/json")
j.GetRequest.SetHeader("X-Requested-With", "XMLHttpRequest")
Wait For (j) jobdone (j As HttpJob)
If j.Success Then
  ...
End If

Realmente me desconcertó la cosa.
 
Top