Jump to content


Photo

No encuentra las DLL's OpenSSL


  • Please log in to reply
17 replies to this topic

#1 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 07 June 2011 - 12:51 PM

Hola

Pretendo enviar un archivo xml a través de IdHTTP.POST con SSL, pero me está generando el siguiente error:

---------------------------
Could not load SSL library.
---------------------------


El código que uso es éste:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   PostData: TStrings;
  4.   Reply: string;
  5. begin
  6.   idLibeay := LoadLibrary('libeay32.dll');
  7.   if idLibeay > 32 then
  8.   begin
  9.     idLibssl := LoadLibrary('libssl32.dll');
  10.     if idLibssl > 32 then
  11.     begin
  12.       PostData := TStringList.Create;
  13.       try
  14.         PostData.LoadFromFile(NombreArchivo);
  15.         Reply := IdHTTP1.Post(urlPost,PostData);
  16.       finally
  17.         PostData.Free;
  18.       end;
  19.       showMessage(Reply);
  20.       FreeLibrary(idLibssl);
  21.     end;
  22.     FreeLibrary(idLibeay);
  23.   end;
  24. end;



Tengo las librerias libssl32.dll y libeay32.dll en el directorio de trabajo y ya probé colocandolas en el directorio System32, pero me sigue mostrando ese error.

¿ Que estoy haciendo mal ?
¿ Alguien sabe como solucionar el problema ?

Gracias

Salud OS

  • 0

#2 seoane

seoane

    Advanced Member

  • Administrador
  • 1259 posts
  • LocationEspaña

Posted 07 June 2011 - 04:01 PM

Pues hasta donde yo se no hay que cargar las librerías manualmente, solo hay que dejarlas en algún sitio en el que "Indy" las pueda encontrar (el directorio del programa, el directorio system) y ya las carga solito. Por otro lado asegúrate que esas librerías están compiladas para usar con Indy, ya que no son las misma que utilizan los programas hechos en C (aunque se llamen igual)

Y dejando Indy a un lado ¿que te parece usar Curl para hacer el POST?
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 07 June 2011 - 04:02 PM

Pues hasta donde yo se no hay que cargar las librerías manualmente, solo hay que dejarlas en algún sitio en el que "Indy" las pueda encontrar (el directorio del programa, el directorio system) y ya las carga solito. Por otro lado asegúrate que esas librerías están compiladas para usar con Indy, ya que no son las misma que utilizan los programas hechos en C (aunque se llamen igual)

Y dejando Indy a un lado ¿que te parece usar Curl para hacer el POST?


Caramba amigo Domingo, no se que es Curl  :embarrassed:

Si me puedes ilustrar sería genial :)

Salud OS

PD, por cierto, que bien quedó la nueva piel de tu bitácora (y)

  • 0

#4 seoane

seoane

    Advanced Member

  • Administrador
  • 1259 posts
  • LocationEspaña

Posted 07 June 2011 - 04:21 PM


Caramba amigo Domingo, no se que es Curl



Caramba, pues no hace mucho hablamos de la libreria libCurl por aqui:
http://www.delphiacc...il-con-libcurl/


Te estas haciendo mayor, y ya se te olvidan las cosas  :p :D


Ahora en serio, esta libreria permite usar ademas de smtp, http, https, ftp, ftps .... etc
Ahora mismo aqui ya pasan de las doce  |-) pero en cuanto tenga un momento te hago un ejemplo, si encuentro un servidor que acepte post por https donde probarlo.


Saludos
  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 07 June 2011 - 04:31 PM

Caray, si que ya me está saludando mi cuate el Aleman :D :D :D

Lo único bueno del cuate Aleman es que todos los días tengo amigos nuevos jajajajajaj

Salud OS
  • 0

#6 vvalladolid

vvalladolid

    Advanced Member

  • Miembros
  • PipPipPip
  • 90 posts
  • LocationMéxico

Posted 07 June 2011 - 11:21 PM

Que pex ing.


Yo envío correos ssl y se utilizan dll´s y como dice seoane no las cargo manualmente, simplemente las tengo en la misma ruta del exe.
Tienes tu directorio de trabajo en el path de delphi ?


Saludos,
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 08 June 2011 - 07:21 AM

Que pex ing.


Yo envío correos ssl y se utilizan dll´s y como dice seoane no las cargo manualmente, simplemente las tengo en la misma ruta del exe.
Tienes tu directorio de trabajo en el path de delphi ?


