Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: rar am 12.12.05 - 13:30:25

Titel: URL aufrufen ohne den Browser zu öffnen
Beitrag von: rar am 12.12.05 - 13:30:25
Hallo Leute,
ist es irgendwie möglich in script oder @ eine Url abzuschicken ohne, dass der Browser aufgeht? So wie (@)UrlOpen nur halt ohne Browser...?
lG
-daniel
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: diali am 12.12.05 - 13:37:56
über die Win-API geht es.
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: m3 am 12.12.05 - 13:54:55
wget aufrufen
http://www.gnu.org/software/wget/index.html#downloading
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: rar am 12.12.05 - 14:10:45
Danke für die Tipps.
Ich denke ich werde mich mal in der API Programmierung versuchen. Vielleicht gehts ja..... Ist sicher weniger Aufwand als die zuständigen Herren zu überzeugen, dass wget überall installiert wird....
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: diali am 12.12.05 - 14:15:29
in bem folgenden Beispiel wird die Seite von www.ATNotes.de in eine Datei geschrieben. Wenn ich deine Anforderung richtig verstanden habe, musst du den Buffer nicht mehr in eine Datei schreiben.

Code
Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (Byval sAgent As String, Byval _
lAccessType As Long, Byval sProxyName As String, Byval sProxyBypass As String, Byval lFlags As Long) As Long

Declare Function InternetCloseHandle Lib "wininet" (Byval hInet As Long) As Integer

Declare Function InternetReadFile Lib "wininet" (Byval hFile As Long, Byval sBuffer As String, Byval _
lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer

Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (Byval hInternetSession As Long, _
Byval lpszUrl As String, Byval lpszHeaders As String, Byval dwHeadersLength As Long, Byval dwFlags As Long, _
Byval dwContext As Long) As Long


Const INTERNET_OPEN_TYPE_DIRECT = 1
Const INTERNET_OPEN_TYPE_PROXY = 3
Const INTERNET_FLAG_RELOAD = &H80000000

Const UserAgent = "Wininet Test"



Sub Click(Source As Button)
	Dim ws As New NotesUIWorkSpace
	Dim uidoc As NotesUIDocument
	Dim doc As NotesDocument
	Set uidoc = ws.CurrentDocument
	
	Dim l&, Buffer$, hOpen&, hFile&, Result&
	
	l = 50000
	Buffer = Space(l)
	url = "http://www.atnotes.de"
'	hOpen = InternetOpen(UserAgent, INTERNET_OPEN_TYPE_DIRECT, 0&, 0&, 0)   ' ohne Proxy
'	hOpen = InternetOpen(UserAgent, INTERNET_OPEN_TYPE_PROXY, 0&, 0&, 0)   ' mit Proxy
	hOpen = InternetOpen(UserAgent, 0, 0&, 0&, 0)  ' wie in Windows eingestellt
	hFile = InternetOpenUrl(hOpen,url, 0&, 0&, INTERNET_FLAG_RELOAD, 0&)
	
	Call InternetReadFile(hFile, Buffer, l, Result&)
	Call InternetCloseHandle(hFile)
	Call InternetCloseHandle(hOpen)
	
	Buffer = Left$(Buffer, Result)
	Call uidoc.FieldSetText("Body", Buffer)   ' QuellCode ins Feld schreiben
	Open "d:\ATNotes\_dokument.htm" For Output As #1 
	Print #1, Buffer ' Quellcode in Datei schreiben
	Close #1
End Sub
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: m3 am 12.12.05 - 14:20:16
In einem Server-Agent läuft das aber nicht.! ;)
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: diali am 12.12.05 - 14:23:34
ne ne Win-API kommt mir auf keinen Server.  ;D
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: rar am 12.12.05 - 14:54:06
WOW Dirk.....
Ich kann zwar noch nicht mit sicherheit sagen, ob es funktioniert, schaut aber recht gut aus.
Ich glaube das InternetOpen, InternetOpenUrl und InternetCloseHandle ist genau das was ich suche.
 :D Vielen, vielen Dank. :D

Der Aufruf erfolgt übrigens von einem Client

-daniel
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: flaite am 12.12.05 - 15:47:02
Danke   :)
Gibts eigentlich eine Win-Api Möglichkeit, die auch auf dem Server läuft (nur zur Vervollständigung)?
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: diali am 12.12.05 - 15:58:13
habs nicht probiert, aber ohne NotesUIWorkSpace und NotesUIDocument sollte es funktionieren.

Code
Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (Byval sAgent As String, Byval _
lAccessType As Long, Byval sProxyName As String, Byval sProxyBypass As String, Byval lFlags As Long) As Long

Declare Function InternetCloseHandle Lib "wininet" (Byval hInet As Long) As Integer

Declare Function InternetReadFile Lib "wininet" (Byval hFile As Long, Byval sBuffer As String, Byval _
lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer

Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (Byval hInternetSession As Long, _
Byval lpszUrl As String, Byval lpszHeaders As String, Byval dwHeadersLength As Long, Byval dwFlags As Long, _
Byval dwContext As Long) As Long


Const INTERNET_OPEN_TYPE_DIRECT = 1
Const INTERNET_OPEN_TYPE_PROXY = 3
Const INTERNET_FLAG_RELOAD = &H80000000

Const UserAgent = "Wininet Test"



Sub Click(Source As Button)
Dim l&, Buffer$, hOpen&, hFile&, Result&

l = 50000
Buffer = Space(l)
url = "http://www.atnotes.de"
' hOpen = InternetOpen(UserAgent, INTERNET_OPEN_TYPE_DIRECT, 0&, 0&, 0)   ' ohne Proxy
' hOpen = InternetOpen(UserAgent, INTERNET_OPEN_TYPE_PROXY, 0&, 0&, 0)   ' mit Proxy
hOpen = InternetOpen(UserAgent, 0, 0&, 0&, 0)  ' wie in Windows eingestellt
hFile = InternetOpenUrl(hOpen,url, 0&, 0&, INTERNET_FLAG_RELOAD, 0&)

Call InternetReadFile(hFile, Buffer, l, Result&)
Call InternetCloseHandle(hFile)
Call InternetCloseHandle(hOpen)

Buffer = Left$(Buffer, Result)
Open "d:\ATNotes\_dokument.htm" For Output As #1
Print #1, Buffer ' Quellcode in Datei schreiben
Close #1
End Sub
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: m3 am 12.12.05 - 16:25:47
... wenn man dafür einen Windows-Server aufsetzten will.  :-X

und weg ....  ;D
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: diali am 13.12.05 - 07:03:34
 ;) .. habe ich doch geschrieben Win-API kommt mir auf keinen Server  ;D ;D
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: eknori am 13.12.05 - 07:20:18
gib Java eine Chance ( no API needed )

http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256DC80053681B
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: rar am 13.12.05 - 08:58:39
Hi Ulrich,
ich habe leider noch kein Wort Java programmiert. Kannst du mir bitte sagen wie ich die Funktion abändern muss, um nur die Url abzuschicken?
Reicht es, wenn er so ausschaut? Muss ich das GET eventuell durch ein POST ersetzen?

Code
public String getHTML(String urlToRead) {
   URL url; // The URL to read
   HttpURLConnection conn; // The actual connection to the web page
   try {
      url = new URL(urlToRead);
      conn = (HttpURLConnection) url.openConnection();
      conn.setRequestMethod("GET");
         }
   }

Danke derweil und lg
-daniel
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: flaite am 13.12.05 - 13:17:46
Was heisst nur die URL abzuschicken.
Du willst den Request ausführen, aber nix zurückerhalten?
Und es heisst Methode, nicht Funktion.
 
Vermutlich reicht das:
Code
try {
         url = new URL(urlToRead);
         conn = (HttpURLConnection) url.openConnection();
          conn.connect(); 
         if (conn.getResponseCode()  == 200 ) System.out.println("alles ok"); System.out.println("nix gut. Response code=" + conn.getResponseCode());  
           conn.disconnect(); 
      } catch (Exception e) {
         e.printStackTrace();
      }
(see http://www.koders.com/?s=HttpUrlConnection&_%3Abtn=Search&_%3Ala=Java&_%3Ali=*
HTTPAgentNamingServiceImplTest.java
)

versuchs einfach mal. Hab mir das nicht genauer angeschaut.

Ansonsten:
1.
Code
 
  rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
         while ((line = rd.readLine()) != null) {
            result += line;
         }

Ist das schlechter Java Code
(
- warum Streams und Strings mixen?

)

2. ist das unrobuster Java Code
Code
 rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
         while ((line = rd.readLine()) != null) {
            result += line;
         }
         rd.close();
      } catch (Exception e) {
         e.printStackTrace();
      }
Falls in der while() irgendeine Exception auftritt (z.B. Server geht beim Lesen runter) bleiben Sockets auf dem Client offen. Vermutlich sind das genau die Leute, die sich so gerne über Microsoft echauffieren.

3. Ist das inperformanter Java-Code.
Für line besser Stringbuffer verwenden. 

3. ist es vermutlich sauberer am Ende ein conn.disconnect() zu machen.

4. Benutzt das LS2J und da wurden - ausser von Ralf - memory leak Probleme gemeldet

5. funktioniert das nicht hinter einer Firewall

und 6. ist das zumindest mit Notes 6 viel einfacher zu lösen, indem man HttpClient aus dem Jakarta-Commons Projekt verwendet.

Gruß Axel 
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: rar am 13.12.05 - 16:33:52
Was heisst nur die URL abzuschicken.
Es soll so sein wie wenn ich den Browser öffne, eine Url eingebe, auf Enter drücke und dann den Browser wieder schließe. 

Und es heisst Methode, nicht Funktion.
Sorry wusste ich nicht. Java ist absolutes Neuland für mich.

Du willst den Request ausführen, aber nix zurückerhalten?
Genau.
Ich möchte in eine DB einbauen, dass man privare Telefonate führen kann. Wenn man das vom Telefon aus machen möchte, muss man erst seinen Code eingeben. Das Telefon schickt dann eine Url ab. Dadurch merkt sich der Server die nächsten paar Minuten, dass das nächste Telefonat privat zu verrechnen ist. Deswegen, möchte ich aus Notes heraus erst die Url absetzten, und dann die Nummer wählen. Ohne dass sich ein leeres Browserfenster öffnet.

Ich probiere es einmal mit deinem ersten Code. Leider ist der Mensch, der nachschauen kann ob es geklappt (Telefonat wird privat verrechnet) hat  zur Zeit nicht da. Deswegen kann ich erst in den nächsten Tagen sagen ob es passt.
Wenn es soweit ist, hört ihr sofort von mir.

Danke euch für die Mühen :D
-daniel
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: flaite am 13.12.05 - 16:53:10
Und es heisst Methode, nicht Funktion.
Sorry wusste ich nicht. Java ist absolutes Neuland für mich.
Ich mein das nicht böse oder ärgerlich. Ich hab nur beschlossen bei solchen grundsätzlichen Sachen spiessig zu sein. Gibt ziemlich viele Leute, die auf solche fundamental falsche Sprache aggressiv reagieren. Und ich kanns verstehen.

Habs selbst nicht getestet. Frag weiter, wenns nicht klappt.

Gruß Axel
Titel: Re: URL aufrufen ohne den Browser zu öffnen
Beitrag von: rar am 13.12.05 - 17:09:19
...Frag weiter, wenns nicht klappt.
Mach ich. Danke.  :)