Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 3 Semanas
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 418
Poder: 16
IVAND Va por buen camino
Invocar un api rest con headers

Estimados amigos

Tengo una inquietud y es la conexion a un web service q se debe pasar un request , pero no logro hacerlo o no entiendo muy bien como configurar el componete IdHTTP1 para tal fin , aqui se ha hablado de varias formas de incovar este tema pero no logro hacerlo con estos headers


Contando con ustedes quedo a sus ordenes


URL

https://inprise.integral.ec/api/cons...=1308325354001

Nota : Estoy usando un sistema de ejemplo de nuesto amigo neptali
el error self.Fhttp.ResponseCode es -1



X-MANTISAPI-CODE eeXahKo8 -> headers

he intentado varias formas ejmplo
HeaderStr = 'X-MANTISAPI-CODE: eeXahKo8';
IdHttp1.Request.CustomHeaders.Values[HeaderStr];

sale eror IOHandler value is not valid
self.Fhttp.ResponseCode da como resultado -1

El ejemplo que utilizo es el de nuestro amigo neftali
__________________
IVAND

Última edición por IVAND fecha: Hace 3 Semanas a las 04:30:13.
Responder Con Cita
  #2  
Antiguo Hace 3 Semanas
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 418
Poder: 16
IVAND Va por buen camino
Unhappy

creo q el problema es porque no se como enviar estos argumentos

self.Fhttp.Request.CustomHeaders.Add('key=X-MANTISAPI-CODE'+'value='+'eeXahKo8') ;
__________________
IVAND
Responder Con Cita
  #3  
Antiguo Hace 3 Semanas
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.688
Poder: 28
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Lo siguiente parece funcionar como se espera:

Código Delphi [-]
IdHTTP1.Request.CustomHeaders.AddValue('X-MANTISAPI-CODE', 'eeXahKo8');
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #4  
Antiguo Hace 3 Semanas
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 418
Poder: 16
IVAND Va por buen camino
Hola Dec

Gracias por tu respuesta y disculpa pero recien puedo entrar a revisar los correos

Mira uso indy 10.2.5 y delphi 2009 , esa propiedad que me indicas no aparece en mi version solo aparecen add y no funciona con esos dos parametros .
__________________
IVAND
Responder Con Cita
  #5  
Antiguo Hace 2 Semanas
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.688
Poder: 28
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Yo creo que uso Indy 10... pero es cierto que probé en Delphi 2007 (lo que tenía más a mano). Mira a ver si esto otro sirve, puesto que aquí parece funcionar también:

Código Delphi [-]
IdHTTP1.Request.CustomHeaders.Values['X-MANTISAPI-CODE'] := 'eeXahKo8';
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #6  
Antiguo Hace 2 Semanas
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 418
Poder: 16
IVAND Va por buen camino
Gracias Dev , por tu amable dedicacion ,

Mira logre consumir el servicio de esta manera como es uan pagina https

agrege esto

Código Delphi [-]
procedure TForm1.btn1Click(Sender: TObject);
var
Urls:string ;
LHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  IdHTTP1.Request.CustomHeaders.Values['X-MANTISAPI-CODE'] := 'eeXahKo8';
  IdHTTP1.IOHandler:=LHandler;
  memo1.Lines.Add(IdHTTP1.Get('https://inprise.integral.ec/api/consulta-identificacion/?identificacion=1308325354001'));
end;

Recibo ya la informacion , pero de una manera muy rara , como si fuera una pagina web que se embebe en un navegador , los datos que debe emviar son

Código PHP:
to `json`">json</a>
                        </li>
                      
                        <li>
                          <a class="
js-tooltip format-option" href="/api/consulta-identificacion/?format=api&amp;identificacion=1308325354001" rel="nofollow" title="Make a GET request on the Consulta Datos Identificacion resource with the format set to `api`">api</a>
                        </li>
                      
                    </ul>
                  </div>
                
              </fieldset>
            </form>
          

          
            <form class="
button-form" action="/api/consulta-identificacion/?identificacion=1308325354001" data-method="OPTIONS">
              <button class="
btn btn-primary js-tooltip" title="Make an OPTIONS request on the Consulta Datos Identificacion resource">OPTIONS</button>
            </form>
          

          

          
          </div>

            <div class="
content-main" role="main"  aria-label="main content">
              <div class="
page-header">
                <h1>Consulta Datos Identificacion</h1>
              </div>
              <div style="
float:left">
                
                  <p></p>
                
              </div>

              

              <div class="
request-info" style="clearboth" aria-label="request info">
                <pre class="
prettyprint"><b>GET</b> /api/consulta-identificacion/?identificacion=1308325354001</pre>
              </div>

              <div class="
response-info" aria-label="response info">
                <pre class="
prettyprint"><span class="meta nocode"><b>HTTP 200 OK</b>
<b>Allow:</b> <span class="
lit">OPTIONS, GET</span>
<b>Content-Type:</b> <span class="
lit">application/json</span>
<b>Vary:</b> <span class="
lit">Accept</span>

</span>{
    &quot;tipo_contribuyente&quot;: &quot;PERSONAS NATURALES&quot;,
    &quot;actividad_economica&quot;: &quot;VENTA AL POR MAYOR DE MATERIALES DE CONSTRUCCIÓN: PIEDRA, ARENA, GRAVA, CEMENTO, ETCÉTERA.&quot;,
    &quot;clase_contribuyente&quot;: &quot;OTROS&quot;,
    &quot;estado_contribuyente&quot;: &quot;ACTIVO&quot;,
    &quot;nombres_completos&quot;: &quot;ANCHUNDIA DELGADO JOSE RAFAEL&quot;,
    &quot;direccion&quot;: &quot;MANABI/PORTOVIEJO/12 DE MARZO/RAMOS IDUARTE S/N TERCERA Y CUARTA TRANSVERSAL&quot;,
    &quot;nombre_comercial&quot;: &quot;DEPOSITO ANCHUNDIA&quot;,
    &quot;obligado&quot;: &quot;S&quot;
}</pre>
              </div>
            </div>

            
              

              
            
          
        </div><!-- /.content -->
      </div><!-- /.container -->
    </div><!-- ./wrapper -->

    

    
      <script>
        window.drf = {
          csrfHeaderName: "
X-CSRFTOKEN",
          csrfCookieName: "
csrftoken"
        };
      </script>
      <script src="
/static/rest_framework/js/jquery-1.12.4.min.4f252523d4af.js"></script>
      <script src="
/static/rest_framework/js/ajax-form.0ea6e6052ab5.js"></script>
      <script src="
/static/rest_framework/js/csrf.753b7a1f2ee7.js"></script>
      <script src="
/static/rest_framework/js/bootstrap.min.5869c96cc8f1.js"></script>
      <script src="
/static/rest_framework/js/prettify-min.709bfcc456c6.js"></script>
      <script src="
/static/rest_framework/js/default.b846d7d305c9.js"></script>
      <script>
        $(document).ready(function() {
          $('form').ajaxForm();
        });
      </script>
    

  </body>
  
</html> 
Cuando deberia enviar en JSON , este servicio esta probado en python, sera que me falta algo mas para darle formato en los indy o sera normal asi en delphi que retorne aunq en la web de neftaly un api rest devuelve un json tal cual debe ser


Nuevamente aprecio mucha tu ayuda , un abrazo
__________________
IVAND

Última edición por dec fecha: Hace 2 Semanas a las 09:42:59. Razón: Poner etiquetas DELPHI
Responder Con Cita
  #7  
Antiguo Hace 2 Semanas
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.688
Poder: 28
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

El resultado que obtienes implica que el servidor no está recibiendo la petición HTTP adecuada, puesto que además, probando en apitester.com, el servidor retorna un JSON, tal como se espera. He querido probar con Delphi y me he encontrado con el mismo problema que tú, exactamente.

He revisado la petición HTTP que realiza apitester.com, puesto que funciona como se espera, y, después de probar a cambiar el "User Agent" (sin resultado), he visto que con el "Accept" adecuado, la petición se lleva a cabo perfectamente, es decir, algo como lo siguiente funciona bien:

Código Delphi [-]
begin
  IdHTTP1.Request.Clear();
  IdHTTP1.Request.Accept := '*/*';
  IdHTTP1.Request.CustomHeaders.Values['X-MANTISAPI-CODE'] := 'eeXahKo8';
  ShowMessage(IdHTTP1.Get('https://inprise.integral.ec/api/consulta-identificacion/?identificacion=1308325354001'));
end;
__________________
David Esperalta
www.davidesperalta.com

Última edición por dec fecha: Hace 2 Semanas a las 10:07:20.
Responder Con Cita
  #8  
Antiguo Hace 2 Semanas
Avatar de mamcx
mamcx mamcx is online now
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.580
Poder: 19
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
IdHTTP1.Request.Accept := '*/*';
Eso es el MIME TYPE. '*/*' es demasiado amplio y puede el servidor web CAMBIAR SU RESPUESTA, si quieres usar JSON el correcto es: application/json.

Ademas, ten en cuenta la simetría con:

https://webmasters.stackexchange.com...e-http-headers
__________________
Nuevo Blog.
Ahora en Twitter!.
Responder Con Cita
  #9  
Antiguo Hace 2 Semanas
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.688
Poder: 28
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Entonces, es posible que el "Accept" por defecto que use el componente "IdHttp" no sea el adecuado, y, cambiándolo por "*/*", funciona como se espera. Si funcionase también con "application/json", en efecto, tal vez sería más adecuado usar este en lugar del otro más genérico. Yo únicamente me fijé en cómo hacía la consulta el servicio que obtenía una respuesta correcta y traté de imitar la llamada HTTP.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #10  
Antiguo Hace 2 Semanas
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 418
Poder: 16
IVAND Va por buen camino
Efectivamente de los dos metodos funciona bien , muchas gracias a los dos , un fuerte abrazo ahora solo queda parsear el resultado

Gracias
__________________
IVAND
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Incluir Headers de SOAP en web services Delphi 2010 Revow Delphi para la web 6 19-05-2015 23:32:59
invocar a una dll lestad Varios 3 07-03-2014 18:47:54
Como modificar los headers de un DBGrid yn4v4s OOP 3 16-07-2012 20:43:07
dbgrid con sub-headers samantha jones Varios 1 02-03-2005 21:30:25
Indicador de orden en los headers de un TListView walrus OOP 1 11-10-2004 19:50:30


La franja horaria es GMT +2. Ahora son las 02:37:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi