Post Request via WinHTTP.au3 / HTTP.au3

  • Hey,

    ich möchte zu einem Webserver Daten übergeben. Allerdings werden die Daten nur in einem bestimmten Format angenommen und da schon beim Erstellen der Daten jede Menge schief gehen kann wollte ich mich vergewissern ob meine Vorgehnsweise für den Post Request theoretisch richtig ist.

    Zunächst mal die Doku zum Webserver (Recordingservice vom dvbviewer):

    Spoiler anzeigen


    the basic url is:

    Zitat

    http://[user:password@]IP[:port]/api


    a POST request to

    Zitat

    url/cgi-bin/EPGimport


    Nun zum Skript:

    [autoit]


    #include "WinHTTP.au3"
    Global $replace ="stringxy" ; die Daten
    Global $hconncect = _WinHttpConnect($hOpen, "192.168.1.103",8000)
    Global $request = _WinHttpOpenRequest($hconncect, "POST","/api/cgi-bin/EPGimport")
    _WinHttpWriteData($Request, $replace)

    [/autoit]


    Soweit korrekt?

    Gruß nuts

    P.S. Hintergrund: Es funktioniert natürlich nicht :D Könnte aber an vielen Dingen liegen :wacko:

    Post 900 :rock:

  • Wäre es nicht einfacher, wenn du die Daten per FTPEx.au3 überträgst?

    100 Post!!!

    ^^

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Hinter der Übergabe der Daten steht ja noch eine gewissen Interaktion des Servers (die Daten werden in die vorhanden Datenbank aufgenommen).
    Somit muss man sich an den vorgegebenen Weg des Entwicklers halten.

  • So macht man eine Post:

    Spoiler anzeigen
    [autoit]

    #include <WinHTTP.au3>

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

    $username="Greek"
    $pw=FileRead( "hide.txt" )

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

    ; Einloggen
    $post="loginUsername="&$username&"&loginPassword="&$pw&"&url=%2Findex.php&useCookies=1"
    $hw_open = _WinHttpOpen(" Einloggen")
    $hw_connect = _WinHttpConnect($hw_open, "www.irgendeineseite.de")
    $h_openRequest = _WinHttpOpenRequest($hw_connect,"POST", "/index.php?form=UserLogin","HTTP/1.1", "http://www.google.de/")
    _WinHttpSendRequest($h_openRequest, "Content-Type: application/x-www-form-urlencoded"& @CRLF, $post)
    _WinHttpReceiveResponse($h_openRequest)

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

    Local $data=""
    Do
    $data&=_WinHttpReadData($h_openRequest)
    Until @error
    FileWrite ("body.html", $data)

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

    _WinHttpCloseHandle($h_openRequest)
    _WinHttpCloseHandle($hw_connect)
    _WinHttpCloseHandle($hw_open)

    [/autoit]
  • Die Reihenfolge der Befehle ist so:

    [autoit]

    #include "WinHTTP.au3"

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

    $hOpen = _WinHttpOpen()

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

    $hConnect = _WinHttpConnect($hOpen, "...")

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

    $hRequest = _WinHttpOpenRequest($hConnect, "POST", "...")

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

    $PostDaten = "var1=Wert1&var2=Wert2"
    _WinHttpSendRequest($hRequest, "Content-Type: application/x-www-form-urlencoded"&@CRLF, $PostDaten)
    ; oder eventuell, je nach Kodierung der Daten auch _WinHttpSendRequest($hRequest, "Content-Type: multi-part/form-data"&@CRLF, $PostDaten)

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

    _WinHttpReceiveResponse($hRequest)

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

    $header = _WinHttpQueryHeaders($hRequest)
    MsgBox(0, "Header", $header)
    If _WinHttpQueryDataAvailable($hRequest) Then
    Local $data=""
    Do
    $data&=_WinHttpReadData($hRequest)
    Until @error
    MsgBox(0,"Daten", $data)
    EndIf

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

    _WinHttpCloseHandle($hRequest)

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

    _WinHttpCloseHandle($hConnect)

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

    _WinHttpCloseHandle($hOpen)

    [/autoit]

    //Edit: Man, 1 Minute zu langsam