HTTP(S) Post

  • Mit Sprengers Post gibt es schonmal keinen Error. Aber muss immer eine Rückgabe erfolgen, wenn alle Daten falsch sind ebenfalls. Aber leider gibt das Beispiel absolut nichts zurück.

    [autoit]

    #include <WinHTTP.au3>

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

    $hSession = _WinHttpOpen()
    $hConnect = _WinHttpConnect($hSession, "https://api.domainshare.tk/availability_check", $INTERNET_DEFAULT_HTTPS_PORT)

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

    $hRequest = _WinHTTPOpenRequest($hConnect, "POST", "", Default, Default, Default, BitOR($WINHTTP_FLAG_SECURE, $WINHTTP_FLAG_ESCAPE_DISABLE))

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

    $username = "*@*.com"
    $password = "*"
    $domain = "*.tk"

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

    $data = "email=" & $username & "&password=" & $password & "&domainname=" & $domain
    $sHeader = "Content-Type: application/x-www-form-urlencoded"

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

    _WinHttpSendRequest($hRequest, $sHeader, $data)
    _WinHttpReceiveResponse($hRequest)

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

    $sdata = _WinHttpReadData($hRequest)

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

    ConsoleWrite($sdata & @CRLF)

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

    _WinHttpCloseHandle($hRequest)
    _WinHttpCloseHandle($hConnect)
    _WinHttpCloseHandle($hSession)

    [/autoit]
  • Die URL musst du in drei Teile trennen: https:// entfernen, das wird durch den HTTPS-Port abgedeckt und das Secure-Flag beim OpenRequest abgedeckt. Anschließend musst du die Domain bei WinHttpOpen angeben. Der restliche Pfad gehört nach OpenRequest. Die Werte der POST-Felder solltest du übrigens durch __WinHttpURLEncode schicken.

  • Hm. Leider kann ich nicht viel aus deinem Post rauslesen andy.

    Das https:// entfernen verstehe ich aber noch, aber wie soll ich denn bei Open ne URL angeben, geschweigenden bei RequestOpen nen Pfad ?(


    [autoit]

    #include <WinHTTP.au3>

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

    $hSession = _WinHttpOpen(); wie soll heir eine Domain rein?
    $hConnect = _WinHttpConnect($hSession, "api.domainshare.tk", $INTERNET_DEFAULT_HTTPS_PORT)

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

    $hRequest = _WinHTTPOpenRequest($hConnect, "POST", "", Default, Default, Default, BitOR($WINHTTP_FLAG_SECURE, $WINHTTP_FLAG_ESCAPE_DISABLE)); wo hier den Pfad angeben?

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

    $username = "*@*.com"
    $password = "*"
    $domain = "*.tk"

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

    $data = "email=" & $username & "&password=" & $password & "&domainname=" & $domain
    $sHeader = "Content-Type: application/x-www-form-urlencoded"

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

    _WinHttpSendRequest($hRequest, $sHeader, $data)
    _WinHttpReceiveResponse($hRequest)

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

    $sdata = _WinHttpReadData($hRequest)

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

    ConsoleWrite($sdata & @CRLF)

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

    _WinHttpCloseHandle($hRequest)
    _WinHttpCloseHandle($hConnect)
    _WinHttpCloseHandle($hSession)

    [/autoit]
  • Deswegen schaut man sich Beispiele und/oder die Beschreibungen von Funktionen in der UDF an.
    Der zweite Parameter von OpenRequest ist nämlich: "$sObjectName - [optional] The name of the target resource of the specified HTTP verb."
    Also der Pfad zum Zielobjekt. Wenn man sich mit dem HTTP Protokoll auskennt ist auch ersichtlich was man hier angeben muss.
    Die entsprechenden Teile der URL die progandy beschrieben hat bekommst du, indem du die vollständige URL zum Ziel mit _WinHTTPSplitURL splittest.
    Die domain gibst du dann bei Connect an und den restlichen Pfad hinter der Domain bei OpenRequest als Pfad zum Zielobjekt.
    Und damit der Server keine Zeichen bekommt die nicht in einen URL encoded String gehören, musst du alle variablen Eingaben die solche Zeichen enthalten können per __WinHttpURLEncode encodieren. Aber das hat progandy ja schon alles geschrieben.
    Ich formulier hier nur seinen Post ein wenig aus, was verstehst du denn an dem was er geschrieben hat nicht?