Dienst erstellen => TCP-Funktionen nutzen

  • Hallo Forum,

    ich habe ein Problem, wo ich Hilfe benötige:

    Mein Vorhaben:

    Ich habe einen eigenen Webserver in meinem Intranet, wo ich eine Anmeldeseite haben mit Username und Passwort und Submit-Button. Wenn ich entsprechenden Userename und Passwort eingebe, bekomme ich eine Antwort von meinem PHP-Script in 2 Textfeldern zurück, die ich mit AutoIT weiter verwenden möchte.

    Das klappt auch soweit ganz gut mit den Funktionen aus der Inlcude IE.au3.

    Jetzt brauche ich das ganze Programm als Dienst, dass alle 15 Minuten genau diese Werte abrufen kann und mir vorerst einfach in eine Textdatei schreibt. Wie gesagt, das Standalone-Programm läuft einwandfrei. Ich habe dann mein AutoITScript in ein Beispiel mit der Service.au3 eingebaut. Zum testen habe ich eine MSGBox aingebaut, die jedoch nur einmal angezeigt wird, danach läuft der Dienst zwar noch, macht aber nichts mehr. Natürlich habe ich dem Dienst den Datenaustausch mit dem Desktop erlaubt.

    Funktionieren die _IE-Funktionen überhaupt in einem Dienst? Bin hier irgendwie am verzweifeln.

    Gibt es andere Möglichkeiten, Daten mit einer Authentifizierung an einem Webserver abzuholen. Das Problem: Der Webserver läuft unter Linux, kann hier also leider nix mit AutoIT (Server / Client ) programmieren und dann via TCPSend/Recv arbeiten.

    Arrgghh wer hat Ideen oder kann mir weiterhelfen?

    Danke vorab für Eure Mühen :P

    LG
    LNMaurice

    Einmal editiert, zuletzt von LNMaurice (15. November 2008 um 15:28)

  • Du könntest evtl., wenn ich dich richtig verstanden hab, dein Programm einfach alle 15min vom Taskplaner ausführen lassen.

    Systemsteuerung > Geplante Tasks

    Ja, das wäre auch eine Möglichkeit!

    Funktionieren denn die _IE-Funktionen auch, wenn kein User am Rechner angemeldet ist und der Rechner dann natürlich gesperrt ist?

    Werd ich mal probieren...

    Danke!

    LNMaurice

  • Benutz doch einfach Timerinit und lass alle 15Minuten den _IE starten ;).

    Was meinst Du denn mit Timerinit genauer? In der Hilfe finde ich unter diesem Begriff nichts!

    LNmaurice


  • Möchte noch kurz erwähnen, dass dieses Programm auf einem WinServer lauen muss, wo kein User angemeldet ist und natürlich der Rechner gesperrt ist..

    Grüße
    LNMaurice

  • Du könntest evtl., wenn ich dich richtig verstanden hab, dein Programm einfach alle 15min vom Taskplaner ausführen lassen.

    Systemsteuerung > Geplante Tasks


    So ich habe das mit dem Taskplaner ausprobiert. Sobald keiner angemeldet ist, wird auch der Task nicht gestartet. Somit fällt diese Lösung leider weg und ich bin wieder beim Dienst :wacko:

    Trotzdem Danke!

    LNMaurice

  • Hallo Leute,

    die folgenden Versuche funktionieren nicht:

    - Abholung der Daten mit _IE-Funktionen in einem laufendem Dienst
    - Abholung der Daten mittels WindowsTaskplaner

    Beide Versuche scheitern wohl daran, dass halt kein User angemeldet ist.

    Jetzt muss ich einen anderen Weg gehen und bin über die TCP-Funktionen in AutoIT gestolpert. Müsste doch auch damit gehen, eine Verbindung zu einem WebServer auf Port 80 zu etablieren und dann mit TCPRecv und TCPSend Daten auszutauschen?

    Nur ist dann die Frage, ob ich auch an die Formularfelder komme, um diese auszufüllen bzw. deren Werte abzufragen? Hat hier jemand Erfahrung, Links etc?

    Wäre dankbar für jede Idee...

    LG
    LNMaurice

    • Offizieller Beitrag

    Hallo

    Jup, klar geht das.
    Du musst die Eingabefelder ja garnicht ausfüllen. Du musst dir nur angucken was passiert wenn man auf Submit klickt.
    Entweder es ist eine einfache GET Abfrage, oder es ist eine POST abfrage.
    Falls GET, einfach bei z.B. _InetGetSource sowas hineinfüge
    besipiel bei google:

    [autoit]

    _InetGetSource("http://www.google.de/search?q=DAS_IST_EIN_TEST_STRING")

    [/autoit]


    Bei POST wird das etwas komplizierter. Musst du dir erstmal mit z.B. Live HTTP Headers (Plugin für Firefox) den Header auslesen, und gucken was gepostet wird.
    Dann kannst du meine Funktion verwenden (_InetGetSourcePost). Musst du mal oben rechts auf der Seite die Suche benutzen..

    Hoffe du verstehst was ich meine ;) Bei meine Funktion _InetGetSourcePost habe ich auch mit den TCP/IP befeheln gearbeitet, das kannst du dir ja auch nochmal angucken.

    Mfg Spider

  • das liegt an Windows wen nkeiner mehr angemeldet ist oder der Remote Desktop gesperrt ist verweigert WINDOWS Tastaur und Mauseingaben.
    Eine Möglichkeit wäre eine VNC Session offen lassen und dann das Script laufen lassen.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Versuche doch mal WinHTTP :) ( http://www.autoitscript.com/forum/index.php?showtopic=84133 )
    Beispiel:

    Spoiler anzeigen
    [autoit]

    #include<WinHTTP.au3>
    ; Am Anfang des Skripts
    $hw_open = _WinHttpOpen("WinHTTP Example")

    [/autoit] [autoit][/autoit] [autoit]

    ; Sende Anfrage an Server
    $hw_connect = _WinHttpConnect($hw_open, "www.snee.com")
    $h_openRequest = _WinHttpOpenRequest($hw_connect, "POST", "/xml/crud/posttest.cgi", "HTTP/1.1")

    [/autoit] [autoit][/autoit] [autoit]

    $ExtraHeader = "Content-Type: application/x-www-form-urlencoded" & @CRLF
    $POSTData = "fname=Vorname&lname=Nachname"

    [/autoit] [autoit][/autoit] [autoit]

    ;~ _WinHttpSendRequestBin($h_openRequest, $ExtraHeader, StringToBinary($POSTData)) ; http://www.autoitscript.com/forum/index.ph…ndpost&p=604875
    _WinHttpSendRequest($h_openRequest, $Header, $POSTData)

    [/autoit] [autoit][/autoit] [autoit]

    _WinHttpReceiveResponse($h_openRequest)

    [/autoit] [autoit][/autoit] [autoit]

    ; ENTWEDER
    ;$data = _WinHttpReadHTML($h_openRequest) ; http://www.autoitscript.com/forum/index.ph…ndpost&p=604875
    ; ODER
    $data=""
    While 1
    $chunk = _WinHttpReadData($h_openRequest)
    If @error <> 0 Or $chunk="" Then ExitLoop
    $data &= $chunk
    WEnd
    ; ENDE

    [/autoit] [autoit][/autoit] [autoit]

    _WinHttpCloseHandle($h_openRequest)
    ; Sende Anfrage Ende
    MsgBox(0, 'Ergebnis', $data)

    [/autoit] [autoit][/autoit] [autoit]

    ; Am Ende des Skripts
    _WinHttpCloseHandle($hw_connect)

    [/autoit]