Ver Mensaje Individual
  #12  
Antiguo 24-10-2013
elmacu elmacu is offline
Registrado
NULL
 
Registrado: feb 2011
Posts: 2
Reputación: 0
elmacu Va por buen camino
Roman, como estas?

Te hago una consulta. Por ahi es facil pero no logro dar con la tecla.

Estoy haciendo un POST a una web ASP, y tengo que enviar un token firmado previamente.

Con el WebBrowser lo puedo hacer sin problema, pero con las Indy no logro hacerlo andar.
Según lo que pude encontrar en la web es que viajan de forma distinta los datos o por lo menos van formateados en forma distinta.
Con el WebBrowser envio los datos se la siguiente manera:

Código Delphi [-]

var
  EncodedDataString: string;
  PostData  : OleVariant;
  Headers   : OleVariant;
  i         : integer;
  TokenSend :TStringlist;


begin

  TokenSend:=TStringlist.create;
  TokenSend.LoadFromFile('Token_a_Enviar.txt');

  EncodedDataString := 'XXX='+HTTPEncode('valor1')+'&'+
                                'XXX='+HTTPEncode('valor2')+'&'+
                                'Token='+HTTPEncode(TokenSend.Text);

  PostData := VarArrayCreate([0, length(EncodedDataString)-1], varByte);

  for i := 1 to length(EncodedDataString) do
    PostData[i-1] := ord(EncodedDataString[i]);

  Headers := 'Content-type: application/x-www-form-urlencoded'#10#13;

  WebBrowser1.Navigate('https://..........', EmptyParam, EmptyParam,  PostData, Headers);

Los datos que van dentro del Token_a_Enviar.txt es algo como esto:


Código Delphi [-]
-----BEGIN PKCS7-----
MIIMXwYJKoZIhvcNAQcCoIIMUDCCDEwCAQExCzAJBgUrDgMCGgUAMIGrBgkqhkiG9w0BBwGggZ0E
gZpiYW5jbz0wODE0fGJhbmNvX3NhbT0wODE0fHNlcnZpZG9yPTAwMDF8c3VjdXJzYWw9ODc5OXx0
ZXJtaW5hbD0xNjk5fGNvZF9zZXJ2aWNpbz18cnVicm89fGNvZGlnbz0zMDUzMDU0MzAwMzE1MTIw
MDAyMjQwMDEwMjMwMDAwMjI0MDAxMDIzMTN8SW1wb3J0ZU1hbnVhbD18oIIIWzCCCFcwggY/oAMC
AQICAQQwDQYJKoZIhvcNAQEFBQAwgfwxCzAJBgNVBAYTAkFSMSgwJgYDVQQIEx9DaXVkYWQgQXV0
b25vbWEgZGUgQnVlbm9zIEFpcmVzMSgwJgYDVQQHEx9DaXVkYWQgQXV0b25vbWEgZGUgQnVlbm9z
IEFpcmVzMSIwIAYDVQQKExlCYXBybyBNZWRpb3MgZGUgUGFnbyBTLkEuMSUwIwYDVQQLExxUZWNu
-----END PKCS7-----

Luego en el evento "WebBrowser1NavigateComplete2" me hago del resultado.

Quisiera hacer lo mismo con las Indy.
Ya que aunque me devuelva error de que ingrese mal los datos, la obtención del resultado es más rapida.

Intente de varías manera, pero no lo he logrado...

Este es uno de los intentos, con las Indys.::
Código Delphi [-]

        Token_Send:=TStringlist.create;
        Token_Send.LoadFromFile('Token_a_Enviar.txt');
        Params := TStringStream.create('');
        Params.WriteString(URLEncode('XXX=' + 'valor1' + '&'));
        Params.WriteString(URLEncode('XXX=' + 'valor2' + '&'));
        Params.WriteString(URLEncode('Token=' +Token_Send.Text));

        sHttpSocket := TIdHTTP.Create;
        try
          //como es una llamada a una https, asigno el HandlerSSL
          sshSocketHandler := TIdSSLIOHandlerSocketOpenSSL.Create(sHttpSocket);
          sshSocketHandler.Intercept:= TIdConnectionIntercept(IdLogFile1);
          sHttpSocket.IOHandler := sshSocketHandler;
          sHttpSocket.ReadTimeout:=15000;

          sHttpSocket.Request.ContentType := 'Content-type: application/x-www-form-urlencoded'#10#13;
          //creo el dato que va a obtener la respuesta
          resStreamRes:= TStringlist.create;
          //Hago la llamada
          sHttpSocket.post('https://.....',Params, resStream);
          //Obtengo respuesta y guardo 
          resStreamRes.Add(resStream.DataString);
          resStreamRes.SaveToFile('Resultado.txt');
        Except
        on E: EIdHTTPProtocolException do
        begin
        end;

Por ahora con el WebBrowser salgo del apuro, pero quisiera hacerlo mas optimo...
Desde ya mil gracias!

Sdos.-
Responder Con Cita