WinHTTP Proxy mit Accountsdaten funktioniert bei HTTPS nicht

  • Hallo,
    undzwar habe ich ein Problem mit WinHTTP. Ich habe mein Programm bereichts mit _WinHttpSimpleRequest und _WinHttpSimpleSSLRequest gecodet. Doch jetzt benötigt mein Proxy Zugangsdaten und somit geht das damit nichtmehr. Ich habe es hinbekommen alle Seiten die über HTTP laufen aufzurüfen, aber bei HTTPS sagt er mir Access denied. Kann mir da vielleicht jemand helfen, ich stehe irgendwie auf dem Schlauch :(

    Spoiler anzeigen
    [autoit]


    ;funktioniert
    $hConnect = _WinHttpConnect($hInternet, "autoit.de")
    Set_Proxy("ip:port")
    _WinHttpSimpleRequest2($hConnect, "GET")

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

    ;funktioniert nicht
    $hConnect = _WinHttpConnect($hInternet, "google.de")
    Set_Proxy("ip:port")
    _WinHttpSimpleSSLRequest2($hConnect, "GET")

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

    Func _WinHttpSimpleRequest2($hConnect, $sType = Default, $sPath = Default, $sReferrer = Default, $sData = Default, $sHeader = Default, $fGetHeaders = Default, $iMode = Default)
    _WinHttpSetOption($hConnect, $WINHTTP_OPTION_PROXY_USERNAME, "user")
    _WinHttpSetOption($hConnect, $WINHTTP_OPTION_PROXY_PASSWORD, "pw")
    $source = ""
    $hRequest = _WinHttpOpenRequest($hConnect, $sType, $sPath, Default, $sReferrer)
    If $hRequest Then
    ; Set password here
    _WinHttpSetCredentials($hRequest, $WINHTTP_AUTH_TARGET_PROXY, $WINHTTP_AUTH_SCHEME_BASIC, "user", "pw")
    $sHeader = "Content-Type: application/x-www-form-urlencoded" & @CRLF

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

    If _WinHttpSendRequest($hRequest, $sHeader, $sData) Then
    _WinHttpReceiveResponse($hRequest)
    $source = _WinHttpSimpleReadData($hRequest)
    EndIf
    _WinHttpCloseHandle($hRequest)
    EndIf
    Return $source
    EndFunc

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

    Func _WinHttpSimpleSSLRequest2($hConnect, $sType = Default, $sPath = Default, $sReferrer = Default, $sData = Default, $sHeader = Default, $fGetHeaders = Default, $iMode = Default)
    $source = ""
    _WinHttpSetOption($hConnect, $WINHTTP_OPTION_PROXY_USERNAME, "user")
    _WinHttpSetOption($hConnect, $WINHTTP_OPTION_PROXY_PASSWORD, "pw")

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

    $hRequest = _WinHttpOpenRequest($hConnect, $sType, $sPath, Default, $sReferrer, Default, BitOR($WINHTTP_FLAG_SECURE, $WINHTTP_FLAG_ESCAPE_DISABLE))
    If $hRequest Then
    ; Set password here
    _WinHttpSetCredentials($hRequest, $WINHTTP_AUTH_TARGET_PROXY, $WINHTTP_AUTH_SCHEME_BASIC, "user", "pw")
    $sHeader = "Content-Type: application/x-www-form-urlencoded" & @CRLF

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

    If _WinHttpSendRequest($hRequest, $sHeader, $sData) Then
    _WinHttpReceiveResponse($hRequest)
    $source = _WinHttpSimpleReadData($hRequest)
    EndIf
    _WinHttpCloseHandle($hRequest)
    EndIf

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

    Return $source
    EndFunc

    [/autoit]
  • Hast du bei _WinHttpConnect den Port 443 für HTTPS angegeben? Und ich gebe den Proxy bei _WinHttpOpen mit an.

  • Danke für deine Hilfe. Habe ich auch schon probiert, aber es funktioniert nicht, da ein leerer Source zurückgegeben wird. Den Proxy füge ich immer nach den Open ein und den Port 443 rufe ich mit den OpenRequest auf.

    [autoit]


    Func Set_Proxy($pr)
    $tProxyInfo = _WinHttpProxyInfoCreate($WINHTTP_ACCESS_TYPE_NAMED_PROXY, $pr, "localhost")
    _WinHttpSetOption($hConnect, $WINHTTP_OPTION_PROXY_USERNAME, "user")
    _WinHttpSetOption($hConnect, $WINHTTP_OPTION_PROXY_PASSWORD, "pw")
    _WinHttpSetOption($hInternet, $WINHTTP_OPTION_PROXY, $tProxyInfo[0])
    EndFunc ;==>Set_Proxy

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

    $hRequest = _WinHttpOpenRequest($hConnect, $sType, $sPath, Default, $sReferrer, Default, BitOR($WINHTTP_FLAG_SECURE, $WINHTTP_FLAG_ESCAPE_DISABLE))

    [/autoit]
  • selbst wenn ich das jetzt verändern/optimieren würde, dann wäre das Problem trotzdem noch da und darum geht es eigentlich. Wenn es geht kann man es allemal noch ändern

  • hab ich im englisch sprachigen forum gefunden vlt. hilft das

    Spoiler anzeigen
    [autoit]

    #include<WinHTTP.au3>
    Global Const $tagWINHTTP_PROXY_INFO = "DWORD dwAccessType;ptr lpszProxy;ptr lpszProxyBypass;"

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

    Func _WinHttpProxyInfoCreate($dwAccessType, $sProxy, $sProxyBypass)
    Local $tWINHTTP_PROXY_INFO[2] = [DllStructCreate($tagWINHTTP_PROXY_INFO), DllStructCreate('wchar proxychars[' & StringLen($sProxy)+1 & ']; wchar proxybypasschars[' & StringLen($sProxyBypass)+1 & ']')]
    DllStructSetData($tWINHTTP_PROXY_INFO[0], "dwAccessType", $dwAccessType)
    If StringLen($sProxy) Then DllStructSetData($tWINHTTP_PROXY_INFO[0], "lpszProxy", DllStructGetPtr($tWINHTTP_PROXY_INFO[1], 'proxychars'))
    If StringLen($sProxyByPass) Then DllStructSetData($tWINHTTP_PROXY_INFO[0], "lpszProxyBypass", DllStructGetPtr($tWINHTTP_PROXY_INFO[1], 'proxybypasschars'))
    DllStructSetData($tWINHTTP_PROXY_INFO[1], "proxychars", $sProxy)
    DllStructSetData($tWINHTTP_PROXY_INFO[1], "proxybypasschars", $sProxyBypass)
    Return $tWINHTTP_PROXY_INFO
    EndFunc

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

    $hInternet = _WinHttpOpen()

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

    $hConnect = _WinHttpConnect($hInternet, "api.hostip.info")
    $standard = _WinHttpSimpleRequest($hConnect, "GET", "/get_html.php")
    _WinHttpCloseHandle($hConnect)

    [/autoit]