Autor Thema: URLDownloadToFile() lädt nur, wenn Website zuvor geöffnet wurde  (Gelesen 28063 mal)

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Hallo Silke,

da steht eine url oder ein Pfad. Du solltest an dieses Start-Script kommen können.
Afaik sind die lesbar. Heißt ja script.
Ansonsten kannst Du dich auch mit dem Admin in Verbindung setzen und ihm dein Anliegen mitteilen und das deine Programme den Proxy nicht finden.
Mein Java-Programm müßte ein wenig ergänzt werden. Ist aber kein Problem. Vielleicht kannst du mit dem jetzigen Wissen auch die c-libraries der vorherigen Versuche ans Laufen bekommen. Da sollte es Einträge für Proxy usw. geben.
Habt ihr ein Internetpassword, dh. mußt du, wenn Du von dem Arbeitsplatzrechner ins Internet willst ein extra usernamen/passwort eingeben? Auch damit käme die java Lösung zurecht. Muss aber ein wenig ergänzt werden.

Das erklärt btw auch die obigen Effekte, dass es aus Excel funktioniert und aus Notes mit dieser c-lib nur, wenn du die runterzuladende PDF einmal mit dem IE geöffnet hast. Das Excel ist so tief mit dem IE integriert, dass es dessen Proxy-Einstellungen ausliest. Die c-lib findet den Proxy nicht, kann aber den Browser-cache auslesen.

Gruß Axel

Gruß Axel
« Letzte Änderung: 23.11.11 - 10:37:41 von Pitiyankee »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Silke Wolf

  • Frischling
  • *
  • Beiträge: 16
  • Geschlecht: Weiblich
Dank deiner Info weiß ich nun endlich, woran es liegt. Danke!

Ja wir müssen Userkennung und Passwort eingeben.

Das Script kann ich lesen. Muß nur den Pfad samt Dateinamen in den Browser eingeben und es wird mir angezeigt.
« Letzte Änderung: 23.11.11 - 11:02:23 von Silke Wolf »

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Note to self. Hätte dich das mit dem Proxy auch direkt prüfen lassen.  ;D
1. Proxy Zeugs prüfen?
2. Hat die Ziel-Webseite eine Authentifizierung und wenn ja welche?
3. Wie soll das heruntergeladende Zeug in Notes weiterverarbeitet werden?
Ich mach heut abend den java Code mal proxy-fähig. Haben immer wieder Leute Interesse an sowas. Schreib das als eine Art Modulsystem, in dem Proxy Authentifizierung, Webseite Authentifizierung und Art der Weiterverarbeitung deklarativ per .property Datei hinzugeblendet werden können. Dependency Injection für Arme. 
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Silke Wolf

  • Frischling
  • *
  • Beiträge: 16
  • Geschlecht: Weiblich
Zu
1.) Was meinst du damit, brauchst du noch Informationen?
2.) Nein, hat keine Authentifizierung.
3.) In Notes wird die heruntergeladene PDF-Textdatei in einem Lotus Notes Dokument in einem Rich-Text-Feld angehängt (meistens stehen hier schon Dateien).
-> In einer Schleife werden alle Dokumente, die eben noch mit solch einer PDF-Textdatei versehen werden sollen, gesammelt.
Verarbeitunsvariante a) Anschließend wird Dokument für Dokument abgearbeitet und die Textdatei vom Internet heruntergeladen und gleich im Lotus Notes Dokument im entsprechenden - schon bestehenden Feld - angehängt.
Verarbeitunsvariante b) Alle Text-PDFs werden heruntergeladen und dann in den Dokumenten gespeichert.
« Letzte Änderung: 24.11.11 - 10:34:13 von Silke Wolf »

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Hallo Silke,

heute abend schaff ich das vermutlich. Problem kann noch bereiten, wenn der Proxy NTLM Authentifizierung benutzt.
Ich kann das allerdings nicht testen, weil ich nicht hinter einem Proxy hänge.

Gruß Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Hallo Silke,

unten ist die neue Version.
Wie gehabt entpacken und die jars in das leere lib Verzeichnis.

Unter bin gibts jetzt eine Datei settings.properties

url=http://www.google.de
clazz.processReturn=de.aja.docall.ProcessReturnString
clazz.prepareCall1=de.aja.preparecall.PrepareCallBaseReverseProxy
proxyHost=127.0.0.1
proxyPort=8080
proxyUser=axel
proxyPwd=test

Hinter die Proxy Werte trägst Du deine Werte ein. Die restlichen Zeilen so lassen wie sind.
Es wird nicht funktionieren, wenn euer Reverse Proxy NTLM Authentifizierung. Das ist aber eher selten.
In die url kannst Du später deine URL eintragen, allerdings gibts zur Zeit kein Handler, der Dateien verarbeitet. Der schreibt aktuell einfach den Return vom remote Webserver als String raus. Ist aber kein Problem. Vielleicht schreib ich das heute abend noch. So kannst Du zumindest testen, ob Du nach draussen kommst.
Den Proxy-Code konnte ich nicht testen, weil ich keinen Proxy hab. Sollte aber funktionieren, sofern nicht NTLM Authentifizierung benutzt wird.

Neuer Startbefehl. Wieder aus dem bin Verzeichnis

java -cp ../lib/commons-httpclient-3.1.jar;../lib/commons-logging-1.0.4.jar;../lib/commons-codec-1.2.jar;. de.aja.main.CommandManager

FALLS JEMAND ANDERS DAS MAL AUSPROBIERT und keinen Proxy hat:
Einfach in settings.properties vor clazz.prepareCall1=de.aja.preparecall.PrepareCallBaseReverseProxy ein Gatterzeichen setzen.
Also
#clazz.prepareCall1=de.aja.preparecall.PrepareCallBaseReverseProxy
« Letzte Änderung: 24.11.11 - 21:45:02 von Pitiyankee »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Falls dieses Zeugs hier läuft, kannst Du es in einem Notes Java Agenten integrieren.
Das ist relativ einfach.
Dann hast Du 2 Optionen:
a) Du schreibst den ganzen restlichen Code in Java um. Das stell ich mir ohne Java-Kenntnisse relativ schwierig vor, obwohl die Java und LotusScript Apis sich kaum unterscheiden.
b) Du benutzt dieses Zeugs hier, um die PDF Dateien in einem Verzeichnis auf dem Rechner zu speichern und der LotusScript Agent bleibt wie er ist, er holt die Dateien halt nur auf diesem Verzeichnis. Damit entsteht eine gewisse Zeitverzögerung, aber oft ist das nicht so schlimm.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Und diese Version läd ein PDF runter und schreibt es in ein Verzeichnis.

settings.properties

folderDest beschreibt den Ordner auf dem OS, in dem die Datei abgespeichert wird.
clazz.prepareCall1 hier nicht auskommentiert. D.h. es wird reverse Proxy benutzt.
clazzProzessReturn nun mit ProcessReturnStream (nicht mehr String)
proxy Werte natürlich wieder anpassen.

urlBase=http://www.digbib.org
urlDetail=/Kurt_Tucholsky_1890/Schloss_Gripsholm_.pdf
folderDest=D:/test/notes/
#clazz.processReturn=de.aja.docall.ProcessReturnString
clazz.prepareCall1=de.aja.preparecall.PrepareCallBaseReverseProxy
clazz.processReturn=de.aja.docall.ProcessReturnStream
proxyHost=127.0.0.1
proxyPort=8080
proxyUser=axel
proxyPwd=test

Man kann aber auch wieder zur Lösung oben zurück (String wird ausgegeben). Dafür einfach die clazz.processReturn auskommentieren und bei der anderen das # wegnehmen. (Gatterzeichen ist Kommentarzeichen).
Das meinte ich mit "modularer Lösung".
Bei einem pdf machts nur halt keinen Sinn das als String auszugebren.
Später erweitere ich das noch damit, dass man auch Http-POST Methoden benutzen kann. Zur Zeit ist alles GET.
Auch Authentizifizierung beim entfernten Host, SSL, Cookies läßt sich alles einbauen.
« Letzte Änderung: 24.11.11 - 23:30:54 von Pitiyankee »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Silke Wolf

  • Frischling
  • *
  • Beiträge: 16
  • Geschlecht: Weiblich
