elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Mensajes
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 331
31  Programación / Programación Visual Basic / Re: leer user y password en archivos aleatorios en: 5 Enero 2021, 06:31 am
Es mejor usar SQLite que esto, pues no muy "legible".

http://leandroascierto.com/blog/vbsqlite3/

saludos.
32  Programación / Programación Visual Basic / Re: Detectar regreso a la aplicación en: 19 Diciembre 2020, 09:00 am
Si es posible pero al igual que en C/C++ en VB6 hay que usar WinAPI

https://stackoverflow.com/questions/15756386/vb6-wh-getmessage-message-hook

Cuando identifiques el mensaje WM_ACTIVATE (https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-activate) puedes identificar que esta activa tu ventana.

Usa el buscador y busca sobre Hook en VB6 hay mucho de esto.

Saludos.

33  Programación / Programación Visual Basic / Re: soap generico en: 19 Diciembre 2020, 08:24 am
Con toda la diversificación de tecnologías, realmente crees que va a existir una librería "que sirva para todos los servicios web del mundo" ???. Es muy ingenuo por tu parte...

ejem ejem para SOAP/Rest si ejem ejem de hecho eso mismo me dije que ingenuo soy pero me puse a leer un poco los RFC de la 3w y vi que todo era solo ''texto'' (Hablando de forma abstracta) enviado por un protocolo X... y es que necesitaba hacer en donde laboro un "Consumidor" de servicios genérico que ejecutara cualquier tipo de servicio REST/SOAP bajo HTTP/HTTPS, vaya cada 2 semanas los modifican (a;adiendo o removiendo que no se deciden los tipos) y necesitaba ser lo mas eficiente posible en ver mis series y tener poco estrés laboral y si estuviera recodificando los clientes a cada momento se me acumularían cada 15 días que me llegara algo a consumir.

El truco esta en usar SOCKETS y conectarte al servicio como un vil cliente HTTP/HTTPS y enviar peticiones viles como un cliente común y corriente después parseas los datos obtenidos con un parser XML o JSON o el tipo de dato que envies y con eso ya tienes un cliente GENERICO de servicios WEB.

Esta es mi versión para JAVA (Nunca quise manejar JAVA pero es el lenguaje que ya me da de comer), se que es un foro de VB6 al rato me instalo el VB6 y genero una versión pero igual les sirve para entender el protocolo de servicios SOAP por que a la primera asusta...

La siguiente clase la hice de esta forma y no use FRAMEWORKS de JAVA por que los frameworks no me permitían capturar los request/response de un POOL de hilos ya que compartían el mismo cache haci que me tuve que bajar a crear mi cliente pero que no estuviera bajo JAXB ya que de igual forma requería tener una catalogo de endpoints, describir los métodos en BDD etc, etc, en fin que es genérico hoy en día y consume lo que desee en la secuencia que desee a tal grado que puedo consumir un servicio mas rápido que con los frameworks, en fin solo les comparto esta clase el resto es a imaginación, obviamente el request y response se manejan en otras clases las cuales no axeso por que no es el tema de mis parsers.

Debajo del código describo como funciona.

Código
  1.  
  2. package mx.com.common.service;
  3.  
  4. import java.io.BufferedReader;
  5. import java.io.ByteArrayInputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.InputStreamReader;
  9. import java.io.OutputStreamWriter;
  10. import java.net.HttpURLConnection;
  11. import java.net.MalformedURLException;
  12. import java.net.ProtocolException;
  13. import java.net.SocketTimeoutException;
  14. import java.net.URL;
  15. import java.net.URLConnection;
  16. import java.rmi.RemoteException;
  17. import java.util.Date;
  18. import java.util.Date;
  19.  
  20. import javax.annotation.Generated;
  21. import javax.net.ssl.HttpsURLConnection;
  22. import javax.net.ssl.SSLSocketFactory;
  23. import javax.xml.soap.MessageFactory;
  24. import javax.xml.soap.SOAPBody;
  25. import javax.xml.soap.SOAPEnvelope;
  26. import javax.xml.soap.SOAPException;
  27. import javax.xml.soap.SOAPHeader;
  28. import javax.xml.soap.SOAPMessage;
  29. import javax.xml.soap.SOAPPart;
  30.  
  31. import org.apache.logging.log4j.LogManager;
  32. import org.apache.logging.log4j.Logger;
  33.  
  34. import mx.com.common.utils.ElapseTime;
  35.  
  36. /**
  37.  * Clase para generar clientes a SOAP
  38.  *
  39.  * @author Miguel Angel Ortega Avila
  40.  */
  41. @SuppressWarnings("all")
  42. public class SoapServiceClient implements ServiceClient {
  43.  
  44. private final static Logger LOG = LogManager.getLogger(SoapServiceClient.class);
  45.  
  46. private String user;
  47. private final String pass;
  48. private final String endpoint;
  49. private final ElapseTime elapseTime;
  50.  
  51. private static SSLSocketFactory sslSocketFactory;
  52.  
  53. private int timeout;
  54. private Date startTime = null;
  55. private SOAPBody currentBody;
  56. private String currentRequest;
  57. private String currentResponse;
  58.  
  59. @Generated("SparkTools")
  60. public SoapServiceClient(String user, final String pass, final String endpoint, final int timeout) {
  61. this.endpoint = endpoint;
  62. this.user = user;
  63. this.pass = pass;
  64. this.elapseTime = ElapseTime.getInstance();
  65. this.timeout = timeout;
  66. }
  67.  
  68. public String getCurrentRequest() {
  69. return currentRequest;
  70. }
  71.  
  72. public String getCurrentResponse() {
  73. return currentResponse;
  74. }
  75.  
  76. public SOAPMessage execute(String request) throws RemoteException {
  77. URL url;
  78. URLConnection conexion = null;
  79. currentRequest = request;
  80. currentResponse = null;
  81. try {
  82. elapseTime.start();
  83. startTime = new Date();
  84. url = new URL(this.endpoint);
  85. conexion = url.openConnection();
  86. if (url.getProtocol().equalsIgnoreCase("https")) {
  87. ((HttpsURLConnection) conexion).setSSLSocketFactory(sslSocketFactory);
  88. }
  89. ((HttpURLConnection) conexion).setRequestProperty("Content-Type", "text/xml");
  90. ((HttpURLConnection) conexion).setRequestMethod("POST");
  91. ((HttpURLConnection) conexion).setConnectTimeout(this.timeout);
  92. ((HttpURLConnection) conexion).setReadTimeout(this.timeout);
  93. } catch (final MalformedURLException e) {
  94. throw new RemoteException("WS-SOAPService - Endpoint erroneo", e);
  95. } catch (final ProtocolException e) {
  96. throw new RemoteException("WS-SOAPService - Error al consumir servicio", e);
  97. } catch (final IOException e) {
  98. throw new RemoteException("WS-SOAPService - Error al consumir servicio", e);
  99. }
  100.  
  101. HttpURLConnection httpURLConnection = (HttpURLConnection) conexion;
  102. conexion.setDoOutput(true);
  103. OutputStreamWriter out = null;
  104. StringBuilder sb = new StringBuilder();
  105. int returnCode;
  106. BufferedReader buff = null;
  107. try {
  108. // Obligatorio para algunas versiones de SOAP (Emulacion).
  109. httpURLConnection.setRequestProperty("SOAPAction", "");
  110. out = new OutputStreamWriter(httpURLConnection.getOutputStream());
  111. out.write(request);
  112. out.flush();
  113. returnCode = httpURLConnection.getResponseCode();
  114. InputStream conexionIn;
  115. if (returnCode >= 200 && returnCode < 300) {
  116. conexionIn = httpURLConnection.getInputStream();
  117. } else {
  118. conexionIn = httpURLConnection.getErrorStream();
  119. }
  120. buff = new BufferedReader(new InputStreamReader(conexionIn));
  121. String inputline;
  122. while ((inputline = buff.readLine()) != null) {
  123. sb.append(inputline);
  124. }
  125. httpURLConnection.disconnect();
  126. currentResponse = sb.toString();
  127. } catch (final SocketTimeoutException e) {
  128. throw new RemoteException(e.getMessage(), e);
  129. } catch (final IOException e) {
  130. throw new RemoteException(e.getMessage(), e);
  131. } finally {
  132. elapseTime.stop();
  133. if (buff != null)
  134. try {
  135. buff.close();
  136. } catch (IOException e) {
  137. LOG.error("WS-SOAPService - Error al cerrar Stream", e);
  138. }
  139. if (out!= null) {
  140. try {
  141. out.close();
  142. } catch (IOException e) {
  143. LOG.error("WS-SOAPService - Error al cerrar Stream", e);
  144. }
  145. }
  146. }
  147. InputStream is = new ByteArrayInputStream(sb.toString().getBytes());
  148. SOAPMessage soapResponse;
  149. SOAPPart part;
  150. SOAPEnvelope env;
  151. SOAPBody body;
  152. SOAPHeader head;
  153. try {
  154. soapResponse = MessageFactory.newInstance().createMessage(null, is);
  155. soapResponse.removeAllAttachments();
  156. part = soapResponse.getSOAPPart();
  157. part.detachNode();
  158. env = part.getEnvelope();
  159. env.detachNode();
  160. body = env.getBody();
  161. body.detachNode();
  162. head = env.getHeader();
  163. if (head != null)
  164. head.detachNode();
  165. } catch (final IOException e) {
  166. throw new RemoteException("(HTTP " + returnCode + ") - " + e.getMessage(), e);
  167. } catch (final SOAPException e) {
  168. throw new RemoteException("(HTTP " + returnCode + ") - " + e.getMessage(), e);
  169. } finally {
  170. if (is != null)
  171. try {
  172. is.close();
  173. } catch (IOException e) {
  174. LOG.error("WS-SOAPService - Error al cerrar Stream", e);
  175. }
  176. }
  177. if (body != null && body.hasFault()) {
  178. throw new RemoteException(body.getFault().getTextContent(), null);
  179. }
  180. return soapResponse;
  181. }
  182.  
  183. public String getHeaderSecurityXML() {
  184. StringBuilder strbl = new StringBuilder();
  185. strbl.append(
  186. "<wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" xmlns:SOAP-ENV=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" SOAP-ENV:encodingStyle=\"\" actor=\"\" mustUnderstand=\"0\" SOAP-ENV:mustUnderstand=\"0\">");
  187. strbl.append(
  188. "<wsse:UsernameToken xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" wsu:id=\"UsernameToken\" xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">");
  189. strbl.append(
  190. "<wsse:Username xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">");
  191. strbl.append(user).append("</wsse:Username>");
  192. strbl.append(
  193. "<wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\" xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">");
  194. strbl.append(pass).append("</wsse:Password>");
  195. strbl.append("</wsse:UsernameToken>");
  196. strbl.append("</wsse:Security>");
  197. return strbl.toString();
  198. }
  199.  
  200. public String getUser() {
  201. return user;
  202. }
  203.  
  204. public String getPass() {
  205. return pass;
  206. }
  207.  
  208. public int getTimeout() {
  209. return timeout;
  210. }
  211.  
  212. @Override
  213. public long getElapsedTime() {
  214. return this.elapseTime.getElapsedTime();
  215. }
  216.  
  217. @Override
  218. public Date getStartTime() {
  219. return this.startTime;
  220. }
  221. }
  222.  


La teoría es la siguiente para vb6 y cualquier lenguaje.

Necesitamos un cliente básico para HTTP/HTTPS o el protocolo transporte, simularlo con sockets o alguna librería básica (https://www.chilkatsoft.com/refdoc/xChilkatHttpResponseRef.html) que permita este protocolo del servicio SOAP.

El resto ya es solo trabajo de los Request y Response

(Instalar la versión Open Source)
https://www.soapui.org/downloads/soapui/

Si se desea consumir un servicio SOAP solo debemos conocer el request y response (Usaremos SOAPUI para esto, explicar aquí el formato es complicado por ello es mejor usar esta herramienta, solo hay que ir a File -> New Soap Project ingresar el endpoint y consumes un método del servicio para obtener el request).

Una vez obtenido el request solo hay que enviarlo por nuestro cliente en vb6.

Si deseamos anexar usuario y contraseña se debe poner los siguientes headers a el request (wsse:Username y wsse:Password):

El método del Enpoint se debe consumir de la siguiente forma suponiendo que el endpoint es:

http://www.webservicex.net/globalweather.asmx?wsdl
y tiene dos métodos llamados
hola1
metodoX

y quiero llamar a metodoX

Se llamaría bajo HTTP
Se consume bajo POST
Anexar a la llamada el header "Content-Type" con el valor "text/xml"
Anexar a la llamada el header "SOAPAction" con valor vacío ""
Envio el request siguiente el cual indica que se debe ejecutar "metodoX"

Código
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mod="http://blackzerox.com.mx">
  2. <soapenv:Header>
  3. <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:SOAP-ENV="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" SOAP-ENV:encodingStyle="" actor="" mustUnderstand="0" SOAP-ENV:mustUnderstand="0">
  4. <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:id="UsernameToken" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
  5. <wsse:Username xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">BlackZeroX</wsse:Username>
  6. <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">MiContrasenia123456789</wsse:Password>
  7. </wsse:UsernameToken>
  8. </wsse:Security>
  9. </soapenv:Header>
  10. <soapenv:Body>
  11. <mod:metodoX>
  12. <objeto1>
  13. <campo1></campo1>
  14. <campo2></campo2>
  15. <objetoAnidado>
  16. <objetoAnidadoID></objetoAnidadoID>
  17. </objetoAnidado>
  18. <systemId></systemId>
  19. </objeto1>
  20. <nombre>Miguel Angel</nombre>
  21. <apellidoM>Avila</apellidoM>
  22. <apellidoP>Ortega</apellidoP>
  23. <expresiones>
  24. <suma>
  25. <![CDATA[
  26. 1+5
  27. ]]>
  28. </suma>
  29. <default>
  30. <![CDATA[
  31. <8)
  32. ]]>
  33. </default>
  34. <obsolete>no</obsolete>
  35. <value>69</value>
  36. </expresiones>
  37. </mod:metodoX>
  38. </soapenv:Body>
  39. </soapenv:Envelope>
  40.  

y al enviar por sockets responderia algo asi

Código
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  3. <soapenv:Body>
  4. <metodoXResponse xmlns="http://blackzerox.com.mx">
  5. <Response xmlns=">
  6. <productOrderID></productOrderID>
  7. <responseStatus>
  8. <rejectCode>XXX</rejectCode>
  9. <rejectDescription>descripcion XXX metodoX</rejectDescription>
  10. <status>true</status>
  11. </responseStatus>
  12. </Response>
  13. </metodoXResponse>
  14. </soapenv:Body>
  15. </soapenv:Envelope>
  16.  

Si puedo hacer correr un día de estos en mi equipo VB6 armo un cliente genérico en VB6.

SOAP y REST son bajo la misma teoria... o muy parecida.

Saludos.
34  Programación / Programación Visual Basic / Re: [Aporte] LabelPlus (user control) en: 16 Diciembre 2020, 02:58 am
para para, vos me estas diciendo que esto es para darle la interfaz comercial estandar de 2020 a cosas creadas con este lenguaje del 1998 ??????????????? O sea significa que puedo hacer mis programitas tipo windor 95 q todos me critican, con esta intefaz?????????

El resto de los lenguajes hacen lo mismo, solo que ya lo hizo alguien mas. Lo que hace LeandroA es una joya pues sabes perfectamente como funcionan las cosas internamente.

Dulces Lunas.
35  Programación / Bases de Datos / Re: Oracle REGEXP se queda trabado en: 8 Mayo 2020, 17:29 pm
Ya quedo solucionado.

La solución esta en el 1er Post.

Saludos.
36  Programación / Bases de Datos / Re: Oracle REGEXP se queda trabado en: 8 Mayo 2020, 16:02 pm
REGEXP_INSTR sin la T dog.

y dulces y sangrientas lunasssssss

No nada que ver, ejecuta el código en Oracle Live SQL y veras que solo saltan errores o no termina.

Esto solo ocurre con cadenas largas y expresiones largas.

Saludos.
37  Programación / Programación Visual Basic / Re: Problema muy extraño con ShellEjecute en: 8 Mayo 2020, 05:25 am
Me dio un poco de pereza leer las respuestas chonchas...

Pero me suena que es tema de primero ubicarte en el path de ejecucion y luego ejecutarlo. por lo que entendi Tu haces esto:

cargas el archivo y ejecutas

y si intentas

cargas el archivo -> te ubicas en el path -> Ejecutas

* Cargar el archivo no es ubicarte en la ruta...

Saludos.
38  Programación / Programación Visual Basic / Re: [Aporte] LabelPlus (user control) en: 8 Mayo 2020, 05:15 am
Venga... sigues creando controles geniales.

P.D.> Aun no me muero.

Saludos.
39  Programación / Bases de Datos / [Solved] Oracle REGEXP se queda trabado en: 8 Mayo 2020, 05:07 am
Disculpen mi ignoracia pero alguien sabe por que las funciones REGEXP_INSTR y REGEXP_LIKE se quedan trabadas en Oracle 10?

Entiendo que son costosas pero que no respondan ya es mucho...

Mi problema radica en esta consulta (no termina)

Código
  1. SELECT
  2. NVL(REGEXP_INSTR('(HTTP 500) - soapenv:ServerOSB-382500: OSB Service Callout action received SOAP Fault responseOSB-382500OSB Service Callout action received SOAP Fault responsesoapenv:Server(CM1-000559) Stop collection treatment is not allowed on this account.amdocs.csm3g.exceptions.CMValidateException: (CM1-000559) Stop collection treatment is not allowed on this account.StopCollectionPipelinePairNoderequest-ac42ea5.N370c41ec.0.153414147d5.N7967StopCollectionTreatmrntServiceCalloutStagerequest-pipeline; nested',
  3. '(\r|\n|.)*\(HTTP 500\) \- soapenv\:ServerOSB\-382500(.*)\(CM1\-000559\) Stop collection treatment is not allowed on this(\r|\n|.)*'), 0) indexlarge
  4. FROM DUAL;
  5.  

Solucion:

No usar \r y \n en las expresiones regulares (estas dos me mataban la ejecución) y que no sean mayores a 512 bytes.

Queda la query (use otros parámetros que no son necesarios realmente, igual sin ellos me funciono):

Código
  1. SELECT
  2. NVL(REGEXP_INSTR('(HTTP 500) - soapenv:ServerOSB-382500: OSB Service Callout action received SOAP Fault responseOSB-382500OSB Service Callout action received SOAP Fault responsesoapenv:Server(CM1-000559) Stop collection treatment is not allowed on this account.amdocs.csm3g.exceptions.CMValidateException: (CM1-000559) Stop collection treatment is not allowed on this account.StopCollectionPipelinePairNoderequest-ac42ea5.N370c41ec.0.153414147d5.N7967StopCollectionTreatmrntServiceCalloutStagerequest-pipeline; nested',
  3. '(.)*\(HTTP 500\) \- soapenv\:ServerOSB\-382500(.*)\(CM1\-000559\) Stop collection treatment is not allowed on this(.)*', 1, 1, 0, 'ni'), 0) indexlarge
  4. FROM DUAL;

Saludos.
40  Programación / Java / Depuracion... en: 17 Abril 2016, 07:19 am
Alguien sabe si puedo depurar un archivo class sin el código fuente? (algo parecido a OllyDBG) simplemente quiero ver como se va produciendo la secuencia de instrucciones y ver la memoria.

P.D.: No me vale de compilarlo (JD-Core), es simplemente una curiosidad para algo que tengo en mente y si es posible ver el camino para desarrollar una utilidad.

Dulces Lunas!¡.
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 331
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines