1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

WINHTTP Proxy Authentification

Dieses Thema im Forum "Support & Discussion" wurde erstellt von Serekay, 1. September 2017.

  1. Serekay

    Serekay New Member

    Registriert seit:
    29. August 2017
    Beiträge:
    17
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Hallo zusammen,

    Code (AutoIt):
    $Proxy = "xxx.xx.x.xxx:xxxx"
    $proxyusername = "admin"
    $proxypassword = "admin"
    $Informationen = _WinHttpOpen("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0", $WINHTTP_ACCESS_TYPE_NAMED_PROXY, $Proxy)
    $Verbindung = _WinHttpConnect($Informationen, "whatismyipaddress.com/proxy-check")


    _WinHttpSetCredentials($Verbindung, $proxy, $WINHTTP_AUTH_SCHEME_BASIC, $proxyusername, $proxypassword)
    $Seite = _WinHttpSimpleSSLRequest($Verbindung, "GET", "", "", "")

    So sieht bisher mein Code aus.

    Ich versuche wie man sieht mit _WinHttpSimpleSSLRequest() eine Seite über einen Proxy mit Passwort zu bekommen.
    ich benutze _WinHttpSimpleSSLRequest weil es eine https domain ist.

    ich hatte das problem mit dem setzten von passwort und user vor jahren schonmal und user sueseskanienchen hatte mir damals dass zum laufen geracht.

    kann mir jemand evtl ein beispiel geben wie man denn eine anfrage einer https seite über einen Proxy mit Passwort machen kann?

    ich hab mich schon dusselig gesucht -.-

    grüße serekay
     
    Zuletzt von einem Moderator bearbeitet: 1. September 2017
  2. SilverHazard

    SilverHazard Moderator Mitarbeiter Moderator

    Registriert seit:
    2. Juli 2017
    Beiträge:
    64
    Zustimmungen:
    48
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Hi,

    verwende bitte in Zukunft Code-Tags:
    [code=Autoit]...[/code]

    Was genau funktioniert dabei nicht?
    Kriegst du eine Fehlermeldung oder zeigt die Webseite nur das falsche an?
    Wird dir im Browser das richtige angezeigt?

    MfG,
    SilverHazard
     
  3. gigagames

    gigagames New Member

    Registriert seit:
    2. Juli 2017
    Beiträge:
    17
    Zustimmungen:
    6
    Punkte für Erfolge:
    3
    Laut der Winhttp.au3 die ich grade gefundne habe, möchte
    _WinHttpSetCredentials
    ein $hRequest, du übergibst eine $hConnect

    mittels
    _WinHttpSetOption
    kannst du Proxys setzen (auch mit Pw etc)


    Edit:
    um an ein hRequest ranzukommen, musst du dir entweder die Simple funktion umschreiben, oder es selber machen also:
    (Kurz aus der Simple Funktion zsm kopiert)
    Code (AutoIt):

    $hRequest = _WinHttpSimpleSendSSLRequest($hConnect, $sType, $sPath, $sReferrer, $sData, $sHeader)
    "SetCredentials"...
    $sOutData = _WinHttpSimpleReadData($hRequest, $iMode)
    _WinHttpCloseHandle($hRequest)
     
     
  4. susesKaninchen

    susesKaninchen New Member

    Registriert seit:
    3. Juli 2017
    Beiträge:
    22
    Zustimmungen:
    13
    Punkte für Erfolge:
    3
    dies hier könnte dir helfen

    Code (AutoIt):
    _SetProxy($ProxyIP, $hSession)
    Func _SetProxy($ProxyIP, $Session)
       Local $tWINHTTP_PROXY_INFO[2] = [DllStructCreate("DWORD  dwAccessType;ptr lpszProxy;ptr lpszProxyBypass;"), DllStructCreate('wchar proxychars[' & StringLen($ProxyIP) + 1 & ']; wchar proxybypasschars[10]')]
       DllStructSetData($tWINHTTP_PROXY_INFO[0], "dwAccessType", $WINHTTP_ACCESS_TYPE_NAMED_PROXY)
       DllStructSetData($tWINHTTP_PROXY_INFO[0], "lpszProxy", DllStructGetPtr($tWINHTTP_PROXY_INFO[1], 'proxychars'))
       DllStructSetData($tWINHTTP_PROXY_INFO[0], "lpszProxyBypass", DllStructGetPtr($tWINHTTP_PROXY_INFO[1], 'proxybypasschars'))
       DllStructSetData($tWINHTTP_PROXY_INFO[1], "proxychars", $ProxyIP)
       DllStructSetData($tWINHTTP_PROXY_INFO[1], "proxybypasschars", "localhost")
       _WinHttpSetOption($Session, $WINHTTP_OPTION_PROXY, $tWINHTTP_PROXY_INFO[0])
    EndFunc   ;==>_SetProxy

    #include <WinHttp.au3>
    ;========================>
    $hInternet = _WinHttpOpen()

    $hConnect = _WinHttpConnect($hInternet, "192.168.178.33")
    $hRequest = _WinHttpOpenRequest($hConnect, "GET", "/LogDaten.dat")
    If _WinHttpSetCredentials($hRequest, $WINHTTP_AUTH_TARGET_SERVER, $WINHTTP_AUTH_SCHEME_BASIC, USERNAME, PASSWORT) = 0 Then
        MsgBox(16, "Fehler", "_WinHttpSetCredentials ist fehlgeschlagen. Errorcode: " & @error)
    EndIf
    _WinHttpSendRequest($hRequest)
    If @error Then MsgBox(16, "Error", ",..")
    _WinHttpReceiveResponse($hRequest)
    $sRead = ""
    Do
        $sRead &= _WinHttpReadData($hRequest)
    until @error

    FIlewrite("result.html", $sRead)
     
     
    Zuletzt bearbeitet: 1. September 2017
  5. Serekay

    Serekay New Member

    Registriert seit:
    29. August 2017
    Beiträge:
    17
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    erstmal vielen dank für die bisherigen Antworten :)

    also mein code sieht jetz wie folgt aus:

    Code (AutoIt):

    #include <WinHTTP.au3>
    #include <array.au3>
    #include <gdiplus.au3>
    #include <file.au3>


    $Proxy = "xxx.xxx.xx.x:xx"
    $proxyusername = "name"
    $proxypassword = "passwort"


    $hSession = _WinHttpOpen("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.19.6) AppleWebKit/537.18.30 (KHTML, like Gecko) Chrome/60.0.3038.15 Safari/537.18.30")
    _SetProxy($Proxy, $hSession)
    $hConnect = _WinHttpConnect($hSession, "wieistmeineip.de")


    $hRequest = _WinHttpOpenRequest($hConnect, "GET", "/")
    If _WinHttpSetCredentials($hRequest, $Proxy, $WINHTTP_AUTH_SCHEME_BASIC, $proxyusername, $proxypassword) = 0 Then
       MsgBox(16, "Fehler", "_WinHttpSetCredentials ist fehlgeschlagen. Errorcode: " & @error)
    EndIf
    _WinHttpSendRequest($hRequest)
    If @error Then MsgBox(16, "Error", ",..")
    _WinHttpReceiveResponse($hRequest)
    $sRead = ""
    Do
        $sRead &= _WinHttpReadData($hRequest)
    until @error

    msgbox(0,"",$sRead)

    Func _SetProxy($ProxyIP, $Session)
       Local $tWINHTTP_PROXY_INFO[2] = [DllStructCreate("DWORD  dwAccessType;ptr lpszProxy;ptr lpszProxyBypass;"), DllStructCreate('wchar proxychars[' & StringLen($ProxyIP) + 1 & ']; wchar proxybypasschars[10]')]
       DllStructSetData($tWINHTTP_PROXY_INFO[0], "dwAccessType", $WINHTTP_ACCESS_TYPE_NAMED_PROXY)
       DllStructSetData($tWINHTTP_PROXY_INFO[0], "lpszProxy", DllStructGetPtr($tWINHTTP_PROXY_INFO[1], 'proxychars'))
       DllStructSetData($tWINHTTP_PROXY_INFO[0], "lpszProxyBypass", DllStructGetPtr($tWINHTTP_PROXY_INFO[1], 'proxybypasschars'))
       DllStructSetData($tWINHTTP_PROXY_INFO[1], "proxychars", $ProxyIP)
       DllStructSetData($tWINHTTP_PROXY_INFO[1], "proxybypasschars", "localhost")
       _WinHttpSetOption($Session, $WINHTTP_OPTION_PROXY, $tWINHTTP_PROXY_INFO[0])
    EndFunc   ;==>_SetProxy
     
    lasse ich _set proxy und _WinHttpSetCredentials weg, bekomme ich die seite und es klappt, nehme ich _setProxy mit rein bekomme ich nicht die seite als inhalt sonder einfach nur 407....wenn ich dann _WinHttpSetCredentials mit dazu gebe, dann bekomme ich den error code 1, also dll call fehler.

    wo hab ich noch den fehler? kommt in der funktion _WinHttpSetCredentials als 2ter parameter die proxy ip rein?

    vielen dank
     
  6. susesKaninchen

    susesKaninchen New Member

    Registriert seit:
    3. Juli 2017
    Beiträge:
    22
    Zustimmungen:
    13
    Punkte für Erfolge:
    3
    nur username udn apsswort zu ändern und den rest so lassen
    Code (AutoIt):
     If _WinHttpSetCredentials($hRequest, $WINHTTP_AUTH_TARGET_SERVER, $WINHTTP_AUTH_SCHEME_BASIC, XXXXXXXXXXXXX, XXXXXXXXXXXXX) = 0 Then
        MsgBox(16, "Fehler", "_WinHttpSetCredentials ist fehlgeschlagen. Errorcode: " & @error)
    EndIf
     
  7. Serekay

    Serekay New Member

    Registriert seit:
    29. August 2017
    Beiträge:
    17
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    dann bekomme ich weiterhin am ende einfach nur 407 als empfangene daten -.-
     
  8. gigagames

    gigagames New Member

    Registriert seit:
    2. Juli 2017
    Beiträge:
    17
    Zustimmungen:
    6
    Punkte für Erfolge:
    3
    Nochmals die frage,
    warum nicht _WinHttpSetOption nutzen ?
    $WINHTTP_OPTION_PROXY_PASSWORD, $WINHTTP_OPTION_PROXY_USERNAME, $WINHTTP_OPTION_PROXY
     
  9. Serekay

    Serekay New Member

    Registriert seit:
    29. August 2017
    Beiträge:
    17
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Weil ich anhand meines codes nicht weiss wie ich das anstelle um zu einem erfolg zu kommen -.-

    Es ist auch nirgends im Internet gescheit dokumentiert geschweige denn findet man praktikable beispiele. Ich stehe leider völlig im dunklen^^
     
  10. gigagames

    gigagames New Member

    Registriert seit:
    2. Juli 2017
    Beiträge:
    17
    Zustimmungen:
    6
    Punkte für Erfolge:
    3
    Ich würde einfach mal so probieren:
    Code (AutoIt):

    Open
    Connect
    _WinHttpSetOption($hConnect, $WINHTTP_OPTION_PROXY, 127.0.01)
    _WinHttpSetOption($hConnect, $WINHTTP_OPTION_PROXY_USERNAME, "abc")
    _WinHttpSetOption($hConnect, $WINHTTP_OPTION_PROXY_PASSWORD, "pw")
     
     
  11. Serekay

    Serekay New Member

    Registriert seit:
    29. August 2017
    Beiträge:
    17
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    leider auch keinen erfolg, ich bekomme weiterhin nur 407 anstatt des html
     
  12. susesKaninchen

    susesKaninchen New Member

    Registriert seit:
    3. Juli 2017
    Beiträge:
    22
    Zustimmungen:
    13
    Punkte für Erfolge:
    3
    Code (AutoIt):
    #include <WinHTTP.au3>
    #include <array.au3>
    #include <gdiplus.au3>
    #include <file.au3>


    $Proxy = "IP:PORT"
    $proxyusername = "XXXXXX"
    $proxypassword = "XXX"


    $hSession = _WinHttpOpen("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.19.6) AppleWebKit/537.18.30 (KHTML, like Gecko) Chrome/60.0.3038.15 Safari/537.18.30")
    _SetProxy($Proxy, $hSession)
    $hConnect = _WinHttpConnect($hSession, "https://www.wieistmeineip.de")


    $hRequest = _WinHttpSimpleSSLRequest($hConnect, "GET", "/", Default, Default, Default, Default, Default, $proxyusername, $proxypassword, Default)
    If @error Then ConsoleWrite(@CRLF & @error & @CRLF)
    ConsoleWrite(@CRLF & $hRequest & @CRLF )


    Func _SetProxy($ProxyIP, $Session)
       Local $tWINHTTP_PROXY_INFO[2] = [DllStructCreate("DWORD  dwAccessType;ptr lpszProxy;ptr lpszProxyBypass;"), DllStructCreate('wchar proxychars[' & StringLen($ProxyIP) + 1 & ']; wchar proxybypasschars[10]')]
       DllStructSetData($tWINHTTP_PROXY_INFO[0], "dwAccessType", $WINHTTP_ACCESS_TYPE_NAMED_PROXY)
       DllStructSetData($tWINHTTP_PROXY_INFO[0], "lpszProxy", DllStructGetPtr($tWINHTTP_PROXY_INFO[1], 'proxychars'))
       DllStructSetData($tWINHTTP_PROXY_INFO[0], "lpszProxyBypass", DllStructGetPtr($tWINHTTP_PROXY_INFO[1], 'proxybypasschars'))
       DllStructSetData($tWINHTTP_PROXY_INFO[1], "proxychars", $ProxyIP)
       DllStructSetData($tWINHTTP_PROXY_INFO[1], "proxybypasschars", "localhost")
       _WinHttpSetOption($Session, $WINHTTP_OPTION_PROXY, $tWINHTTP_PROXY_INFO[0])
    EndFunc   ;==>_SetProxy
    Fertig bekomme alles was ich wll und die richtige ipwird angezeigt
     
    source++ und SilverHazard gefällt das.
  13. Serekay

    Serekay New Member

    Registriert seit:
    29. August 2017
    Beiträge:
    17
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Mega es funktioniert! Auf die Idee den usernamen und passwort bei den Parameter in function _WinHttpSimpleSSLRequest() zu setzen bin ich einfach nicht gekommen,
    steht ja auch nicht in der au3 bei der beschreibung -.-

    Vielen dank für die hilfe!
     
  14. susesKaninchen

    susesKaninchen New Member

    Registriert seit:
    3. Juli 2017
    Beiträge:
    22
    Zustimmungen:
    13
    Punkte für Erfolge:
    3
    Naja um ehrlich zu sein muss man nur in die au3 von winhttp schauen und dort steht alles drin und man kann sehen wie es funktioniert und wenn man dort nach den sachen sucht findet man auch was.
     
  15. Serekay

    Serekay New Member

    Registriert seit:
    29. August 2017
    Beiträge:
    17
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Die Winhttp.au3 verwaltet die cookies in einer session ja automatisch. gibt es denn die möglichkeit an die cookies zu kommen?
     
  16. susesKaninchen

    susesKaninchen New Member

    Registriert seit:
    3. Juli 2017
    Beiträge:
    22
    Zustimmungen:
    13
    Punkte für Erfolge:
    3
    Zum einen kannst du selbst die Cookies auß dem Header anschauen, die gesetzt werden, zum anderen:
    Da gab es mal ein Tutorial wo sich jemand Arbeit gemacht hat und einmal konntest du von Firefox zu http und einmal andersrum die Coocies übergeben ... Leider beim Seitenumbau verschwunden.
    Ich glaube das könnte es sein .. aber keine Ahnung:
    Code (AutoIt):
    ; #FUNCTION# ;===============================================================================
    ; Name...........: _WinHttpQueryHeaders
    ; Description ...: Retrieves header information associated with an HTTP request.
    ; Syntax.........: _WinHttpQueryHeaders($hRequest [, $iInfoLevel = Default [, $sName = Default [, $iIndex = Default ]]])
    ; Parameters ....: $hRequest - Handle returned by _WinHttpOpenRequest().
    ;                  $iInfoLevel - [optional] A combination of attribute and modifier flags. Default is $WINHTTP_QUERY_RAW_HEADERS_CRLF.
    ;                  $sName - [optional] Header name string. Default is $WINHTTP_HEADER_NAME_BY_INDEX.
    ;                  $iIndex - [optional] Index used to enumerate multiple headers with the same name
    ; Return values .: Success - Returns string that contains header.
    ;                          - @extended is set to the index of the next header
    ;                  Failure - Returns empty string and sets @error:
    ;                  |1 - DllCall failed
    ; Author ........: trancexx
    ; Related .......: _WinHttpAddRequestHeaders, _WinHttpOpenRequest
    ; Link ..........: http://msdn.microsoft.com/en-us/library/aa384102.aspx
    ;============================================================================================
    Func _WinHttpQueryHeaders($hRequest, $iInfoLevel = Default, $sName = Default, $iIndex = Default)
        __WinHttpDefault($iInfoLevel, $WINHTTP_QUERY_RAW_HEADERS_CRLF)
        __WinHttpDefault($sName, $WINHTTP_HEADER_NAME_BY_INDEX)
        __WinHttpDefault($iIndex, $WINHTTP_NO_HEADER_INDEX)
        Local $aCall = DllCall($hWINHTTPDLL__WINHTTP, "bool", "WinHttpQueryHeaders", _
                "handle", $hRequest, _
                "dword", $iInfoLevel, _
                "wstr", $sName, _
                "wstr", "", _
                "dword*", 65536, _
                "dword*", $iIndex)
        If @error Or Not $aCall[0] Then Return SetError(1, 0, "")
        Return SetExtended($aCall[6], $aCall[4])
    EndFunc
     
  17. Serekay

    Serekay New Member

    Registriert seit:
    29. August 2017
    Beiträge:
    17
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Also laut der au3 kann man mit der Funktion Winhttppsimplesslrequest auch den header bekommen:
    Code (AutoIt):

    Func _WinHttpSimpleSSLRequest($hConnect, $sType = Default, $sPath = Default, $sReferrer = Default, $sDta = Default, $sHeader = Default, $fGetHeaders = Default, $iMode = Default, $sCredName = Default, $sCredPass = Default, $iIgnoreCertErrors = 0)

        ; Author: ProgAndy
        __WinHttpDefault($sType, "GET")
        __WinHttpDefault($sPath, "")
        __WinHttpDefault($sReferrer, $WINHTTP_NO_REFERER)
        __WinHttpDefault($sDta, $WINHTTP_NO_REQUEST_DATA)
        __WinHttpDefault($sHeader, $WINHTTP_NO_ADDITIONAL_HEADERS)
        __WinHttpDefault($fGetHeaders, False)
        __WinHttpDefault($iMode, Default)
        __WinHttpDefault($sCredName, "")
        __WinHttpDefault($sCredPass, "")
        If $iMode > 2 Or $iMode < 0 Then Return SetError(4, 0, 0)
        Local $hRequest = _WinHttpSimpleSendSSLRequest($hConnect, $sType, $sPath, $sReferrer, $sDta, $sHeader, $iIgnoreCertErrors)
        If @error Then Return SetError(@error, 0, 0)
        __WinHttpSetCredentials($hRequest, $sHeader, $sDta, $sCredName, $sCredPass)
        If $fGetHeaders Then
            Local $aData[3] = [_WinHttpQueryHeaders($hRequest), _WinHttpSimpleReadData($hRequest, $iMode), _WinHttpQueryOption($hRequest, $WINHTTP_OPTION_URL)]
            _WinHttpCloseHandle($hRequest)
            Return $aData
        EndIf
        Local $sOutData = _WinHttpSimpleReadData($hRequest, $iMode)
        _WinHttpCloseHandle($hRequest)
        Return $sOutData

    EndFunc
     
    hab ich nun also ausprobiert und sobald ich den 7ten Parameter $fGetHeaders auf true stelle bekomme einen leeren array ausgegeben.
    Auf default gelassen bekomme ich den quellcode. Wisst ihr was da los ist?!^^

    Und kann man den Timeout für den Empfang auch erhöhen? finde dazu auf anhieb nicht und wenn ein Proxy mal langsamer ist, bekomme ich nichts zurück..

    vielen dank schonmal :)
     
  18. susesKaninchen

    susesKaninchen New Member

    Registriert seit:
    3. Juli 2017
    Beiträge:
    22
    Zustimmungen:
    13
    Punkte für Erfolge:
    3
    Ne header sind nur die Coocies drin die er dir sendet glaube ich, aber das klappt da musst du nur dannd en array abfragen mit $string[0]
     
  19. Serekay

    Serekay New Member

    Registriert seit:
    29. August 2017
    Beiträge:
    17
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Ja hatte einen tippfehler gefunden...manchmal sieht man es einfach nicht -.-
    Also header bekomme ich, sind nur keine cookies vorhanden direkt nach dem login.
     
  20. susesKaninchen

    susesKaninchen New Member

    Registriert seit:
    3. Juli 2017
    Beiträge:
    22
    Zustimmungen:
    13
    Punkte für Erfolge:
    3
    Dann könnten sie beim Seitenaufruf gesetzt werden und beim login nur verknüpft
     

Diese Seite empfehlen

Die Seite wird geladen...