Hallo Axel,

Wow! -  es geht (sowohl mit zip3 als auch mit zip4 [PDF wurde erzeugt].

Ich werde es jetzt mal mit meinen Depatisnet-Links versuchen.

Gruß Silke


Offline Silke Wolf

  • Frischling
  • *
  • Beiträge: 16
  • Geschlecht: Weiblich
Jetzt habe ich mal meinen Link eingefügt.
Zuvor habe ich die Depatisnetseite einmal von Hand im IE geöffnet - könnte aber sein, dass das nicht hilft, weil dein Java-Code das nicht registriert. Vielleicht muß er zuvor auch einfach nur einmal die Seite http://depatisnet.dpma.de/ ansprechen?

Mein Link: http://depatisnet.dpma.de/DepatisNet/depatisnet?action=textpdf&docid=DE03003827T1

In Datei "settings.properties" folgende Änderung vorgenommen

urlBase=http://depatisnet.dpma.de/DepatisNet/
urlDetail=depatisnet?action=textpdf&docid=DE03003827T1
folderDest=C:/textpdf/

Wobei ich verschiedenste Varianten meines Links auf die ersten beiden Zeilen vorgenommen habe, was jedoch an der Ausgabe nichts verändert hat.

Z.B.:
urlBase=http://depatisnet.dpma.de/DepatisNet/depatisnet?action=textpdf&docid=DE03003827T1
urlDetail=

Proxy-Infos und Login-Daten haben ich in der Ausgabe ausgeixt (XXXXX):

No further prepareCall objects found. Last index was: 2
PrepareCallBaseReverseProxy called
Will call proxy with XXXXX:XXXXX->XXXXX/XXXXX
25.11.2011 08:48:13 org.apache.commons.httpclient.HttpMethodDirector authenticateHost
WARNUNG: Required credentials not available for BASIC <any realm>@depatisnet.dpma.de:80
25.11.2011 08:48:13 org.apache.commons.httpclient.HttpMethodDirector authenticateHost
WARNUNG: Preemptive authentication requested but no default credentials available
Exception in thread "main" org.apache.commons.httpclient.CircularRedirectException: Circular redirect to 'http://depatisnet.dpma.de:80/DepatisNet/depatisnet'
        at org.apache.commons.httpclient.HttpMethodDirector.processRedirectResponse(HttpMethodDirector.java:638)
        at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:179)
        at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
        at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
        at de.aja.main.HttpClientInvoker.invoke(HttpClientInvoker.java:50)
        at de.aja.main.DefaultHttpClientInvoker.doInvoke(DefaultHttpClientInvoker.java:24)
        at de.aja.main.CommandManager.action(CommandManager.java:60)
        at de.aja.main.CommandManager.main(CommandManager.java:83)
« Letzte Änderung: 25.11.11 - 09:52:18 von Silke Wolf »

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Hallo Silke,

das wäre kein Problem.

Es gibt aber ein anderes Problem:
Wenn ich mit dem Browser die URL http://depatisnet.dpma.de/DepatisNet/depatisnet?action=textpdf&docid=DE03003827T1 aufrufe, werde ich auf eine andere Seite geleitet.
Beim 2. Aufruf gibt er dann das PDF zurück.
Mit Firebug sieht das extrem so aus, dass er beim ersten Aufruf ein jsessionid Cookie setzt und es dann beim zweiten Aufruf mit dieser Session geht.
Nicht unlösbar, erhöht aber die Komplexität.
Schau mir das in ein paar Stunden mal mit wire-shark und dem Java Code an.

Gruß Axel 
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Silke Wolf

  • Frischling
  • *
  • Beiträge: 16
  • Geschlecht: Weiblich
