WinHttp Cookies

  • Hallo AutoIT ! :)

    ich habe da ein Problem mit der WinHttp UDF, denn ich brauche eine Möglichkeit, wie ich Cookies setzen kann.

    Ich habe gegoogelt, verschiedene möglichkeiten erfolglos ausprobiert..
    In der UDF gibt es auch keine Funktion dafür.

    Wie komme ich nun weiter? :(

    MfG

  • Du wirst wohl nicht der 1. sein der dieses Problem hat also Tante Google gezielt fragen, alle Möglichkeiten durchtesten oder die URL benennen und deine bisherigen erfolglosen Tests zeigen damit andere wissen was sie nicht mehr testen müssen.

    mfg autoBert

  • Bitteschön

    Aufgerufen:

    [autoit]

    _WinHTTP_Session_Cookie_Add($hSession, 'www.google.de', 'PHPSESSID=123456')

    [/autoit]

    Funktion:

    Spoiler anzeigen
    [autoit]

    Func _WinHTTP_Session_Cookie_Add(ByRef $hSession, $sHost, $sCookie)
    Local $iPort, $hConnect, $hRequest, $sTempName
    Local $hTCP_Server, $hTCP_Client
    Local $sTCP_Read, $sTCP_Request, $sTCP_Response

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

    TCPStartup()
    Do
    $iPort = Random(30000, 65000, 1)
    $hTCP_Server = TCPListen('127.0.0.1', $iPort)
    Until $hTCP_Server <> -1
    TCPCloseSocket($hTCP_Server)
    TCPShutdown()

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

    Do
    $sTempName &= Chr(Random(65, 90, 1))
    Until Not FileExists(@TempDir & '\' & $sTempName & '.au3')

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

    FileWrite(@TempDir & '\' & $sTempName & '.au3', _
    "Global $sHost = $CmdLine[1], $sCookie = $CmdLine[2], $iPort = $CmdLine[3]" & @CRLF & _
    "Global $hTCP_Server, $hTCP_Client, $sTCP_Read, $sTCP_Request" & @CRLF & _
    "TCPStartup()" & @CRLF & _
    "$hTCP_Server = TCPListen('127.0.0.1', $iPort)" & @CRLF & _
    "Do" & @CRLF & _
    "$hTCP_Client = TCPAccept($hTCP_Server)" & @CRLF & _
    "Sleep(10)" & @CRLF & _
    "Until $hTCP_Client <> -1" & @CRLF & _
    "Do" & @CRLF & _
    "$sTCP_Read = TCPRecv($hTCP_Client, 1024)" & @CRLF & _
    "If @error Then ExitLoop" & @CRLF & _
    "$sTCP_Request &= $sTCP_Read" & @CRLF & _
    "Until StringInStr($sTCP_Request, @CRLF & @CRLF)" & @CRLF & _
    "If StringRight($sCookie, 1) <> ';' Then $sCookie &= ';'" & @CRLF & _
    "TCPSend($hTCP_Client, 'HTTP/1.1 200 OK' & @CRLF & _" & @CRLF & _
    "'Host: ' & $sHost & @CRLF & _" & @CRLF & _
    "'Set-Cookie: ' & $sCookie & _" & @CRLF & _
    "' expires=Thu, 31-Dec-2099 00:00:01 GMT; path=/; domain=' & $sHost & @CRLF & @CRLF)" & @CRLF & _
    "Sleep(1000)" & @CRLF & _
    "TCPCloseSocket($hTCP_Client)" & @CRLF & _
    "TCPCloseSocket($hTCP_Server)" & @CRLF)

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

    Run('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & @TempDir & '\' & $sTempName & '.au3' & '" "' & $sHost & '" "' & $sCookie & '" "' & $iPort & '" ')

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

    _WinHTTP_SetProxy($hSession, '127.0.0.1', $iPort)
    $hConnect = _WinHttpConnect($hSession, $sHost)
    _WinHttpSimpleRequest($hConnect, 'GET', '/')
    _WinHttpCloseHandle($hConnect)
    _WinHTTP_SetProxy($hSession)

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

    Do
    FileDelete(@TempDir & '\' & $sTempName & '.au3')
    Until Not FileExists(@TempDir & '\' & $sTempName & '.au3')
    EndFunc ;==>_WinHTTP_Session_Cookie_Add

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

    Func _WinHTTP_SetProxy($hSession, $sIP = Default, $sPort = Default)
    Local $tWINHTTP_PROXY_INFO[2]
    Local $iAccesstype = $WINHTTP_ACCESS_TYPE_NAMED_PROXY, _
    $sProxyChars = $sIP & ':' & $sPort

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

    $tWINHTTP_PROXY_INFO[0] = DllStructCreate("DWORD dwAccessType;ptr lpszProxy;ptr lpszProxyBypass;")
    $tWINHTTP_PROXY_INFO[1] = DllStructCreate('wchar proxychars[' & StringLen($sProxyChars) + 1 & ']; wchar proxybypasschars[10]')

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

    If IsKeyword($sIP) Then
    $sProxyChars = ''
    $iAccesstype = $WINHTTP_ACCESS_TYPE_DEFAULT_PROXY
    EndIf

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

    DllStructSetData($tWINHTTP_PROXY_INFO[0], "dwAccessType", $iAccesstype)
    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", $sProxyChars)
    DllStructSetData($tWINHTTP_PROXY_INFO[1], "proxybypasschars", "localhost")

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

    _WinHttpSetOption($hSession, $WINHTTP_OPTION_PROXY, $tWINHTTP_PROXY_INFO[0])
    EndFunc ;==>_WinHTTP_SetProxy

    [/autoit]

    Edit:
    Und um einen Proxy in WinHttp einzuschleußen, kann folgende Funktion genutzt werden:

    [autoit]

    _SetProxy("xxx.xxx.xxx.xxx:yyyy", $Session)

    [/autoit][autoit][/autoit][autoit][/autoit]
    Spoiler anzeigen
    [autoit]

    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

    [/autoit]

    2 Mal editiert, zuletzt von Texos (9. April 2013 um 16:34)