Inetread übers Systemkonto -> funktioniert nicht.

  • Hey,

    ich verwende hier einen Webserver der als Service im Systemkonto läuft.
    Dieser kann externe Prozesse starten, darunter eines meiner Skripte, allerdings laufen diese dann eben auch im Systemkonto.

    Im Skript kommt die Funktion Inetread vor und leider wird dann ein error (13) zurückgegeben.
    Der Aufruf stimmt:

    [autoit]


    InetRead('httP://'&$username&':'&$pw&'@'&$IP&':'&$port&"/api/status.html",1)

    [/autoit]


    und wenn man das Skript normal ausführt wird die angeforderte Seite zurückgegeben.

    Nur im Systemkonto klappts nicht :(
    Ist das eine Besonderheit von Inetread? Oder ein Fehler im Ansatz? Gibt es Alternativen?

    Vielen Dank schonmal für die Antworten.


    Gruß nuts

    Einmal editiert, zuletzt von nuts (1. September 2010 um 13:24)

  • Ich vermute mal weil es eben ein Systemkonto ist und kein Benutzerkonto.

    Wenn Du es als Benutzer aufrufst hast Du ja einen User und ein Passwort, wenn es im Systemkontext läuft eben nicht.

    Ich denke da liegt der Fehler.


    LG

    Schnuecks

  • $username und $pw sind Variablen im SKript mit den Daten des Webservers.

    Ein Service, der im Systemkonto läuft kann keine Prozesse in anderen Konten starten (so oder so ähnlich hat man mir das erklärt) und somit muss mein Skript eben auch darin funktionieren.

  • Hm Inetread auf https://autoit.de/www.google.de funtkioniert innerhalb des Systemkontos, nur die Abfrage auf den Webserver nicht :(

    Ich fasse nochmal zusammen:

    InetRead('httP://'&$username&':'&$pw&'@'&$IP&':'&$port&"/api/status.html",1) als Admin funktioniert
    Inetread(http://www.google.de,1) als Admin funktioniert
    Inetread(http://www.google.de,1) im Systemkonto funktioniert

    InetRead('httP://'&$username&':'&$pw&'@'&$IP&':'&$port&"/api/status.html",1) im Systemkonto funktioniert nicht


    Fällt dazu jemand was ein? ?(

    Edit\ Vom Webserver her spricht lt. Entwickler nichts gegen den Aufruf innerhalb des Systemkontos. Verstehe das echt nicht :(

    Einmal editiert, zuletzt von nuts (31. August 2010 um 18:35)

  • Nee muss nicht umbedingt sein.
    Allerdings kann ich mit dem HTTP Kram nicht so viel anfangen und hab mich meistens dann doch drum gedrückt.

    Scheint hier aber wohl unausweichlich, wobei dieses Problem mehr als seltsam ist. ?(

  • Werds mal versuchen.

    Gibts ne einfache Möglichkeit mein Skript im Systemkonto laufen zu lassen?
    Das debuggen über den Webserver geht mir langsam auf die Nerven :(

  • Inetget schafft es leider auch nicht (nur im Systemkonto) ...

    Kann mir vielleicht mal jemand ein Beispiel zu diesem Aufruf mit WinHTTP machen?

    [autoit]

    InetRead('httP://'&$username&':'&$pw&'@'&$IP&':'&$port&"/api/status.html",1)

    [/autoit]


    /api/status.html ist ein GET Request

  • Das Beispiel im UDF Thread macht doch genau das was du willst:klick mich

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Probier mal:

    Spoiler anzeigen
    [autoit]

    #include "WinHttp.au3"

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

    Global $IP = '1.1.1.1'
    Global $Port = 80
    Global $pw = 'a'
    Global $user = 'a'

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

    Opt("TrayIconDebug", 1)

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

    Global $sHeader, $authorization = _Base64Encode($user & ':' & $pw)

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

    Global $hOpen = _WinHttpOpen("Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 GTB7.1")
    Global $hConnect = _WinHttpConnect($hOpen, $IP, $Port)
    Global $hRequest = _WinHttpOpenRequest($hConnect, 'GET', "/api/status.html")

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

    _WinHttpSendRequest($hRequest, 'Authorization: Basic ' & $authorization)
    _WinHttpReceiveResponse($hRequest)

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

    If _WinHttpQueryDataAvailable($hRequest) Then $sHeader = _WinHttpQueryHeaders($hRequest)

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

    Local $data = ''
    Do
    $data &= _WinHttpReadData($hRequest)
    Until @error

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

    _WinHttpCloseHandle($hRequest)
    _WinHttpCloseHandle($hConnect)
    _WinHttpCloseHandle($hOpen)

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

    MsgBox(0, "Header", $sHeader)
    MsgBox(0, "Source Code", $data)

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

    Func _Base64Encode($sData)
    ; keine Ahnung von wem die Funktion is (nicht von mir)
    Local $oXml = ObjCreate("Msxml2.DOMDocument")
    If Not IsObj($oXml) Then
    SetError(1, 1, 0)
    EndIf

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

    Local $oElement = $oXml.createElement("b64")
    If Not IsObj($oElement) Then
    SetError(2, 2, 0)
    EndIf

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

    $oElement.dataType = "bin.base64"
    $oElement.nodeTypedValue = Binary($sData)
    Local $sReturn = $oElement.Text

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

    If StringLen($sReturn) = 0 Then
    SetError(3, 3, 0)
    EndIf

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

    Return $sReturn
    EndFunc

    [/autoit]

    Ich hab keine Ahnung ob das funktioniert. Wenn nicht sniffe mal das Paket mit (am bestem mit dem Firefox Plugin LiveHttpHeaders) und poste das mal hier. (Ohne username und passwort natürlich).