Wie gesagt, in Excel rufe ich einmal von Hand nur die Seite "http://depatisnet.dpma.de/" auf, danach kann ich dann im Hintergrund die PDFs ziehen.
Dafür stelle nur die Nummern (können tausende Nummern sein) in einer Excel-Datei zur Verfügung, z.B. DE03003827T1 usw., setzen den Link zusammen, z.B. http://depatisnet.dpma.de/DepatisNet/depatisnet?action=textpdf&docid=DE03003827T1 usw und den Dateinamen und Pfad zum Abspeichern, z.B. C:\textpdf\DE03003827T1_text.pdf usw.
Das mit der Session-ID ist klar, aber Excel kriegt das gebacken.

Ich habe in Lotus Notes eine Ansicht, in der mir nur die Dokumente angezeigt werden, wo dieses Text-PDF fehlt. Über eine Schaltfläche exportiert er mir alle Schutzrechtsnummern in eine Textdatei.

In Excel lese ich die Textdatei ein (pro Nummer eine Zeile) und generiere gleichzeitig den Ausgabepfad samt Dateinamen. Anschließend gehe ich einmal manuell auf die Depatisnet-Seite. Dann starte ich per VB-Code in Excel den Dateidownload.

Anschließend gehe ich wieder ins Notes und per Schaltfläche starte ich den Import der heruntergeladenen Dateien in die entsprechenden Dokumente.
« Letzte Änderung: 25.11.11 - 13:00:42 von Silke Wolf »

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Silke,

Das hat mich jetzt ein wenig beunruhigt, aber es gibt kein Grund zur Panik.

Erstmal ein paar Überlegungen, auch falls jemand mitliest.  

Wenn das Cookie nicht gesetzt ist, gibt es einen HTTP Status code 302 als Antwort.
Als Antwort auf die redirect Antwort des Browsers schickt der Server diese html Seite, in der steht steht: Herzlich willkommen zur Recherche in den Datenbeständen des DEPATIS-Systems

Wenn das Cookie gesetzt ist, gibts direkt das PDF zurück, ohne redirect.

Ich müßte follow-redirects ausschalten und den HTTP-Statuscode auslesen und bei einem 300er
a) den Cookie auslesen, oder falls keiner gesendet wird
b) die "http://depatisnet.dpma.de/" anfordern, weil da steht der Cookie definitiv im Response Header vom GET
c) der Wert des Cookies im Property File abspeichern und einen neuen PDF - Request mit Cookie starten.
Folge-Calls können dann den im properties file gespeicherten cookies-Wert nutzen, solange der gültig ist.

Muß noch geklärt werden, was bei einem ungültigen Cookie geschieht. Denke aber dasselbe wie wenn kein Cookie gesetzt ist. Würd man also noch mal den obigen a)b)c) Prozess durchlaufen.

Bis Montag ist das vermutlich fertig.

Ich hab das öfters gemacht und die Intention hiervon ist, das mit den Erfahrungen einmal richtig zu machen, d.h. praktisch eine openSource Lösung, die sehr modular und erweiterbar ist, und für möglichst viele Einsatzgebiete ohne viel Programmier-Aufwand anpassbar ist. In diesem Sinne ist dein Input wertvoll, Silke.
Fühl Dich durch nix verpflichtet: mein vermeintlicher Aufwand, etc. Aber falls Bedarf besteht und ihr dafür Budget habt, könnt ihr mich auch tageweise als Consultant buchen. Gilt natürlich auch für alle anderen, die das Zeugs nutzen wollen.
Hab vor das irgendwo in google oder auf sourceforge als openSource Projekt zu veröffentlichen.

Zitat
aber Excel kriegt das gebacken.
Meine Grube hier ist ja eine ganz andere Baustelle. Excel kostet Lizenzgebühren und profitiert von gewaltigen Skalenerträgen (i.S. von Economies of Scale). Microsoft lebt ja unter anderem davon, dass ihre verschiedenen Produkte so tief integriert sind. Die haben das da irgendwann reinprogrammiert, Lotus nicht.
Ich arbeite hier mit einer Implementierung des HTTP Protokolls namens apache jakarta HTTPClient, eine anwendungs-entferntere und protokoll-nähere Schicht. Es ist schon eine Abstraktion. Wenn ich mir das in dem Netzwerk-Sniffer wireshark anschaue geht darunter noch eine Menge mehr vor. Arbeit, die mir jakarta HTTPClient abnimmt.  
  
lG

Axel
« Letzte Änderung: 25.11.11 - 17:30:55 von Pitiyankee »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Hallo Silke,

am besten du entpackst das unten in einen neuen Ordner.
Als nächstes kopierst Du die vorher von dir heruntergeladenen jars von dem alten lib Verzeichnis ins neue.

Zunächst mußt Du noch eine weitere Datei herunterladen, die wieder fürs Lib-Verzeichnis bestimmt ist.  
http://mirrors.ibiblio.org/pub/mirrors/maven2/log4j/log4j/1.2.16/log4j-1.2.16.jar

Im lib Verzeichnis befinden sich nun diese 4 Dateien mit genau diesen Namen
commons-httpclient-3.1.jar
commons-logging-1.0.4.jar
commons-codec-1.2.jar
log4j-1.2.16.jar

Wenn nicht, benenn sie entsprechend um.
Im bin des neuen entpackten zip befindet sich eine bat namens setClasspath.bat
Ruf die als erstes aus der cmd-Box auf.

Dann kannst Du die Datei debatisCommon.properties in bin mit deinen Werten füllen, d.h. Werte für den Proxy und für den Ordner, in dem die PDF Dateien landen sollen.

Als nächstes startest Du mit
java de.aja.main.TestDebatis

Programm wird zunächst keine cookies.properties Datei vorfinden und besorgt sich das Cookie von der http://depatisnet.dpma.de/
Dann schreibt es eine cookies.properties Datei. (findest Du im bin Verzeichnis)
Sofort versucht es dann das PDF mit dem Cookie runterzuladen.
Beim nächsten Versuch wird die http://depatisnet.dpma.de nicht mehr aufgerufen, solange das Cookie gültig ist.
Wenn das Cookie ungültig geworden ist, holt sich das Programm ein frisches Cookie und schließt damit dann den download erfolgreich ab.
Du kannst das simmulieren, indem Du zwischen 2 Aufrufen den Inhalt von cookies.properties ein wenig veränderst. Etwa .dp-app02 statt .dp-app06 oder was immer da steht.

Sofern das erfolgreich läuft, kann ich Dir erklären, wie man das ganze in einen Notes Agenten einbindet.

Bei mir läuft es gut.

Gruß Axel

« Letzte Änderung: 27.11.11 - 17:28:58 von Pitiyankee »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Silke Wolf

  • Frischling
  • *
  • Beiträge: 16
  • Geschlecht: Weiblich
Hallo Axel,

wenn ich jetzt bei dir um die Ecke wäre, würde ich dich jetzt aus dem Bett klingeln und zum Frühstück einladen  :-*.

Die Datei wurde erfolgreich heruntergeladen.

Es wäre auch gut, wenn das Passwort für den Intnetzugang verschlüsselt wäre. Er liegt ja lesbar in der Datei und da ist mir nicht ganz wohl dabei. Meinst du, dass du dafür auch noch eine Lösung hättest?

Und wie binde ich das ganze nun in Notes ein?

LG Silke

p.s. bin fast ein wenig neidisch auf dein Können  >:D
« Letzte Änderung: 28.11.11 - 08:22:17 von Silke Wolf »

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Hallo Silke,

dazu komme ich heute abend. Die Erklärung wie man das in Domino einbindet.
Grundsätzlich gibt es 2 Möglichkeiten:
1) was in /bin ist mit java1.4 komplilieren und als jar packen.
2) was in /src ist in eine Java Scriptbibliothek importieren und dort kompilieren (abspeichern)

Für beide Fälle müßte:
Ein Notes Konfigurationsdokument (neue Notes Form mit 1 Dokument in einer Ansicht) geschrieben werden, dass all die Werte aus den Properties als Notes Felder aufnimmt. Dieses Dokument kannst Du mit einem READER Feld so absichern, dass das ganze nur für die Administratoren und den Server sichtbar ist. Ich geh davon aus, dass dies zeitgesteuert auf einem Server läuft?

Der source code von de.aja.main.TestDebatis aus /test-acceptance in einen Notes Java Agenten copy&pasted werden. Im Agenten Allow Restricted Operations oder so ähnlich anhaken. Hier sind ein paar Änderungen notwendig. Die Properties werden nicht mehr aus den .properties files gelesen, sondern halt aus dem Notes-dokument. Man kann sich hier überlegen, wo der Agent die URLs für die runterzuladenden PDF Dokumente herbekommt? Also praktisch eine Liste des XXX hinter dem docid= von dem pdf download links: http://depatisnet.dpma.de/DepatisNet/depatisnet?action=textpdf&docid=XXX
Ich schreib heute abend eine detaillierte Liste mit code für den Agenten.   

Schön, dass es so weit funktioniert.

Das Passwort liesse sich symetrisch verschlüsseln. Eine solche Erweiterung kann ich allerdings frühestens am nächsten WE schreiben, 
Allerdings liesse es sich auch in ein Notes-Dokument schreiben, das über Reader Felder nur für Administratoren und den Server sichtbar ist. Das ist okaye Domino Sicherheit.

Ich würd dafür sowieso einen "technischen User" benutzen. Für normale User existiert normalerweise eine Politik, dass das Passwort alle 4 Wochen oder so geändert werden muss.

Zu deiner privaten Mitteilung: Für mich macht es aus meiner Sicht wenig Sinn, als Product-Company aufzutreten. Hätte allemöglichen legalen Konsequenzen und Werbungskosten zur Folge. Auch Supportaufwand ist schwer zu übersehen. Dann lieber openSource. 
Werd versuchen, das auf openNTF unterzubringen. Das liesse sich dann einfach werbemässig nutzen. Danke für den Link zur Konkurrenz.   

lG

Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Silke,

