Youtube API - Login Beispiel ?

    • [ offen ]

      Youtube API - Login Beispiel ?

      Hallo Leute,

      und zwar suche ich nach einer Möglichkeit sich mit der Youtube API in Autoit bei Youtube einzuloggen. Bisher habe ich nur etwas von so Dingen wie AuthSub usw. gelesen, habe aber noch nicht verstanden wie man das in Autoit dann am besten umsetzt.
      Hat jemand von euch vllt. schon ein funktionierendes Login Beispiel mit Hilfe der Youtube API ?
      Viele Grüße
      Ja, mit den IE Funktionen usw. komme ich ja bestens klar.
      Aber ich suche halt eine Login Funktion für Youtube, welches über die richtige Youtube Developer API geht, also per TCP, ohne den IE dabei zu nutzen, sodass man einiges an Zeitersparnis raus holen kann. :)

      Ich verstehe nur nicht ganz wie der Login in Autoit über diese Doku umzusetzen ist:
      code.google.com/intl/de-DE/api…protocol_clientlogin.html

      Bzw. wie verfährt man dann mit diesem Authentication Token weiter, um z.B. nen Kommentar zu schreiben oder so ?
      Viele Grüße
      Hol dir mal diese UDF: autoitscript.com/forum/topic/29631-http-udfs/

      Zum einloggen musst du dann, wie auch bei google direkt beschrieben, an die URL "https://www.google.com/accounts/ClientLogin" einen Post mti dem Inhalt "Email=<username>&Passwd=<password> &service=youtube&source=<source>" senden. Dann bekommst ein "authentication token" zurück mit dem dann weiter machst.
      @chip: Danke, ich werde es mal probieren und hier berichten. :)

      Ist allerdings noch die Frage ob man dieses Loginverfahren noch verwenden soll, weil oben ja steht das man lieber AuthSub z.B. verwenden sollte. Allerdings verstehe ich bei dem AuthSub nicht wozu ich den "next" Parameter brauche, weil mit Autoit macht man ja Clientprogramme und da brauche ich keine Weiterleitung auf irgendwas. :/

      code.google.com/intl/de-DE/api…protocol_clientlogin.html
      Viele Grüße
      Also bei dem ClientLogin funktioniert das irgendwie nicht wie erhofft. Da kommt immer eine 0 zurück. :/

      AutoIt-Quellcode

      1. Local $h_session = _WinHttpOpen("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0")
      2. Local $h_connect = _WinHttpConnect($h_session, "https://www.google.com/")
      3. Local $sHTML = _WinHttpSimpleRequest($h_connect, "GET", "/")
      4. Local $sReferer = "https://www.google.com/"
      5. Local $sPost = "Email=myYoutubeUserName&Passwd=myYoutubePassword&service=youtube&source=Test"
      6. $sHTML = _WinHttpSimpleRequest($h_connect, "POST", "/accounts/ClientLogin", $sReferer, $sPost)
      7. Sleep(500)
      8. FileWrite("test.html", $sHTML)
      9. _WinHttpCloseHandle($h_connect)
      10. _WinHttpCloseHandle($h_session)
      Viele Grüße

      Kelturio schrieb:

      Also bei dem ClientLogin funktioniert das irgendwie nicht wie erhofft. Da kommt immer eine 0 zurück. :/

      AutoIt-Quellcode

      1. Local $h_session = _WinHttpOpen("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0")
      2. Local $h_connect = _WinHttpConnect($h_session, "https://www.google.com/")
      3. Local $sHTML = _WinHttpSimpleRequest($h_connect, "GET", "/")
      4. Local $sReferer = "https://www.google.com/"
      5. Local $sPost = "Email=myYoutubeUserName&Passwd=myYoutubePassword&service=youtube&source=Test"
      6. $sHTML = _WinHttpSimpleRequest($h_connect, "POST", "/accounts/ClientLogin", $sReferer, $sPost)
      7. Sleep(500)
      8. FileWrite("test.html", $sHTML)
      9. _WinHttpCloseHandle($h_connect)
      10. _WinHttpCloseHandle($h_session)
      Ich vermute mal das du einen falschen Host bei _WinHTTPConnect angegeben hast.

      Edit: Und wegen an dem https:// merkt man das es eine SSL geschütze Seite ist vermute ich mal. Daher muss du _WinHTTPSimpleSSLRequest benutzen anstatt _WinHTTPSimpleRequest

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „blacky94“ ()

      ClientLogin
      Spoiler anzeigen

      AutoIt-Quellcode

      1. #region - Timestamp
      2. ;2011-11-18 18:25:54
      3. #endregion - Timestamp
      4. $sUername = "ich@googlemail.com"
      5. $sPassword = "meinpasswort"
      6. Local Static $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
      7. $oHTTP.Open("POST", "https://www.google.com/accounts/ClientLogin", False)
      8. $oHTTP.SetRequestHeader("User-Agent", "autoit")
      9. $oHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
      10. $oHTTP.Send("Email=" & _URIEncode($sUername) & _
      11. "&Passwd=" & _URIEncode($sPassword) & _
      12. "&service=youtube" & _
      13. "&source=abcdefg")
      14. ConsoleWrite($oHTTP.ResponseText & @CRLF)
      15. Func _URIEncode($sData)
      16. ; Prog@ndy
      17. Local $aData = StringSplit(BinaryToString(StringToBinary($sData, 4), 1), "")
      18. Local $nChar
      19. $sData = ""
      20. For $i = 1 To $aData[0]
      21. $nChar = Asc($aData[$i])
      22. Switch $nChar
      23. Case 45, 46, 48 - 57, 65 To 90, 95, 97 To 122, 126
      24. $sData &= $aData[$i]
      25. Case 32
      26. $sData &= "+"
      27. Case Else
      28. $sData &= "%" & Hex($nChar, 2)
      29. EndSwitch
      30. Next
      31. Return $sData
      32. EndFunc ;==>_URIEncode
      MfG i2c
      BBM-ID 7593FD26


      Join us: irc.afterworkchat.net Channel: #autoit

      Als Gott sah, dass er die Menscheit nicht mit Seuche, Pest und Sintflut bestrafen konnte, schickte er mich!


      [SciTE/Notepad++] Send To Pastebin/Get From Pastebin
      [SciTE/Notepad++] Regexp Tester
      Hi,

      hab es mal gemacht ( Anleitung von google: code.google.com/intl/de-DE/api…protocol_clientlogin.html )

      Spoiler anzeigen

      AutoIt-Quellcode

      1. #include <WinHTTP.au3>
      2. $post = "Email=<deinbenutzername>&Passwd=<deinpasswort>&service=youtube&source=test"
      3. $hw_open = _WinHttpOpen("Google Client")
      4. $hw_connect = _WinHttpConnect($hw_open, "www.google.com",$INTERNET_DEFAULT_HTTPS_PORT)
      5. $h_openRequest = _WinHttpOpenRequest($hw_connect,"POST", "/accounts/ClientLogin","HTTP/1.1", _
      6. $WINHTTP_NO_REFERER, $WINHTTP_DEFAULT_ACCEPT_TYPES, $WINHTTP_FLAG_SECURE)
      7. _WinHttpSendRequest($h_openRequest, "Content-Type: application/x-www-form-urlencoded" & @CRLF, $post)
      8. _WinHttpReceiveResponse($h_openRequest)
      9. $header = _WinHttpQueryHeaders($h_openRequest)
      10. MsgBox(0, "Header", $header)
      11. If _WinHttpQueryDataAvailable($h_openRequest) Then
      12. Local $data=""
      13. Do
      14. $data&=_WinHttpReadData($h_openRequest)
      15. Until @error<>0
      16. MsgBox(0, "Body", $data)
      17. EndIf
      18. _WinHttpCloseHandle($h_openRequest)
      19. _WinHttpCloseHandle($hw_connect)
      20. _WinHttpCloseHandle($hw_open)


      <deinbenutzername> und <deinpasswort> musst du noch ersetzen.

      Wenn es geklappt hat bekommst du so etwas zurück:

      Spoiler anzeigen
      SID=DQAAALQAAAA6wx7byZp-s4BizDqS1OaT21j9dmY6wMjexpQdNC3
      LSID=DQAAALUAAAARH_PvRXoaz23Dv_UmOSUz2_0vh-4XbUedCN9XTZ
      Auth=DQAAALUAAAARH_PvRXoaz23Dv_UmOSUz2_jxJVCGjoulKlhWbU


      ( Nur viel länger )

      Steht ja auch alles in der Anleitung.

      Gruß Greek
      Hallo i2c und Greek,

      erst einmal möchte ich mich bei euch beiden ganz herzlich bedanken. :)
      Ich habe es mittlerweile so nebenbei auch gelöst, zumindest so ähnlich. Der Login scheint ganz gut zu funktionieren und den Auth-Key bekomme ich so auch.
      Dann habe ich noch versucht ein Video zu liken, als Test, ob ich nach dem Login richtig mit der Youtube API arbeiten kann.
      Das Komische ist: Der Like Request scheint auch zu funktionieren, da ich den erfolgreichen 201 HTTP Request erhalte und da steht auch richtigerweise das User x erfolgreich das Video geliket hat, aber im Video bzw. auf Youtube an sich ist dann nichts zu sehen. Komisch. :/

      Spoiler anzeigen

      AutoIt-Quellcode

      1. Local $sDeveloperKey = "developer key"
      2. Local $sMyEmail = "meineemail"
      3. Local $sMyPwd = "meinPwd"
      4. Local $sVideoID = "VIDEO_ID"
      5. Local $h_session = _WinHttpOpen("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0")
      6. Local $h_connect = _WinHttpConnect($h_session, "www.google.com")
      7. Local $sReferer = "www.google.com"
      8. Local $sPost = "Email=" & $sMyEmail & "&Passwd=" & $sMyPwd & "&service=youtube&source=Test"
      9. Local $sHTML = _WinHttpSimpleSSLRequest($h_connect, "POST", "/accounts/ClientLogin", $sReferer, $sPost)
      10. Sleep(500)
      11. Local $iAuthPos = StringInStr($sHTML, "Auth=")
      12. Local $sAuthorizationKey = StringMid($sHTML, $iAuthPos + 5, StringLen($sHTML) - $iAuthPos)
      13. ; Make a request
      14. $h_connect = _WinHttpConnect($h_session, "gdata.youtube.com")
      15. Local $hRequest = _WinHttpOpenRequest($h_connect, "POST", "/feeds/api/videos/" & $sVideoID & "/ratings", Default, Default, "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", $WINHTTP_FLAG_SECURE)
      16. _WinHttpAddRequestHeaders($hRequest, "Content-Type: application/atom+xml")
      17. _WinHttpAddRequestHeaders($hRequest, "Authorization: GoogleLogin auth=" & $sAuthorizationKey)
      18. _WinHttpAddRequestHeaders($hRequest, "GData-Version: 2")
      19. _WinHttpAddRequestHeaders($hRequest, "X-GData-Key: key=" $sDeveloperKey)
      20. Local $sPostData = '<?xml version="1.0" encoding="UTF-8"?>' & _
      21. '<entry xmlns="http://www.w3.org/2005/Atom" xmlns:yt="http://gdata.youtube.com/schemas/2007">' & _
      22. '<yt:rating value="like"/>' & _
      23. '</entry>'
      24. _WinHttpSendRequest($hRequest, -1, $sPostData)
      25. _WinHttpReceiveResponse($hRequest)
      26. ; Check if there is a response
      27. Local $sHeader, $sReturned
      28. If _WinHttpQueryDataAvailable($hRequest) Then
      29. $sHeader = _WinHttpQueryHeaders($hRequest)
      30. MsgBox(64, "Header", $sHeader)
      31. Do
      32. $sReturned &= _WinHttpReadData($hRequest)
      33. Until @error
      34. ; Print returned
      35. FileWrite("test.html", $sReturned)
      36. Else
      37. ConsoleWriteError("!No data available." & @CRLF)
      38. MsgBox(48, "Failure", "No data available.")
      39. EndIf
      40. ;FileWrite("test.html", $sHTML)
      41. _WinHttpCloseHandle($h_connect)
      42. _WinHttpCloseHandle($h_session)
      Viele Grüße
      OAuth ist nicht ausschliesslich für Web Aplikationen gedacht. >>read more<<

      Hier registrierst du deine Anwendung. In Schritt 2 wählst du einfach "installed app". - code.google.com/apis/console#access
      MfG i2c
      BBM-ID 7593FD26


      Join us: irc.afterworkchat.net Channel: #autoit

      Als Gott sah, dass er die Menscheit nicht mit Seuche, Pest und Sintflut bestrafen konnte, schickte er mich!


      [SciTE/Notepad++] Send To Pastebin/Get From Pastebin
      [SciTE/Notepad++] Regexp Tester
      Also ich verstehe echt nicht für was ich den "scope" Parameter brauche und was ich da hinein schreiben soll ? Kann mir da jemand helfen ? :/

      code.google.com/intl/de-DE/api…s/OAuth2InstalledApp.html

      Edit:
      Also ich habe das mit dem oAuth 2.0 jetzt mal so umgesetzt, dass ich auf die Loginseite komme.
      So wie ich das aus dem oberen Link heraus lese, muss ich mich zuerst mit einem Request auf die Loginseite begeben, dann muss ich nen Request schicken um die Userdaten eintragen zu lassen und zu bestätigen, dann muss ich mir den Authorization Code raus picken, der z.B. im Bild bei "Forming the URL" angezeigt wird und erst mit diesem Authorization Code kann ich mir dann im Austausch einen Access Token geben lassen mit Hilfe dessen und meiner Client ID etc. ich dann später die eigentlichen Anfragen an die Youtube API stellen kann ?

      Also besteht der Loginprozess so gesehen aus 6 Schritten, wobei die ersten 5 Schritte eher zum oAuth Login / Authentifizierung da sind:
      - Anfrage an oAuth 2.0 senden
      - Einloggen mit Hilfe der Userdaten (Mail und Passwort)
      - Zugriff gewähren für die Installed App
      - Authorization Code entnehmen
      - Access Token im Austausch gegen Authorization Code anfragen
      - Api Aufrufe wie Youtube Funktionen usw. ?

      Habe ich das soweit alles richtig verstanden ?
      Viele Grüße

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kelturio“ ()

      Spoiler anzeigen

      AutoIt-Quellcode

      1. #Region - Timestamp
      2. ;2011-11-20 13:22:32
      3. #EndRegion - Timestamp
      4. $sClientID = ""
      5. $sSecret = ""
      6. $sRedirectURI = ""
      7. $sScope = "http://gdata.youtube.com"
      8. ShellExecute("https://accounts.google.com/o/oauth2/auth" & _
      9. "?response_type=code" & _
      10. "&client_id=" & _URIEncode($sClientID) & _
      11. "&redirect_uri=" & _URIEncode($sRedirectURI) & _
      12. "&scope=" & _URIEncode($sScope))
      13. $sAuthCode = InputBox("","")
      14. Local Static $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
      15. $oHTTP.Open("POST", "https://accounts.google.com/o/oauth2/token", False)
      16. $oHTTP.SetRequestHeader("User-Agent", "autoit")
      17. $oHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
      18. $oHTTP.Send("code=" & $sAuthCode & _
      19. "&client_id=" & $sClientID & _
      20. "&client_secret=" & $sSecret & _
      21. "&redirect_uri=" & $sRedirectURI & _
      22. "&grant_type=authorization_code")
      23. ConsoleWrite($oHTTP.ResponseText & @CRLF)
      24. Func _URIEncode($sData)
      25. ; Prog@ndy
      26. Local $aData = StringSplit(BinaryToString(StringToBinary($sData, 4), 1), "")
      27. Local $nChar
      28. $sData = ""
      29. For $i = 1 To $aData[0]
      30. $nChar = Asc($aData[$i])
      31. Switch $nChar
      32. Case 45, 46, 48 - 57, 65 To 90, 95, 97 To 122, 126
      33. $sData &= $aData[$i]
      34. Case 32
      35. $sData &= "+"
      36. Case Else
      37. $sData &= "%" & Hex($nChar, 2)
      38. EndSwitch
      39. Next
      40. Return $sData
      41. EndFunc ;==>_URIEncode
      MfG i2c
      BBM-ID 7593FD26


      Join us: irc.afterworkchat.net Channel: #autoit

      Als Gott sah, dass er die Menscheit nicht mit Seuche, Pest und Sintflut bestrafen konnte, schickte er mich!


      [SciTE/Notepad++] Send To Pastebin/Get From Pastebin
      [SciTE/Notepad++] Regexp Tester
      @i2c: Vielen Dank, das funktioniert schon mal einwandfrei. Ich werde das eben mal auf meine WinHTTP Klasse umbauen. :)

      Gibt es eigentlich auch eine Doku über das WinHTTP welches du benutzt ? Du scheinst ja direkt von Windows was zu verwenden, wie ich das sehe. Gibt es bei dem einen besonderen Vorteil warum du dies nutzt ?

      Edit:
      Wie ist das eigentlich wenn das ein User ausführt, der noch nicht eingeloggt ist ?
      Beispielsweise habe ich meine Account Daten in meinem Skript mit hinterlegt. Muss ich mich dann vorher über diesen ServiceAuthLogin einloggen oder wie muss ich da vorgehen ?
      Viele Grüße

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kelturio“ ()

      msdn.microsoft.com/en-us/libra…op/aa384106(v=vs.85).aspx
      Weniger Code dafür geringerer Funktionsumfang. Für diesen Zweck aber vollkommen ausreichend.

      Wenn ein User nicht eingeloggt ist, wird er im Browser eine Anmeldeseite von Google zu Gesicht bekommen. Er meldet sich an und bekommt dann seinen AuthCode.
      MfG i2c
      BBM-ID 7593FD26


      Join us: irc.afterworkchat.net Channel: #autoit

      Als Gott sah, dass er die Menscheit nicht mit Seuche, Pest und Sintflut bestrafen konnte, schickte er mich!


      [SciTE/Notepad++] Send To Pastebin/Get From Pastebin
      [SciTE/Notepad++] Regexp Tester
      Vielen Dank für die Funktionslibrary. :)

      Ja, das der User dann den Anmeldebildschirm zu sehen bekommt, sehe ich. Aber ich will die Youtube API ja nutzen, um alles im Hintergrund laufen zu lassen. Demnach hinterlege ich meine Logindaten mit im Skript und möchte dann den Anmeldeprozess auch gerne über WinHTTP ansteuern. Nur leider finde ich dazu nicht mehr als das oAuth Verfahren und wenn ich den Request des manuellen Logins nachbaue, so funktioniert das auch nicht wirklich. :/
      Viele Grüße
      Die Login Daten müssen von Hand eingegeben werden. Darum wirst du afaik nicht herumkommen. Nachdem der User sich authentifiziert hat und du Token, Refresh Token etc. bei google abgeholt hast, kann der Rest problemlos "im Hintergrund" laufen.

      edit: Du musst die Login Seite natürlich nicht unbedingt im Standardbrowser öffnen. Kannst sie auch in dein GUI einbetten.
      MfG i2c
      BBM-ID 7593FD26


      Join us: irc.afterworkchat.net Channel: #autoit

      Als Gott sah, dass er die Menscheit nicht mit Seuche, Pest und Sintflut bestrafen konnte, schickte er mich!


      [SciTE/Notepad++] Send To Pastebin/Get From Pastebin
      [SciTE/Notepad++] Regexp Tester
      @i2c: Aber wenn ich die Loginseite in meine GUI einbette mit z.B. einem Login Feld und einem PW Feld, wo der User seine Daten eingeben kann, dann muss ich ja auch irgendwie den Loginprozess in WinHTTP übernehmen können, oder nicht ?
      Weil ich hätte halt wirklich gerne ein Programm, welches komplett im Hintergrund arbeitet, ohne jeglichen Browser etc. etc.
      Und theoretisch geht das ja auch alles über die API, z.B. Dinge auslesen usw. Nur an dem Login scheitert es irgendwie.
      Viele Grüße
      Also ich habe den Login soeben noch einmal ausprobiert und er funktioniert soweit ganz gut. Aber leider nur bis zur Hälfte. :(
      Wenn man die Requests nach dem POST-Request auskommentiert, so sieht man das der Login gut funktioniert, wenn man die generierte test.html aufruft. Nur die weiteren Requests müssen irgendwie noch funktionabel gemacht werden, bei denen ich aber verzweifel. :/

      Spoiler anzeigen

      AutoIt-Quellcode

      1. #include <Array.au3>
      2. #include <WinHTTP.au3>
      3. Local $sClientID = ""
      4. Local $sSecret = ""
      5. Local $sRedirectURI = "urn:ietf:wg:oauth:2.0:oob"
      6. Local $sScope = "http://gdata.youtube.com"
      7. Local $sMail = ""
      8. Local $sPW = ""
      9. Local $h_session = _WinHttpOpen("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0")
      10. Local $h_connect = _WinHttpConnect($h_session, "accounts.google.com")
      11. Local $sHTML, $sPost, $sReferer
      12. $sHTML = _WinHttpSimpleSSLRequest($h_connect, "GET", "/ServiceLogin?hl=de")
      13. Local $arrDsh = StringRegExp($sHTML, "(?s)<input.*?id=""dsh"".*?value=""(.*?)"".*?>", 3)
      14. Local $sDsh = $arrDsh[0]
      15. Local $arrGALX = StringRegExp($sHTML, "(?s)<input.*?name=""GALX"".*?value=""(.*?)"".*?>", 3)
      16. Local $sGALX = $arrGALX[0]
      17. $sReferer = "https://accounts.google.com/ServiceLogin?hl=de"
      18. $sPost = "dsh=" & $sDsh & "&GALX=" & $sGALX & "&pstMsg=1&dnConn=https%3A%2F%2Faccounts.youtube.com&timeStmp=&secTok=&Email="&_URIEncode($sMail)&"&Passwd="&_URIEncode($sPW)&"&signIn=Anmelden&PersistentCookie=yes&rmShown=1"
      19. $sHTML = _WinHttpSimpleSSLRequest($h_connect, "POST", "/ServiceLoginAuth", $sReferer, $sPost)
      20. Sleep(500)
      21. $sHTML = _WinHttpSimpleSSLRequest($h_connect, "GET", "/CheckCookie?hl=de&chtml=LoginDoneHtml&dnConn=https%3A%2F%2Faccounts.youtube.com&pstMsg=1")
      22. Local $arrSidt = StringRegExp($sHTML, "sidt=(.*?)\\x26", 3)
      23. Local $sSidt1 = $arrSidt[0]
      24. Local $sSidt2 = $arrSidt[1]
      25. Sleep(500)
      26. $sHTML = _WinHttpSimpleSSLRequest($h_connect, "GET", "/accounts/SetSID?ssdc=1&sidt=" & $sSidt1 & "&pmpo=https%3A%2F%2Faccounts.google.com")
      27. Sleep(500)
      28. $sHTML = _WinHttpSimpleSSLRequest($h_connect, "GET", "/accounts/SetSID?ssdc=1&sidt=" & $sSidt2 & "&pmpo=https%3A%2F%2Faccounts.google.com")
      29. Sleep(500)
      30. $h_connect = _WinHttpConnect($h_session, "www.google.de")
      31. $sHTML = _WinHttpSimpleRequest($h_connect, "GET", "/")
      32. Sleep(500)
      33. ;ConsoleWrite(_URIEncode("https://accounts.google.com/o/oauth2/auth") & "?scope=" & _URIEncode($sScope) & "&redirect_uri=" & _URIEncode($sRedirectURI) & "&response_type=code&client_id=" & _URIEncode($sClientID) & "&EMail=" & _URIEncode($sMail) & "&Passwd=" & _URIEncode($sPW))
      34. ;$sPost = "scope=" & _URIEncode($sScope) & "&redirect_uri=" & _URIEncode($sRedirectURI) & "&response_type=code&client_id=" & _URIEncode($sClientID)
      35. ;$sHTML = _WinHttpSimpleSSLRequest($h_connect, "POST", "/o/oauth2/auth", $sReferer, $sPost)
      36. ;Sleep(500)
      37. FileWrite("test.html", $sHTML)
      38. _WinHttpCloseHandle($h_connect)
      39. _WinHttpCloseHandle($h_session)
      40. Func _URIEncode($sData)
      41. ; Prog@ndy
      42. Local $aData = StringSplit(BinaryToString(StringToBinary($sData, 4), 1), "")
      43. Local $nChar
      44. $sData = ""
      45. For $i = 1 To $aData[0]
      46. $nChar = Asc($aData[$i])
      47. Switch $nChar
      48. Case 45, 46, 48 - 57, 65 To 90, 95, 97 To 122, 126
      49. $sData &= $aData[$i]
      50. Case 32
      51. $sData &= "+"
      52. Case Else
      53. $sData &= "%" & Hex($nChar, 2)
      54. EndSwitch
      55. Next
      56. Return $sData
      57. EndFunc ;==>_URIEncode
      Viele Grüße
    autoit.de Webutation