DÚVIDA RETORNO API/JSON
Pessoal, estou fazendo login em uma API e em caso de login inválido, retorna no json apenas 2 campos :
success:1
logout:1
caso contrário todos os demais campos, minha dúvida, como faço pra testar se o login falhou através de "logout:1", uma vez que o status code retorna 200 mesmo nesta situação ?
success:1
logout:1
caso contrário todos os demais campos, minha dúvida, como faço pra testar se o login falhou através de "logout:1", uma vez que o status code retorna 200 mesmo nesta situação ?
Alterado em 17/07/2023 19:21:45
Vou postar o código com restsharp, esta em vb.net, estou fazendo o login e pegando o cookie, mas no segundo bloco que faço o upload, da erro de login, mas estou passando o cookie conforme solicitado, os dados são do ambiente de testes, se alguém quiser testar, pode usar que vai logar, upload pode ser qq arquivo.
Dim client = New RestClient("https://apis.averbeporto.com.br/php/conn.php")
Dim request = New RestRequest()
request.Method = Method.POST
request.AddHeader("Content-Type", "application/x-www-form-urlencoded")
request.AddParameter("mod", "login")
request.AddParameter("comp", "5")
request.AddParameter("user", "00000001000136")
request.AddParameter("pass", "0000")
Dim response = client.Execute(request)
Dim Ncookie As String = response.Cookies(0).Name
Dim Vcookie As String = response.Cookies(0).Value.ToString
If Ncookie <> "portal[ses]" Then
MsgBox("Login Inválido, Verifique")
Exit Sub
End If
'Upload
request = New RestRequest()
request.Method = Method.POST
request.AddHeader("Content-Type", "multipart/form-data")
request.AddParameter("comp", "5")
request.AddParameter("mod", "upload")
request.AddParameter("path", "eguarda/php/")
request.AddParameter("recipient", "T")
'request.AddCookie(Ncookie, Vcookie)
request.AddParameter( "Cookie", Ncookie + "=" + Vcookie)
request.AddFile("fileData", "c: este\NFe35230722918016000110550010000008471000213127.xml")
response = client.Execute(request)
Dim client = New RestClient("https://apis.averbeporto.com.br/php/conn.php")
Dim request = New RestRequest()
request.Method = Method.POST
request.AddHeader("Content-Type", "application/x-www-form-urlencoded")
request.AddParameter("mod", "login")
request.AddParameter("comp", "5")
request.AddParameter("user", "00000001000136")
request.AddParameter("pass", "0000")
Dim response = client.Execute(request)
Dim Ncookie As String = response.Cookies(0).Name
Dim Vcookie As String = response.Cookies(0).Value.ToString
If Ncookie <> "portal[ses]" Then
MsgBox("Login Inválido, Verifique")
Exit Sub
End If
'Upload
request = New RestRequest()
request.Method = Method.POST
request.AddHeader("Content-Type", "multipart/form-data")
request.AddParameter("comp", "5")
request.AddParameter("mod", "upload")
request.AddParameter("path", "eguarda/php/")
request.AddParameter("recipient", "T")
'request.AddCookie(Ncookie, Vcookie)
request.AddParameter( "Cookie", Ncookie + "=" + Vcookie)
request.AddFile("fileData", "c: este\NFe35230722918016000110550010000008471000213127.xml")
response = client.Execute(request)
Você não consegue adicionar uma resposta, umas string caso registro não encontrado ?.
Se foi você mesmo criou a API com certeza.
Se foi você mesmo criou a API com certeza.
A api é da seguradora, é usada para averbação de seguros, mas ela não usa token, usa cookie, tem que fazer o login, pegar o cookie e depois passar ele no upload.
Bom, é uma dúvida conceitual. Status code é "que fim levou essa operação"? Se for 200, significa que o servidor recebeu e o pacote recebido é aceitável. O conteúdo da resposta é o que deve ser avaliado, no seu caso, basta desserializar esse conteúdo.
Depois de alguns ajustes, conseguir fazer o login, receber o cookie para fazer o upload, estou recebendo o erro:
{"success":1,"S":{"P":0,"D":0,"R":1,"N":0},"prot":[],"error":{"msg":"Error opening ZIP","code":"01"}, é algo em relação ao formato do arquivo q estou enviando, no caso xml. Minha rotina esta em vb.net, fiz uma conversão e nessa linha abaixo, que esta em c# o que signifca a @ ?, pergunto, porque na conversão pra vb.net, essa @, acusa erro.
var responseBytes = oWeb.UploadFile(link, @"C:\Teste\XML0702794600019004-05-20188001.xml");
{"success":1,"S":{"P":0,"D":0,"R":1,"N":0},"prot":[],"error":{"msg":"Error opening ZIP","code":"01"}, é algo em relação ao formato do arquivo q estou enviando, no caso xml. Minha rotina esta em vb.net, fiz uma conversão e nessa linha abaixo, que esta em c# o que signifca a @ ?, pergunto, porque na conversão pra vb.net, essa @, acusa erro.
var responseBytes = oWeb.UploadFile(link, @"C:\Teste\XML0702794600019004-05-20188001.xml");
Me parece que ele espera um arquivo ZIP...
A arroba, indica uma string literal. No VB.NET esse conceito só se aplicaria se sua string contivesse aspas duplas. Resumindo, pode simplesmente tirar.
A arroba, indica uma string literal. No VB.NET esse conceito só se aplicaria se sua string contivesse aspas duplas. Resumindo, pode simplesmente tirar.
Deu certo o login e o upload, estou jogando a resposta ou retorno em um json para pegar o protocolo:
Dim JSON As JObject
JSON = JObject.Parse(resposta)
Dim iprot As String = Convert.ToString(JSON("prot"))
a variável fica com o seguinte formato [ "000000000000000000000000"].
Como pego o conteúdo numérico apenas ?, tem jeito de pegar direto ou é necessário fazer tratamento ?
Dim JSON As JObject
JSON = JObject.Parse(resposta)
Dim iprot As String = Convert.ToString(JSON("prot"))
a variável fica com o seguinte formato [ "000000000000000000000000"].
Como pego o conteúdo numérico apenas ?, tem jeito de pegar direto ou é necessário fazer tratamento ?
Te passei um exemplo completinho com a desserialização, porque não usar ele? Nele, os tipos já estão todos certos.
Alterado em 19/07/2023 17:20:51
Porque o projeto todo esta em vb.net, essa averbação é só uma função de um projeto bem grande. Mas eu vou tentar aproveitar o que vc fez para uma migração que estou pretendendo fazer. Agradeço pela ajuda.
Tópico encerrado , respostas não são mais permitidas