Saludos,


Que onda Vic, como te trata el "Norti", ya ni te conectas al msn :p

Pues si, tengo las dll's en el directorio del exe, incluso las he puesto en system32, he intentado sin cargarlas y es lo mismo, he intentado con varias versiones de las dll's 9.8.8, 10.0 y nada, simplemente no son cargadas.

Salud OS
  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 08 June 2011 - 09:50 AM

Hola

Ya solucioné el problema de la carga de las librerias, esto lo conseguí bajando ésta versión y modificando un poco el código, el cual quedó como sigue:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   PostData: TStrings;
  4.   Reply: string;
  5. begin
  6.   PostData := TStringList.Create;
  7.   IdSSLOpenSSLHeaders.Load;
  8.   Idhttp1.ReadTimeout:=0;
  9.   Idhttp1.ConnectTimeout:=0;
  10.   PostData.LoadFromFile('C:\xml-s\soap.xml');
  11.  
  12.     try
  13.       Reply := IdHTTP1.Post('https://127.0.0.1:7070/',PostData);
  14.     except
  15.       on E: Exception do
  16.       ShowMessage('Error encountered during POST: ' + E.Message);
  17.     end;
  18.    
  19.   Memo1.Lines.Add(Reply);
  20.   PostData.Free;
  21.   IdSSLOpenSSLHeaders.UnLoad;
  22. end;



Ahora mi problema es que me regresa el siguiente error:

---------------------------
Error encountered during POST: HTTP/1.1 400 BAD REQUEST - illegal URL encoded character
---------------------------
OK

 

Si le quito el socket :7070 me envía el siguiente error:

---------------------------
Error encountered during POST: Socket Error # 10061 Connection refused.
---------------------------


Espero me puedan ayudar :(

Salud OS
  • 0

#9 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 08 June 2011 - 11:26 AM

Aver, mmm prueba de la siguiente manera amigo.




delphi
  1. Var
  2.   datosPost: TIdMultiPartFormDataStream;
  3. Begin
  4.   PostData := TStringList.Create
  5. [color=#000000]  [/color][color=#000000]PostData.[/color]LoadFromFile('C:\xml-s\soap.xml')[color=#000000];[/color]
  6.   datosPost := TIdMultiPartFormDataStream.Create;
  7.   datosPost.AddFormField('data', PostData.Text);
  8.   Reply := IdHTTP1.Post('[url=https://127.0.0.1:7070/][color=#778899]https://127.0.0.1:7070/[/color][/url]',datosPost);
  9. End;





  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 08 June 2011 - 12:28 PM

Que tal amigo poli, gracias.

Ya probé pero sigue igual, me parece que el problema está en el XML. ya les comento.

Salud OS


  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 08 June 2011 - 01:20 PM

Hola

Pues si, ya encontré el error, el contenido del XML lo está generando con el caracter & en lugar del ENTER, si quito todos los ENTER funciona perfectamente, pero ahora mi pregunta es como indicarle que no convierta ese caracter. Intenté asignar en el ContentEncoding = UTF-8 pero me muestra un error

"Unsupported Media Type"

Ya estoy investigando como evitar ese problema. Gracias.

Salud OS
  • 0

#12 seoane

seoane

    Advanced Member

  • Administrador
  • 1259 posts
  • LocationEspaña

Posted 08 June 2011 - 01:25 PM

Caramba, yo haciendo un ejemplito con Curl y aquí ya lo tenéis todo resuelto. :(
... otra vez será.


Saludos

  • 0

#13 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 08 June 2011 - 01:30 PM

Caramba, yo haciendo un ejemplito con Curl y aquí ya lo tenéis todo resuelto. 
... otra vez será.

Saludos


Vamos amigo seoane, que ese ejemplito no caería nada mal, la cosa es que no me gusta "no poder" con algo :)

Salud OS
  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 08 June 2011 - 02:07 PM

Hola

Me he dado cuenta de que estoy enviando el encabezado con POST / HTTP/1.0 y con otro programa que funciona sin tener problemas con el caracter ENTER utiliza el POST / HTTP/1.1.

¿ Alguien sabe como cambiar ese dato en el encabezado del POST ?

Salud OS
  • 0

#15 seoane

seoane

    Advanced Member

  • Administrador
  • 1259 posts
  • LocationEspaña

Posted 08 June 2011 - 02:32 PM

Pues aquí el ejemplito:


delphi
  1. function EnviarPost(Url, Post: AnsiString): Boolean;
  2. var
  3.   Curl: TCURL;
  4.   Header: pcurl_slist;
  5.   Stream: TMemoryStream;
  6. begin
  7.   Result:= FALSE;
  8.   Curl:= curl_easy_init;
  9.   if Curl <> nil then
  10.   try
  11.     if curl_easy_setopt(Curl, CURLOPT_VERBOSE, TRUE) <> CURLE_OK then
  12.       Exit;
  13.     if curl_easy_setopt(Curl, CURLOPT_USE_SSL, CURLUSESSL_ALL) <> CURLE_OK then
  14.       Exit;
  15.     if curl_easy_setopt(Curl, CURLOPT_SSL_VERIFYPEER, FALSE) <> CURLE_OK then
  16.       Exit;
  17.     {
  18.     if curl_easy_setopt(Curl, CURLOPT_CAINFO,'cacert.pem') <> CURLE_OK then
  19.       Exit;
  20.     if curl_easy_setopt(Curl, CURLOPT_SSL_VERIFYPEER, 1) <> CURLE_OK then
  21.       Exit;
  22.     }
  23.     if curl_easy_setopt(Curl, CURLOPT_URL, PAnsiChar(URL)) <> CURLE_OK then
  24.       Exit;
  25.     if curl_easy_setopt(Curl, CURLOPT_POST, 1) <> CURLE_OK then
  26.       Exit;
  27.     if curl_easy_setopt(Curl, CURLOPT_READFUNCTION, @ReadFromStream) <> CURLE_OK then
  28.       Exit;
  29.     Stream:= TMemoryStream.Create;
  30.     try
  31.       with TStringList.Create do
  32.       try
  33.         Add(Post);
  34.         SaveToStream(Stream);
  35.       finally
  36.         Free;
  37.       end;
  38.       Stream.Position:= 0;
  39.       if curl_easy_setopt(Curl, CURLOPT_INFILE, Stream) <> CURLE_OK then
  40.         Exit;
  41.       if curl_easy_setopt(Curl, CURLOPT_POSTFIELDSIZE, Stream.Size) <> CURLE_OK then
  42.         Exit;
  43.       Header:= nil;
  44.       Header:= curl_slist_append(Header,PAnsiChar('Expect:'));
  45.       Header:= curl_slist_append(Header,PAnsiChar('Content-Type: application/x-www-form-urlencoded'));
  46.       try
  47.         if curl_easy_setopt(Curl, CURLOPT_HTTPHEADER, Header) <> CURLE_OK then
  48.           Exit;
  49.         Result:= curl_easy_perform(Curl) = CURLE_OK;
  50.       finally
  51.         curl_slist_free_all(Header);
  52.       end;
  53.     finally
  54.       Stream.Free;
  55.     end;
  56.   finally
  57.     curl_easy_cleanup(Curl);
  58.   end;
  59. end;




Esta función se coloca en vez de la función "EnviarEmail" en el ejemplo de enviar email, el resto dejarlo igual.


Y se usa así:


delphi
  1. EnviarPost('https://api-3t.sandbox.paypal.com/nvp','METHOD=DOVoid&VERSION=51');




El único servidor con el que puede probar a hacer post con https fue el "sandbox" de paypal, y parece que va (aunque tengo algunos problemas para identificarme)


Pues eso, ahí queda ... por si le sirve a alguien




  • 0

#16 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 09 June 2011 - 07:26 AM

Hola

Ayer quise probar el código, pero no tuve la "inteligencia" de bajar las dll's de curl y que hoy recorde que el enlace está en el hilo de correos GMail.

Espero que hoy me dé tiempo de hacer pruebas, ya les dejo saber los resultados

Salud OS
  • 0

#17 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 09 August 2011 - 09:42 PM

Hola

Pues nada, que me está sucediendo algo extraño, después de varios POST's con las librerias SSL, me muestra el siguiente error.

"Error creating SSL Context"

Ya he buscado por todos lados y no encuentro algo que me indique porque pasa eso,

Lo que hago es lo siguiente:

En el create de mi clase:
 

delphi
  1. IdSSLOpenSSLHeaders.Load;



En el destroy de la clase
 

delphi
  1. IdSSLOpenSSLHeaders.UnLoad;



En el evento EnvíaPOST
 

delphi
  1. Reply := IdHTTP1.Post(URL,PostData);



Después de 3 o 4 envíos se genera ese error  :(

¿ Alguien sabe porque sucede o como puedo resolverlo ?

Salud OS
  • 0

#18 angelo2007

angelo2007

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 posts

Posted 20 August 2011 - 04:15 PM

Pues aquí el ejemplito:


delphi
  1. function EnviarPost(Url, Post: AnsiString): Boolean;
  2. var
  3.   Curl: TCURL;
  4.   Header: pcurl_slist;
  5.   Stream: TMemoryStream;
  6. begin
  7.   Result:= FALSE;
  8.   Curl:= curl_easy_init;
  9.   if Curl <> nil then
  10.   try
  11.     if curl_easy_setopt(Curl, CURLOPT_VERBOSE, TRUE) <> CURLE_OK then
  12.       Exit;
  13.     if curl_easy_setopt(Curl, CURLOPT_USE_SSL, CURLUSESSL_ALL) <> CURLE_OK then
  14.       Exit;
  15.     if curl_easy_setopt(Curl, CURLOPT_SSL_VERIFYPEER, FALSE) <> CURLE_OK then
  16.       Exit;
  17.     {
  18.     if curl_easy_setopt(Curl, CURLOPT_CAINFO,'cacert.pem') <> CURLE_OK then
  19.       Exit;
  20.     if curl_easy_setopt(Curl, CURLOPT_SSL_VERIFYPEER, 1) <> CURLE_OK then
  21.       Exit;
  22.     }
  23.     if curl_easy_setopt(Curl, CURLOPT_URL, PAnsiChar(URL)) <> CURLE_OK then
  24.       Exit;
  25.     if curl_easy_setopt(Curl, CURLOPT_POST, 1) <> CURLE_OK then
  26.       Exit;
  27.     if curl_easy_setopt(Curl, CURLOPT_READFUNCTION, @ReadFromStream) <> CURLE_OK then
  28.       Exit;
  29.     Stream:= TMemoryStream.Create;
  30.     try
  31.       with TStringList.Create do
  32.       try
  33.         Add(Post);
  34.         SaveToStream(Stream);
  35.       finally
  36.         Free;
  37.       end;
  38.       Stream.Position:= 0;
  39.       if curl_easy_setopt(Curl, CURLOPT_INFILE, Stream) <> CURLE_OK then
  40.         Exit;
  41.       if curl_easy_setopt(Curl, CURLOPT_POSTFIELDSIZE, Stream.Size) <> CURLE_OK then
  42.         Exit;
  43.       Header:= nil;
  44.       Header:= curl_slist_append(Header,PAnsiChar('Expect:'));
  45.       Header:= curl_slist_append(Header,PAnsiChar('Content-Type: application/x-www-form-urlencoded'));
  46.       try
  47.         if curl_easy_setopt(Curl, CURLOPT_HTTPHEADER, Header) <> CURLE_OK then
  48.           Exit;
  49.         Result:= curl_easy_perform(Curl) = CURLE_OK;
  50.       finally
  51.         curl_slist_free_all(Header);
  52.       end;
  53.     finally
  54.       Stream.Free;
  55.     end;
  56.   finally
  57.     curl_easy_cleanup(Curl);
  58.   end;
  59. end;




Esta función se coloca en vez de la función "EnviarEmail" en el ejemplo de enviar email, el resto dejarlo igual.


Y se usa así:


delphi
  1. EnviarPost('[url=https://api-3t.sandbox.paypal.com/nvp%27,%27METHOD=DOVoid&VERSION=51%27%29;]https://api-3t.sandbox.paypal.com/nvp','METHOD=DOVoid&VERSION=51');[/url]




El único servidor con el que puede probar a hacer post con https fue el "sandbox" de paypal, y parece que va (aunque tengo algunos problemas para identificarme)


Pues eso, ahí queda ... por si le sirve a alguien


una duda muy grande

como se puede guardar el resultado sea lo que sea.

por que la aplicacion de  consola de comandos
todo me lo muestra en la ventana negra.
y yo quiero poder guardar los resultados.

y mejor aun.
hacer una aplicacion gui y procesar los resultados.

ejemplo

error tal ..

ese error lo meto a un string?
o memorystring

y ya lo proceso o lo guardo como parte del log

ando buscadno como guardar el resultado para nada.
no doy.

gracias por tu apoyo . seoane
  • 0




IP.Board spam blocked by CleanTalk.