Schritt I Importieren der Sourcen und jars in eine Java  Scriptbibliothek (nicht zu verwechseln mit javascript scriptBibliothek.


ich hab hier nur Notes8.5. Aber in 7 gibts alle die Gestaltungselemente auch. Sieht halt ein wenig anders aus.

1. Schritt: Erstelle eine Java Script Bibliothek (nicht zu verwechseln mit JavaScript Script Bibliothek). Unter Notes 8.5 steht die unter
Code
-> Scriptlibraries
2. Klicke auf Import - Java Source
Navigiere in dem Fenster zu dem letzten entpackten Zeugs von was ich am Sonntag abend gepostet hab und stell die Maus auf den src-Ordner.
Hak links src an und rechts bei Bedarf HttpClientTutorial ab (brauch man eh nicht mehr, ist aber egal).
Finish Button drücken
3. Die sourcen sind jetzt in die java ScriptBibliothek importiert. Es erscheinen sehr viele Fehlermeldungen.
Noch mal Import klicken. Da jetzt Archive wählen. Wieder zu dem letzten entpackten Zeug von Sonntag, jetzt aber der lib Ordner.
Die 4 jars anhaken (s. screenshot)
Nach finish verschwinden die Fehlermeldungen.
Java   Scriptbibliothek speichern.

   
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Jetzt der Agent.
1. Erzeuge einen neuen Agenten. Nenn ihn irgendwie und wähle Java.
2. Irgendwo in der 2. Lasche in den Design-Einstellungen. Irgendwo kannst Du die Runtime Security des Agenten einstellen. Das ist sehr wichtig. Ich hab unten ein Screenshot, aber das ist in Notes 8.5 an einer völlig anderen Stelle..
3. Jetzt wählst Du unter Import die Java ScriptBibliothek aus, die du vorher gespeichert hast. Sieht unter Notes85 auch sehr anders aus.

Jetzt kannst Du den JavaCode bearbeiten.

Da steht jetzt sowas:
Code
import lotus.domino.*;

public class JavaAgent extends AgentBase {

    public void NotesMain() {

      try {
          Session session = getSession();
          AgentContext agentContext = session.getAgentContext();

          // (Your code goes here)

      } catch(Exception e) {
          e.printStackTrace();
       }
   }
}

Ich schreib das jetzt schnell und teste das dabei direkt. Sieht aber gut aus. Kompiliert alles.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Alles was im NotesAgent an Code drin steht löschen. Dann das da rein kopieren.
Du müßtest dann noch ein configDoc in Notes erzeugen. Erklärungen s.u. Frag nach!
Wieder unten deine Proxy Werte und die Wert des destDir setzen.

Zwei Sachen hab ich oben vergessen.
Im Agenten einstellen Runtime Trigger: on Event : Action Event Selection (ist glaub ich Standard)
und v.a. Target: None. Steht standardmässig all Selected Documents.

Im Menü vom Designer findest du unter Tools den Eintrag "Show Java Debug Console". Da draufklicken. Das Fenster zeigt Fehlermeldungen und System.out.println an.
Bei mir funktioniert das. 

Code
import java.io.File;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;

import org.apache.commons.httpclient.methods.GetMethod;

import de.aja.main.HttpClientInvoker;

import lotus.domino.*;

public class JavaAgent extends AgentBase {

	public void NotesMain() {
		
		

		try {
			
			Session session = getSession();
			AgentContext agentContext = session.getAgentContext();
			Document docConfig = null; // 
			Database db = agentContext.getCurrentDatabase();
			//View vw = db.getView("vwConfig");
			//docConfig = vw.getFirstDocument();
			List urlDetails = new ArrayList();
			urlDetails.add("DE03003827T1");
			// mit add können beliebig viele urlDetails hinzugefügt werden. 
			
			
			
			downloadManager(docConfig, urlDetails);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * @param args
	 * @throws Exception
	 */
	public void downloadManager(Document docProps, List urlDetails)
			throws Exception {
		Properties propsMain = new Properties();
		Properties propsPDF = new Properties();
		Properties propsCommon = new Properties();
		

		/*
		 * DIESE WERTE WIEDER MIT DEINEN ERSETZEN!!!
		 */
		/*
		 * IN EINEM ZWEITEN SCHRITT KANNST DU DIE WERTE FÜR DIE PROPS (das
		 * zweite Argument von den .put calls aus einem Notes Document docProps
		 * holen!
		 */
		propsCommon.put("de.aja.preparecall.AddReverseProxyBaseAuth.proxyHost",
				"http://111.111.111.111");
		propsCommon.put("de.aja.preparecall.AddReverseProxyBaseAuth.proxyPort",
				"8080");
		propsCommon.put("de.aja.preparecall.AddReverseProxyBaseAuth.proxyUser",
				"axel");
		propsCommon.put("de.aja.preparecall.AddReverseProxyBaseAuth.proxyPwd",
				"kennwort");
		propsCommon.put("folderDest", "D:/test/notes/");

		
		// kann so bleiben, übersichtlicher aber von docConfig. Zugriff mit docConfig.getStringValue("fieldCookie");
		propsMain.put("url", "http://depatisnet.dpma.de/");
		propsMain.put("clazzesPrepareCall","de.aja.preparecall.AddReverseProxyBaseAuth");
		propsMain.put("de.aja.preparecall.AddFollowRedirects.followRedirects",
				"false");
		propsMain.put("clazzProcessReturn",
				"de.aja.docall.ReturnCookiesHandler");

		// propsPDF.put("url","http://depatisnet.dpma.de/DepatisNet/depatisnet?action=textpdf&docid=DE03003827T1");
		propsPDF.put("clazzesPrepareCall",
				"de.aja.preparecall.AddRequestHeader:de.aja.preparecall.AddReverseProxyBaseAuth");
		propsPDF.put("de.aja.preparecall.AddFollowRedirects.followRedirects",
				"false");
		propsPDF.put("clazzProcessReturn",
				"de.aja.docall.ReturnBodyAsStreamHandler");

		propsMain.putAll(propsCommon);
		propsPDF.putAll(propsCommon);

		Iterator it = urlDetails.iterator();
		int counter = 0;
		
		//this.cookie = docConfig.getItemValueString("cookie"); // cookie aus config Doc holen!
		String cookie = null; // die Zeile auskommentieren, wenn cookie aus doc, ist logisch.
		String cookieBefore = cookie; // die stehenlassen
		
		while (it.hasNext()) {
			
			String urlDetail = (String) it.next();
			System.out.println("downloading doc " + urlDetail + " " + ++counter + " of " + urlDetails.size());
			propsPDF.put("url",
					"http://depatisnet.dpma.de/DepatisNet/depatisnet?action=textpdf&docid="
							+ urlDetail);

			
			
			if (cookie != null) {
				
				boolean ret = callPDF(propsPDF, cookie);
				if (!ret) {
					System.out
							.println("Probably cookie isn't valid no more. Try to get fresh cookie.");
					cookie = callMain(propsMain);
					
					callPDF(propsPDF, cookie);

				}

			} else {
				System.out
						.println("Can't find cookie. Probably its not there. Try to get cookie and save value to disk.");
				cookie = callMain(propsMain);
				
				callPDF(propsPDF, cookie);
			}
		} // end while it.hasNext()
		
		if (cookie!= null) {
			if (!cookie.equals(cookieBefore)) {
				//docConfig.replaceItemValue("fieldCookie", cookie); // cookie in ConfigDoc speichern
				// docConfig.save(true, false);
			}
		}

	}

	// find cookie to new value if needed.
	public String callMain(Properties propsMain) throws Exception {
		System.out.println("Calling Main with this properties" + propsMain);

		HttpClientInvoker invoker = HttpClientInvoker
				.getDefaultHttpClientInvoker(propsMain);

		Object res = invoker.doInvoke(new GetMethod());

		//Properties propsCookies = new Properties();
	
		return (String) res;
	}

	public boolean callPDF(Properties propsPDF, String cookie) throws Exception {

		propsPDF.put("globals.requestHeader.Cookie", cookie);
		

		HttpClientInvoker invoker = HttpClientInvoker
				.getDefaultHttpClientInvoker(propsPDF);

		Object res = invoker.doInvoke(new GetMethod());
		if (res instanceof java.lang.Integer) {
			System.out.println("Return Integer is:" + res);
			return false;
		} else if (res instanceof java.io.InputStream) {
			InputStream in = (InputStream) res;
			savePDFToDisk(in, propsPDF, invoker);

		} else {
			System.out.println("Unexpected return"
					+ (res == null ? "null" : res.getClass().getName()));
		}

		return true;
	}

	public void savePDFToDisk(InputStream in, Properties propsPDF,
			HttpClientInvoker invoker) throws Exception {
		String[] urlParts = invoker.getUrl().split("=");
		File fileDest = new File(propsPDF.getProperty("folderDest")
				+ urlParts[urlParts.length - 1] + ".pdf");
		System.out.println("file destination is " + fileDest.getAbsolutePath());
		OutputStream out = new FileOutputStream(fileDest);

		// Transfer bytes from in to out
		byte[] buf = new byte[1024];
		int len;
		while ((len = in.read(buf)) > 0) {
			out.write(buf, 0, len);
		}
		in.close();
		out.close();
		System.out.println("DONE! Saved pdf to " + fileDest.getAbsolutePath());

	}

}
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Silke Wolf

  • Frischling
  • *
  • Beiträge: 16
  • Geschlecht: Weiblich
Hallo Axel,

ich :knuddel: dich jetzt mal ganz fest.

Es hat funktioniert.  JUHUUUUUU.

LG Silke

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz