Hoi,
eerst even een situatieschets:
het bedrijf waar ik voor werk is een aantal jaar geleden begonnen om het gehele bedrijfsproces via het intranet bij te houden/te regelen/etcetera. In plaats van om voor een taal als PHP of ASP te kiezen is er, om voor mij niet geheel duidelijke redenen (ik werk er nu 2 jaar), voor gekozen een eigen HTML parser te schrijven in Borland C++.
Probleem is nu het volgende. Ik wil de executable van deze parser aanpassen en het mogelijk maken om webservices aan te spreken (in dit geval een webservice van een relatie die ons ordergegevens terugstuurt, maar in de toekomst bijv. een postcode webservice). Daartoe heb ik lekker wat code bijgeklopt in de executable, aangezien de programmeur die de hele executable opgezet heeft, sinds afgelopen augustus een nieuwe baan gevonden heeft en ik het dus zelf moet doen
.
Als ik de executable los uitvoer (dus gewoon de exe start vanaf mijn PC) wordt er prima contact gemaakt met de webservice en krijg ik keurig alle informatie. Als ik echter via de webbrowser een pagina op het intranet opvraag (en dus de executable gestart wordt) wordt er geen contact gemaakt met de webservice en krijg ik de veelzeggende foutmelding: "Exception occured".
Op dit moment is mijn code als volgt:
Het is de bedoeling dat XmlDoc dynamisch gevuld gaat worden, maar zover ben ik dus nog niet.
Ik heb het programma HTTP Debugger Pro geinstalleerd. Dit programma registreert alle HTTP requests van mijn PC. Als ik de exe handmatig start (en ik dus wel resultaat krijg van de webservice) krijg ik hier ook keurig een paar regeltjes in die het contact met de webservice laten zien. Als ik echter een pagina via mijn localhost opvraag (die de executable dus ook aanroept) dan krijg ik echter alleen de aanvraag van deze pagina zelf te zien, maar niet de interne request naar de webservice. Dus of Debugger Pro is geen goeie sniffer en herkent de HTTP request van de exe niet of de exe voert uberhaupt de request niet uit.
Verder heb ik geprobeerd de HTTPRIO component te gebruiken. Echter ben ik nog niet zo bedreven in C++ en met google krijg ik of onduidelijke voorbeelden, maar vooral veel Delphi voorbeelden. En mijn C++ kunde is niet toereikend genoeg om deze Delphi code om te zetten in C++ code.
Heeft iemand misschien enige tips of denkrichtingen die ik nog zou kunnen uitproberen want ik ben inmiddels wel door mijn ideeen heen heb ik zo'n vermoeden...
En dan nog een vraagje: weet iemand een betere HTTP sniffer dan HTTP Debugger Pro, want mijn complete PC begint te bokken als ik dat programma draai
eerst even een situatieschets:
het bedrijf waar ik voor werk is een aantal jaar geleden begonnen om het gehele bedrijfsproces via het intranet bij te houden/te regelen/etcetera. In plaats van om voor een taal als PHP of ASP te kiezen is er, om voor mij niet geheel duidelijke redenen (ik werk er nu 2 jaar), voor gekozen een eigen HTML parser te schrijven in Borland C++.
Probleem is nu het volgende. Ik wil de executable van deze parser aanpassen en het mogelijk maken om webservices aan te spreken (in dit geval een webservice van een relatie die ons ordergegevens terugstuurt, maar in de toekomst bijv. een postcode webservice). Daartoe heb ik lekker wat code bijgeklopt in de executable, aangezien de programmeur die de hele executable opgezet heeft, sinds afgelopen augustus een nieuwe baan gevonden heeft en ik het dus zelf moet doen
Als ik de executable los uitvoer (dus gewoon de exe start vanaf mijn PC) wordt er prima contact gemaakt met de webservice en krijg ik keurig alle informatie. Als ik echter via de webbrowser een pagina op het intranet opvraag (en dus de executable gestart wordt) wordt er geen contact gemaakt met de webservice en krijg ik de veelzeggende foutmelding: "Exception occured".
Op dit moment is mijn code als volgt:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| AnsiString XmlDoc = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:end=\"http://endpoint.webserviceadres.nl/\">"; XmlDoc = XmlDoc + "<soapenv:Header/>"; XmlDoc = XmlDoc + "<soapenv:Body>"; XmlDoc = XmlDoc + "<end:get_certificate>"; XmlDoc = XmlDoc + "<credentials>"; XmlDoc = XmlDoc + "<password>pwd</password>"; XmlDoc = XmlDoc + "<username>usr</username>"; XmlDoc = XmlDoc + "</credentials>"; XmlDoc = XmlDoc + "<receipt_no>1234</receipt_no>"; XmlDoc = XmlDoc + "<retailer_id>9999</retailer_id>"; XmlDoc = XmlDoc + "</end:get_certificate>"; XmlDoc = XmlDoc + "</soapenv:Body>"; XmlDoc = XmlDoc + "</soapenv:Envelope>"; Variant XmlHttp = Variant::CreateObject("MSXML2.XMLHTTP"); XmlHttp.OleFunction("Open","POST",WideString("http://WebServiceAdres"),false); XmlHttp.OleFunction("setRequestHeader","Content-Type","text/xml; charset=utf-8"); XmlHttp.OleFunction("send", WideString(XmlDoc)); Variant responseXML = XmlHttp.OlePropertyGet("responseXML"); AnsiString XML = responseXML.OlePropertyGet("xml"); |
Het is de bedoeling dat XmlDoc dynamisch gevuld gaat worden, maar zover ben ik dus nog niet.
Ik heb het programma HTTP Debugger Pro geinstalleerd. Dit programma registreert alle HTTP requests van mijn PC. Als ik de exe handmatig start (en ik dus wel resultaat krijg van de webservice) krijg ik hier ook keurig een paar regeltjes in die het contact met de webservice laten zien. Als ik echter een pagina via mijn localhost opvraag (die de executable dus ook aanroept) dan krijg ik echter alleen de aanvraag van deze pagina zelf te zien, maar niet de interne request naar de webservice. Dus of Debugger Pro is geen goeie sniffer en herkent de HTTP request van de exe niet of de exe voert uberhaupt de request niet uit.
Verder heb ik geprobeerd de HTTPRIO component te gebruiken. Echter ben ik nog niet zo bedreven in C++ en met google krijg ik of onduidelijke voorbeelden, maar vooral veel Delphi voorbeelden. En mijn C++ kunde is niet toereikend genoeg om deze Delphi code om te zetten in C++ code.
Heeft iemand misschien enige tips of denkrichtingen die ik nog zou kunnen uitproberen want ik ben inmiddels wel door mijn ideeen heen heb ik zo'n vermoeden...
En dan nog een vraagje: weet iemand een betere HTTP sniffer dan HTTP Debugger Pro, want mijn complete PC begint te bokken als ik dat programma draai