Ver Mensaje Individual
  #1  
Antiguo 26-10-2015
vicvil vicvil is offline
Miembro
 
Registrado: may 2003
Ubicación: Chile
Posts: 157
Reputación: 21
vicvil Va por buen camino
Dudas con IdHTTP de Indy 9

Hola buenas, tengo que enviar un archivo xml a un webservices y estoy usando los componentes Indy.

Para ello utilizo el IdHHTP, pero aquí es donde tengo algunas dudas.

El ejemplo que hay a continuación es el archivo que debería recibir el webservices, lo que está marcado en rojo corresponde al Header. Y es aquí donde tengo las dudas y es ¿cómo puedo hacer para indicar lo de la primera línea? es decir, que en el encabezado aparezca "POST /cgi_dte/UPL/DTEUpload HTTP/1.0"

La línea que dice "Cookie" tengo que ingresar un token que me entrega el webservice a traves de otro proceso, ese token ya lo tengo, pero ¿cómo lo ingreso en el encabezado?

Y la última pregunta es sobre el Boundary=7d23e2a11301c4. ¿Qué es específicamente ese boundary? y ¿de donde se saca esos caractéres?

Código:
POST /cgi_dte/UPL/DTEUpload HTTP/1.0^M
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-powerpoint, application/ms-excel,
application/msword, */*^M
Referer: {URL que referencia a upload Ej.
http://empresaabc.cl/test.html}^M
Accept-Language: es-cl^M
Content-Type: multipart/form-data: boundary={boundary data: Ej. ------
---------------------7d23e2a11301c4}^M
Accept-Encoding: gzip, deflate^M
User-Agent: Mozilla/4.0 (compatible; PROG 1.0; Windows NT 5.0; YComp
5.0.2.4)^M
Host: {Host Id. Ej: https://maullin.sii.cl}^M
Content-Length: {largo total de mensaje sin Req. Header. Ej.: 10240}^M
Connection: Keep-Alive^M
Cache-Control: no-cache^M
Cookie: TOKEN={Entregado por Autenticación. Ej.: YZD0II2ApZjlM}^M
^M[/color]
{Comienzo de Multipart/Form-data}
-----------------------------7d23e2a11301c4^M
Content-Disposition: form-data; name="rutSender"^M
^M
1^M
-----------------------------7d23e2a11301c4^M
Content-Disposition: form-data; name="dvSender"^M
^M
9^M
-----------------------------7d23e2a11301c4^M
Content-Disposition: form-data; name="rutCompany"^M
^M
3^M
-----------------------------7d23e2a11301c4^M
Content-Disposition: form-data; name="dvCompany"^M
^M
5^M
-----------------------------7d23e2a11301c4^M
Content-Disposition: form-data; name="archivo"; filename="EnvioEjemplo.xml"^M
Content-Type: text/xml^M
^M
<?xml version="1.0" encoding="ISO-8859-1"?>^M
<EnvioDTE xmlns="http://www.sii.cl/SiiDte" ^M
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ^M
 xsi:schemaLocation="http://www.sii.cl/SiiDte EnvioDTE.xsd" ^M
 version="1.0">^M
<SetDTE ID="SetDoc">^M
…………………………………………………………………………….
</EnvioDTE>^M
^M
-----------------------------7d23e2a11301c4--^M
Para hacer esto tengo el siguiente código, a ver si estoy bien encaminado...

Código Delphi [-]
procedure Enviaarchivo;
var F : TStringList;//TextFile;
    SSLHandler: TIdSSLIOHandlerSocket;
begin  
  F:= TStringList.Create;
  F.LoadFromFile('c:\archivo.xml');
  IdSSLOpenSSLHeaders.Load;
  IdHTTP1.Request.CustomHeaders.clear;
  idHTTP1.Request.Clear;
  IdHTTP1.Request.CustomHeaders.Add('POST /cgi_dte/UPL/DTEUpload HTTP/1.0');
  IdHTTP1.Request.Accept:= 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, 
 application/vnd.ms-powerpoint, application/ms-excel, application/msword, */*';
  IdHTTP1.Request.Referer:= 'www.empresa.cl';
  IdHTTP1.Request.AcceptLanguage:= 'es-cl';
  IdHTTP1.Request.ContentType:= 'multipart/form-data: boundary='+'---------------------------7d23e2a11301c4';
  IdHTTP1.Request.AcceptEncoding:= 'gzip, deflate';
  IdHTTP1.Request.UserAgent:= 'Mozilla/4.0 (compatible; PROG 1.0; Windows NT 5.0; YComp 5.0.2.4)';
  IdHTTP1.Request.Host:= 'https://maullin.sii.cl';
  IdHTTP1.Request.ContentLength:= F.Count;//10000;
  IdHTTP1.Request.Connection:= 'Keep_Alive';
  IdHTTP1.Request.CacheControl:= 'no-cache';
  memo1.Lines.Add('-----------------------------7d23e2a11301c4' + #10#13);
  memo1.Lines.Add('Content-Disposition: form_data; name="rutSender"' + #10#13);
  memo1.Lines.Add(#10#13);
  memo1.Lines.Add(copy(FrmEnvioDTE.RutDTE,1,length(FrmEnvioDTE.RutDTE) - 2) + #10#13);
  memo1.Lines.Add('-----------------------------7d23e2a11301c4' + #10#13);
  memo1.Lines.Add('Content-Disposition: form_data; name="dvSender"' + #10#13);
  memo1.Lines.Add(#10#13);
  memo1.Lines.Add(copy(FrmEnvioDTE.RutDTE,length(FrmEnvioDTE.RutDTE), 1) + #10#13);
  memo1.Lines.Add('-----------------------------7d23e2a11301c4' + #10#13);
  memo1.Lines.Add('Content-Disposition: form_data; name="rutCompany"' + #10#13);
  memo1.Lines.Add(#10#13);
  memo1.Lines.Add(copy(FrmEnvioDTE.RutEmp,1,length(FrmEnvioDTE.RutEmp) - 2) + #10#13);
  memo1.Lines.Add('-----------------------------7d23e2a11301c4' + #10#13);
  memo1.Lines.Add('Content-Disposition: form_data; name="dvCompany"' + #10#13);
  memo1.Lines.Add(#10#13);
  memo1.Lines.Add(copy(FrmEnvioDTE.RutEmp,length(FrmEnvioDTE.RutEmp), 1) + #10#13);
  memo1.Lines.Add('-----------------------------7d23e2a11301c4' + #10#13);
  memo1.Lines.Add('Content-Disposition: form_data; name="archivo"; filename="DTEFXXX.xml"' + #10#13);
  memo1.Lines.Add('Content-Type: text/xml' + #10#13);
  memo1.Lines.Add(#10#13);
  {AssignFile(F, 'c:\archivo.xml');
  Reset(F);}

  memo1.Lines.Add(F.Text);
  memo1.Lines.Add(#10#13);
  memo1.Lines.Add(#10#13);
  memo1.Lines.Add('-----------------------------7d23e2a11301c4--' + #10#13);
  F.Free;
  memo1.Lines.SaveToFile('c:\archivo.xml');
  F:= TStringList.Create;
  F.LoadFromFile('c:\archivo.xml');
  IdHTTP1.Post('https://maullin.sii.cl',F);
  IdSSLOpenSSLHeaders.UnLoad;
end;

Cualquier ayuda, me servirá de mucho ya que llevo días en esto viendo foros y ejemplos.

Última edición por dec fecha: 28-10-2015 a las 14:31:35. Razón: Edición general y añadir la etiqueta CODE
Responder Con Cita