UID Nummer online prüfen
Moderator: Moderatoren
- satmax
- 1000 working lines a day
- Beiträge: 831
- Registriert: Do, 02. Dez 2010 19:34
- Wohnort: Biberbach in Österreich
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
- Kontaktdaten:
UID Nummer online prüfen
Hallo,
ich möchte gerne die UID-Nummern von Kunden und Lieferanten automatisch aus dem Programm heraus überprüfen.
Dazu gibt es im Internet zum Beispiel die Seite: http://ec.europa.eu/taxation_customs/vi ... ponse.html
Wie gehe ich das unter XBase++ am besten an?
Gruß
Markus
ich möchte gerne die UID-Nummern von Kunden und Lieferanten automatisch aus dem Programm heraus überprüfen.
Dazu gibt es im Internet zum Beispiel die Seite: http://ec.europa.eu/taxation_customs/vi ... ponse.html
Wie gehe ich das unter XBase++ am besten an?
Gruß
Markus
Gruß
Markus
Markus
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2829
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 97 Mal
- Danksagung erhalten: 13 Mal
Re: UID Nummer online prüfen
Hallo, Markus -
für solche Anwendungen verwende ich wget.exe. Mit diesem (kostenlosen) Programm lassen sich POST und GET Operationen mit Webseiten ausführen. Ich habe eine Xbase-Klasse dafür geschrieben, mit der man einzelne Aufrufe/ganze Batch-Aufrufe durchführen kann. Bei Interesse würde ich den Quellcode zur Verfügung stellen.
für solche Anwendungen verwende ich wget.exe. Mit diesem (kostenlosen) Programm lassen sich POST und GET Operationen mit Webseiten ausführen. Ich habe eine Xbase-Klasse dafür geschrieben, mit der man einzelne Aufrufe/ganze Batch-Aufrufe durchführen kann. Bei Interesse würde ich den Quellcode zur Verfügung stellen.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: UID Nummer online prüfen
zunächst solltest du dich erkundigen, ob es eine Schnittstelle für Computerprogramme gibt, die könnte einfacher sein als die HTML Seite zu zerlegen.
Wenn nicht ...
1. nach LoadFromUrl() hier suchen - entweder ASINET oder der Code von Phil, den ich veröffentlicht habe (Wissensbasis etc.)
2. Website als Quelltext abspeichern
3. <FORM suchen und Felder analysieren
4. Am Besten HTML abspeichern und den Zielserver austauschen (in meinem LoadFromUrl() Datei upload Beispiel findet man meinen Testserver ... dieser gibt immer die Feldnamen und Inhalte zurück.
5. Aus allen Infos einen CGI String basteln (Variablen & Inhalte zusammenbauen, damit es so aussieht wie mein Testserver STDIN anzeigt). ASINET: GetCgiString( <oHtmlFormElement> ) --> cCgiString
6. Testen ...
Wenn nicht ...
1. nach LoadFromUrl() hier suchen - entweder ASINET oder der Code von Phil, den ich veröffentlicht habe (Wissensbasis etc.)
2. Website als Quelltext abspeichern
3. <FORM suchen und Felder analysieren
4. Am Besten HTML abspeichern und den Zielserver austauschen (in meinem LoadFromUrl() Datei upload Beispiel findet man meinen Testserver ... dieser gibt immer die Feldnamen und Inhalte zurück.
5. Aus allen Infos einen CGI String basteln (Variablen & Inhalte zusammenbauen, damit es so aussieht wie mein Testserver STDIN anzeigt). ASINET: GetCgiString( <oHtmlFormElement> ) --> cCgiString
6. Testen ...
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9373
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: UID Nummer online prüfen
Da die UID-Dienste SOAP-Abfragen unterstützen, wäre das ein Dreizeiler mit Xb2.Net
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: UID Nummer online prüfen
das ist so eine genormte Computerschnittstelle wie ich sie meinte.Tom hat geschrieben:Da die UID-Dienste SOAP-Abfragen unterstützen, wäre das ein Dreizeiler mit Xb2.Net
Wikipedia und SOAP ...
Gruß
Hubert
Hubert
- satmax
- 1000 working lines a day
- Beiträge: 831
- Registriert: Do, 02. Dez 2010 19:34
- Wohnort: Biberbach in Österreich
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
- Kontaktdaten:
Re: UID Nummer online prüfen
Was ich bisher rausgefunden habe, geht das in meinem Fall (Österreich) via Webservice WSDL. Dazu muss eine SSL Verbindung aufgebaut werden. Der Kunde benötigt dazu ein Zertifikat. Ich selbst besitze auch so ein Zertifikak, zahle ja auch Steuern... .
Hier gibt es das WSDL Dokument: https://finanzonline.bmf.gv.at/fon/ws/u ... rvice.wsdl
SSL Verbindung mit Zertifakt aufbauen
Dann muss ich Parameter übergeben
Methode login aufrufen
Antwort auswerten
Das wäre mit xb2.net ein Dreizeiler (6 Zeilen gelten auch noch. )?
Hier gibt es das WSDL Dokument: https://finanzonline.bmf.gv.at/fon/ws/u ... rvice.wsdl
SSL Verbindung mit Zertifakt aufbauen
Dann muss ich Parameter übergeben
Methode login aufrufen
Antwort auswerten
Das wäre mit xb2.net ein Dreizeiler (6 Zeilen gelten auch noch. )?
Gruß
Markus
Markus
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9373
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: UID Nummer online prüfen
Hallo, satmax.
Das WSDL liefert Dir die SOAP-Funktionen, die von der Schnittstelle unterstützt werden. Du musst also nur noch den Request formulieren und die SOAP-Anfrage laufen lassen; die Rückgabe enthält dann die gewünschten Werte.
Je nach Formatierung kann man das tatsächlich in einem Dreizeiler unterbringen.
Das WSDL liefert Dir die SOAP-Funktionen, die von der Schnittstelle unterstützt werden. Du musst also nur noch den Request formulieren und die SOAP-Anfrage laufen lassen; die Rückgabe enthält dann die gewünschten Werte.
Je nach Formatierung kann man das tatsächlich in einem Dreizeiler unterbringen.
Herzlich,
Tom
Tom
- satmax
- 1000 working lines a day
- Beiträge: 831
- Registriert: Do, 02. Dez 2010 19:34
- Wohnort: Biberbach in Österreich
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
- Kontaktdaten:
Re: UID Nummer online prüfen
Auch der SSL Verbindungsaufbau geht mit xb2.net?
Zuletzt geändert von satmax am Di, 22. Okt 2013 14:31, insgesamt 2-mal geändert.
Gruß
Markus
Markus
- satmax
- 1000 working lines a day
- Beiträge: 831
- Registriert: Do, 02. Dez 2010 19:34
- Wohnort: Biberbach in Österreich
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
- Kontaktdaten:
Re: UID Nummer online prüfen
Da brauche ich dann wohl die pro Version, $799.00 CAD ca. 570 Euro? Ist auch nicht gerade wenig, für einen Dreizeiler.
Gruß
Markus
Markus
- mini990
- 1000 working lines a day
- Beiträge: 592
- Registriert: Sa, 28. Jan 2006 9:44
- Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
- Danksagung erhalten: 1 Mal
Re: UID Nummer online prüfen
Hallo Georg,
auch wenn dieser Beitrag schon lange zurückliegt....
Mich interessiert die "Wget" Geschichte und hierzu Deine Klasse brennend.
Gibt's hier mehr Info's dazu?
Gruß Stefan
auch wenn dieser Beitrag schon lange zurückliegt....
Mich interessiert die "Wget" Geschichte und hierzu Deine Klasse brennend.
Gibt's hier mehr Info's dazu?
Gruß Stefan
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2829
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 97 Mal
- Danksagung erhalten: 13 Mal
Re: UID Nummer online prüfen
Hallo, Stefan -
klar, das funktioniert immer noch:
wget.exe ist über Google leicht zu lokalisieren.
Ich verwende meine Klasse etwa in dieser Art:
Die Klasse erzeugt folgende Dateien:
a) smpT#N.cmd
b) postdataT#N.txt
c) submitresultT#N.html
d) logwgetT#N.txt (wenn Logging der wget-Aktivität aktiviert wird).
T ist die Nummer des jeweiligen Threads, in dem die Klasse ausgeführt wird, d.h. Du kannst sie parallel in verschiedenen Threads ausführen, ohne dass es zu Überschneidungen kommt;
N ist die Folgenummer bei einer Batchverarbeitung (oWget:collect() sammelt Anfragen, um sie dann in einem Rutsch mittels oWget:getCollected() auszuführen)
Was das Auslesen der submitresultT#n.html Dateien angeht, kann ich nur auf meinen geplanten Beitrag auf der diesjährigen Jahreshauptversammlung verweisen, dort geht es um den Einsatz von Regular Expressions, etwas, das sich hier fantastisch nutzen lässt.
Und: wget.exe muss der Zugriff auf das Internet erlaubt werden.
klar, das funktioniert immer noch:
Code: Alles auswählen
#DEFINE CRLF Chr(13) + Chr(10)
#DEFINE VERSION "2013.09.19 1.108"
/*
History
1.102 - adding log feature
1.107 - added lBackGround to the :getCollected() method
*/
#INCLUDE "AppEvent.CH"
#INCLUDE "FileIO.CH"
#INCLUDE "Xbp.CH"
CLASS wGet
EXPORTED:
VAR CookieFile
VAR DelayJob
VAR DelayCalls
VAR LogRun
VAR Message
VAR Params
VAR ProxyServer
VAR Referrer
VAR Result READONLY
VAR aResult READONLY
VAR Log READONLY
VAR aLog READONLY
VAR ResultFile
VAR Retrials
VAR URL
VAR UserAgent
VAR Orders READONLY
CLASS VAR KeepFiles
METHOD init
METHOD collect
METHOD get
METHOD getCollected
VAR Version READONLY
ENDCLASS
METHOD wGet:init()
IF self:KeepFiles == NIL
KeepFiles := .F.
ENDIF
self:CookieFile := ""
self:DelayJob := 0
self:DelayCalls := 0
self:LogRun := .F.
self:Message := ""
self:Params := ""
self:Referrer := ""
self:Result := ""
self:Retrials := 0
self:URL := ""
self:UserAgent := ""
self:Orders := {}
self:Version := VERSION
RETURN (Self)
METHOD wGet:get(lParallel, lBackGround)
Local cWriteDoc, cScriptFile, cWriteLine, cSubmitFile, cLine, cCmd, cCmdLine, cUserAgent, cID, cLogFile
Local lSecureHTTP
Local nHandle, nSize
Local oThread
IF lParallel == NIL
lParallel := .F.
ENDIF
IF lBackGround == NIL
lBackGround := .T.
ENDIF
// validate parameters
IF Empty(self:URL)
ConfirmBox(, "No URL to retrieve defined", "Error", XBPMB_OK, XBPMB_CRITICAL)
QUIT
ENDIF
IF At("HTTPS:/", Upper(self:URL)) > 0
lSecureHTTP := .T.
ELSE
lSecureHTTP := .F.
ENDIF
// get user agent
IF Empty(self:UserAgent)
// cUserAgent := "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.11) Gecko/20101012 Firefox/3.6.15 ( .NET4.0E)"
cUserAgent := 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0'
ELSE
cUserAgent := self:UserAgent
ENDIF
oThread := ThreadObject()
cID := AllTrim(Str(oThread:threadID)) + "#"
self:ResultFile := cWriteDoc := "submitresult" + cID + ".html"
cScriptFile := "postdata" + cID + ".txt"
cLogFile := "logwget" + cID + ".txt"
IF !Empty(self:Message)
cWriteLine := self:Message
nHandle := fCreate(cScriptFile)
IF nHandle < 1
ConfirmBox(, "Error creating script file for submitting.", "Error", XBPMB_OK, XBPMB_CRITICAL)
RETU(.F.)
ENDIF
fWrite(nHandle, cWriteLine, Len(cWriteLine))
fClose(nHandle)
ENDIF
cSubmitFile := "smp" + cID + ".cmd"
cWriteLine := ""
IF !Empty(self:ProxyServer)
cWriteLine := "SET http_proxy=" + self:ProxyServer + CRLF
ENDIF
cWriteLine += 'wget '
IF !Empty(self:Cookiefile)
cWriteLine += '--load-cookies=' + self:CookieFile + ' --keep-session-cookies --save-cookies=' + self:CookieFile + " "
ENDIF
IF self:LogRun
cWriteLine += '--output-file=' + cLogFile + " "
ENDIF
IF lSecureHTTP
cWriteLine += "--no-check-certificate "
ENDIF
IF !Empty(self:ProxyServer)
cWriteLine += "-proxy=on "
ENDIF
IF !Empty(self:Params)
cWriteLine += self:Params + " "
ENDIF
cWriteLine += "--tries=" + AllTrim(Str(self:Retrials + 1)) + " "
cWriteLine += "--user-agent=" + '"' + cUserAgent + '" '
cWriteLine += '--output-document=' + cWriteDoc + ' '
IF !Empty(self:Message)
cWriteLine += '--post-file=postdata' + cID + '.txt '
ENDIF
cWriteLine += '"' + self:URL + '"'
nHandle := fCreate(cSubmitFile)
IF nHandle < 1
ConfirmBox(, "Error creating submit file.", "Error", XBPMB_OK, XBPMB_CRITICAL)
RETU(.F.)
ENDIF
fWrite(nHandle, cWriteLine, Len(cWriteLine))
fClose(nHandle)
cCmd := "cmd.exe"
cCmdLine := "/C smp" + cID + ".cmd"
nHandle := RunShell(cCmdLine, cCmd, lParallel, lBackGround)
nHandle := fOpen(cWriteDoc, FO_READ)
nSize := fSize(nHandle)
cLine := Space(nSize)
fRead(nHandle, @cLine, nSize)
fClose(nHandle)
self:Result := cLine
IF self:LogRun
nHandle := fOpen(cLogFile, FO_READ)
nSize := fSize(nHandle)
cLine := Space(nSize)
fRead(nHandle, @cLine, nSize)
fClose(nHandle)
self:Log := cLine
ENDIF
RETURN (Self)
METHOD Wget:collect()
Local aSet
Local cWriteLine
Local lSecureHTTP
IF ValType(self:Orders) <> "A"
self:Orders := {}
ENDIF
IF At("HTTPS:/", Upper(self:URL)) > 0
lSecureHTTP := .T.
ELSE
lSecureHTTP := .F.
ENDIF
aSet := Array(2)
aSet[1] := self:Message
cWriteLine := ""
IF !Empty(self:ProxyServer)
cWriteLine := "SET http_proxy=" + self:ProxyServer + CRLF
ENDIF
cWriteLine += 'wget '
IF !Empty(self:Cookiefile)
cWriteLine += '--load-cookies=' + self:CookieFile + ' --keep-session-cookies --save-cookies=' + self:CookieFile + " "
ENDIF
IF self:LogRun
cWriteLine += '--output-file=%%LOGFILE%% '
ENDIF
IF lSecureHTTP
cWriteLine += "--no-check-certificate "
ENDIF
IF !Empty(self:ProxyServer)
cWriteLine += "-proxy=on "
ENDIF
IF !Empty(self:Params)
cWriteLine += self:Params + " "
ENDIF
cWriteLine += '--output-document=%%DOCUMENT%% '
IF !Empty(self:Message)
cWriteLine += '--post-file=%%POSTDATA%% '
ENDIF
cWriteLine += '"' + self:URL + '"'
aSet[2] := cWriteLine
AAdd(self:Orders, AClone(aSet))
RETURN (Self)
METHOD wGet:getCollected(lParallel, lBackGround)
Local cWriteLine, cIndic, cScriptFile, cDocFile, cCmd, cCmdLine, cLine, cID, cLogFile
Local nI, nLen, nHandle, nSmpHandle, nSize, nJ
Local oThread
IF lParallel == NIL
lParallel := .F.
ENDIF
IF lBackGround == NIL
lBackGround := .T.
ENDIF
self:aResult := {}
self:aLog := {}
oThread := ThreadObject()
cID := AllTrim(Str(oThread:threadID)) + "#"
nLen := Len(self:Orders)
IF nLen < 1
RETU(self) // nothing queued, nothing to execute
ENDIF
nSmpHandle := fCreate("smp" + cID + ".cmd")
nJ := 0
FOR nI := 1 TO nLen
// prepare index indicator
cIndic := LTrim(Str(nI))
// create scriptfile for entry
cScriptFile := "postdata" + cID + cIndic + ".txt"
nHandle := fCreate(cScriptFile)
nSize := Len(self:Orders[nI, 1])
fWrite(nHandle, self:Orders[nI, 1], nSize)
fClose(nHandle)
cWriteLine := self:Orders[nI, 2]
cWriteLine := StrTran(cWriteLine, "%%POSTDATA%%", cScriptFile) + CRLF
cDocFile := "SubmitResult" + cID + cIndic + ".html"
cWriteLine := StrTran(cWriteLine, "%%DOCUMENT%%", cDocFile)
cLogFile := "logwget" + cID + cIndic + ".txt"
cWriteLine := StrTran(cWriteLine, "%%LOGFILE%%", cLogFile)
nSize := Len(cWriteLine)
fWrite(nSmpHandle, cWriteLine, nSize)
IF self:DelayJob > 0 .AND. nI < nLen
IF nJ >= self:DelayCalls
cWriteLine := "timeout " + Trim(Str(self:DelayJob)) + CRLF
nSize := Len(cWriteLine)
fWrite(nSmpHandle, cWriteLine, nSize)
nJ := -1
ENDIF
nJ ++
ENDIF
NEXT
fClose(nSmpHandle)
cCmd := "cmd.exe"
cCmdLine := "/C smp" + cID + ".cmd"
nHandle := RunShell(cCmdLine, cCmd, lParallel, lBackGround)
nHandle := fOpen(cDocFile, FO_READ)
nSize := fSize(nHandle)
cLine := Space(nSize)
fRead(nHandle, @cLine, nSize)
fClose(nHandle)
self:Result := cLine
FOR nI := 1 TO nLen
cIndic := LTrim(Str(nI))
cDocFile := "SubmitResult" + cID + cIndic + ".html"
nHandle := fOpen(cDocFile, FO_READ)
nSize := fSize(nHandle)
cLine := Space(nSize)
fRead(nHandle, @cLine, nSize)
fClose(nHandle)
AAdd(self:aResult, cLine)
// and the logs as well
cDocFile := "logwget" + cID + cIndic + ".txt"
nHandle := fOpen(cDocFile, FO_READ)
nSize := fSize(nHandle)
cLine := Space(nSize)
fRead(nHandle, @cLine, nSize)
fClose(nHandle)
AAdd(self:aLog, cLine)
NEXT
self:Orders := {}
self:DelayJob := 0
RETURN (Self)
wget.exe ist über Google leicht zu lokalisieren.
Ich verwende meine Klasse etwa in dieser Art:
Code: Alles auswählen
oWget := wGet():new()
oWget:ProxyServer := cProxyAdr
oWget:UserAgent := cUserAgent
oWget:URL := cURL
oWget:CookieFile := cCookieFile
oWget:message := ""
oWget:get(, lBackGround)
cLine := oWget:result
a) smpT#N.cmd
b) postdataT#N.txt
c) submitresultT#N.html
d) logwgetT#N.txt (wenn Logging der wget-Aktivität aktiviert wird).
T ist die Nummer des jeweiligen Threads, in dem die Klasse ausgeführt wird, d.h. Du kannst sie parallel in verschiedenen Threads ausführen, ohne dass es zu Überschneidungen kommt;
N ist die Folgenummer bei einer Batchverarbeitung (oWget:collect() sammelt Anfragen, um sie dann in einem Rutsch mittels oWget:getCollected() auszuführen)
Was das Auslesen der submitresultT#n.html Dateien angeht, kann ich nur auf meinen geplanten Beitrag auf der diesjährigen Jahreshauptversammlung verweisen, dort geht es um den Einsatz von Regular Expressions, etwas, das sich hier fantastisch nutzen lässt.
Und: wget.exe muss der Zugriff auf das Internet erlaubt werden.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: UID Nummer online prüfen
Hallo Georg,
das mit WGET hört sich gut an, hast du das in der Wissensdatenbank abgelegt ?
Normalerweise greife ich immer mit LoadFromUrl() auf selbst erstelle HTML Seiten zu, da kann man alles über interne Variablen regeln und braucht keine cookies.
Aber wer weiß wann ich doch mal welche brauche
das mit WGET hört sich gut an, hast du das in der Wissensdatenbank abgelegt ?
Normalerweise greife ich immer mit LoadFromUrl() auf selbst erstelle HTML Seiten zu, da kann man alles über interne Variablen regeln und braucht keine cookies.
Aber wer weiß wann ich doch mal welche brauche
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2829
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 97 Mal
- Danksagung erhalten: 13 Mal
Re: UID Nummer online prüfen
Hallo, Hubert -
nein, es steht noch nicht in der Wissenbasis, aber ich werde das wohl in den kommenden Tagen mal angehen, und auch ein wenig erklären, wie man an die erforderlichen POST-Informationen rankommt.
nein, es steht noch nicht in der Wissenbasis, aber ich werde das wohl in den kommenden Tagen mal angehen, und auch ein wenig erklären, wie man an die erforderlichen POST-Informationen rankommt.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.