Cookie übertragen

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Facebamm.

    Cookie übertragen

    Hallo zusammen,

    ich bin dabei mich in Google einzuloggen, das ganze schon seit 4 Tagen.
    (Webseite anfordern, Parameter suchen, Email setzen, absenden, feststellen das neue Parameter gesendet werden, wieder suchen, nicht finden, JS auseinander nehmen, mit neuen Parametern senden, Errors bekommen usw.)

    Nach viel arbeit und kein Kopf mehr, nach dem ich kein plan hab wie die Parameter generiert werden, gib ich auf und such nun eine neuen Möglichkeit.
    Die neue Möglichkeit, wäre das ich ein Webbrowser nehme, mich damit fein einlogge und dann die Cookies picke und sie in meinen CookieContainer packe.

    1. Würde das ohne Probleme gehen, so das ich dann Angemeldet bleibe?
    2. Hat jm. eine Alternativ lösung, dazu muss ich sagen, das ich Google schon besucht habe, aber da auf alte dinge gestoßen bin, so 2011-2015 usw., dabei hab ich auch gesehen, das einige API nicht mehr existieren usw.. Also falls jm. was hat, wäre es mega nice.

    Mein Ansatz

    Spoiler anzeigen

    C#-Quellcode

    1. public bool loginGoogleYoutube(string Email,string Password)
    2. {
    3. RequestBuilder Setting = new RequestBuilder();
    4. Setting.Site = "https://accounts.google.com/ServiceLogin";
    5. string Req_Setting = Request(Setting);
    6. #region "Request Body Setting" /*
    7. <input name="Page" type="hidden" value="PasswordSeparationSignIn">
    8. <input type="hidden" name="GALX" value="uYIf0ggBBd4">
    9. <input type="hidden" name="gxf" value="AFoagUUQtKRN2KPnBxCuuPGB_NOo2-f2QA:1490107112879">
    10. <input id="profile-information" name="ProfileInformation" type="hidden" value="">
    11. <input id="session-state" name="SessionState" type="hidden" value="">
    12. <input type="hidden" id="_utf8" name="_utf8" value="☃">
    13. <input type="hidden" name="bgresponse" id="bgresponse" value="js_disabled">
    14. <input type="hidden" id="pstMsg" name="pstMsg" value="0">
    15. <input type="hidden" id="checkConnection" name="checkConnection" value="">
    16. <input type="hidden" id="checkedDomains" name="checkedDomains"
    17. value="youtube"> */
    18. #endregion
    19. string[] ValOfSetting = new string[] {
    20. "Page", "GALX", "gxf",
    21. "ProfileInformation", "SessionState", "_utf8",
    22. "bgresponse", "pstMsg", "checkConnection", "checkedDomains"};
    23. string ValOfSettingPatter = "<input(?:\\s*|.+)?name=\"{0}\"(?:\\s*|.*)value=\"([^\"]*)\"[^>]*>";
    24. var Settings = ValOfSetting.Select(x =>
    25. {
    26. Match m = Regex.Match(Req_Setting, string.Format(ValOfSettingPatter, x));
    27. return new { Name = x, Value = m.Groups[1].Value };
    28. }).ToArray();
    29. RequestBuilder EmailWriteIn = new RequestBuilder();
    30. EmailWriteIn.Origin = "https://accounts.google.com";
    31. EmailWriteIn.Referer = "https://accounts.google.com/ServiceLogin";
    32. //Und ab hier ändern sich die type=hidden Name ="...", Werte, beim absenden.
    33. return false;
    34. }
    35. public class RequestBuilder
    36. {
    37. public List<RequestBuilderParameter> prams = new List<RequestBuilderParameter>();
    38. public enum Methode { POST, GET }
    39. /// <summary>
    40. /// Base: GET
    41. /// </summary>
    42. public Methode methode { get; set; } = Methode.GET;
    43. public string Site { get; set; } = string.Empty;
    44. public string Parameter { get { return string.Join("&", prams.Select(x => string.Concat(x.Name, "=", x.ParameterValue))); } }
    45. public string Origin { get; set; } = string.Empty;
    46. public string Referer { get; set; } = string.Empty;
    47. /// <summary>
    48. /// Base: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
    49. /// </summary>
    50. public string UserAgent { get; set; } = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36";
    51. /// <summary>
    52. /// Base: application/x-www-form-urlencoded
    53. /// </summary>
    54. public string ContentType { get; set; } = "application/x-www-form-urlencoded";
    55. public IWebProxy Proxy { get; set; } = null;
    56. /// <summary>
    57. /// Base: 2000 ms = 2 sec
    58. /// </summary>
    59. public int Timeout { get; set; } = 2000;
    60. /// <summary>
    61. /// Base: true
    62. /// </summary>
    63. public bool AllowAutoRedirect { get; set; } = true;
    64. public void AddParameter(params RequestBuilderParameter[] parameter)
    65. {
    66. prams.AddRange(parameter);
    67. }
    68. public HttpWebRequest getSettings(CookieContainer cont)
    69. {
    70. if (!string.IsNullOrEmpty(Site)) {
    71. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Site);
    72. if(!string.IsNullOrEmpty(Referer))
    73. request.Referer = Referer;
    74. if (!string.IsNullOrEmpty(Referer))
    75. request.Headers.Add("Origin", Origin);
    76. request.Proxy = Proxy;
    77. request.Method = methode.ToString();
    78. request.CookieContainer = cont;
    79. request.AllowAutoRedirect = AllowAutoRedirect;
    80. request.UserAgent = UserAgent;
    81. request.ContentType = ContentType;
    82. request.Timeout = Timeout;
    83. return request;
    84. }
    85. throw new Exception("Pleas Use a Webpage");
    86. }
    87. }
    88. public class RequestBuilderParameter
    89. {
    90. public string Name { set; get; }
    91. public string Value { get; set; }
    92. public bool EscapeUriString;
    93. public string ParameterValue { get { return EscapeUriString ? Uri.EscapeUriString(Value) : Value; } }
    94. public RequestBuilderParameter(string name,string value,bool escapeuristring = true)
    95. {
    96. Name = name;
    97. Value = value;
    98. EscapeUriString = escapeuristring;
    99. }
    100. }

    Ein Request, welche ganz andere Parameter besitzt als ich Quellcode, zb der Youtube:n:n, kein Plan wo er herkommt

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

    Ganz normal eine E-Mail zu senden kommt nicht in Frage? stackoverflow.com/questions/32…mail-in-net-through-gmail

    Was soll denn eigentlich dein Resultat sein/was willst du erreichen?

    Facebamm schrieb:

    ​1. Würde das ohne Probleme gehen, so das ich dann Angemeldet bleibe?

    Ja, du müsstest eventuell gucken, dass der UserAgent gleich ist. Zur Browserautomatisierung eignet sich auch PhantomJS hervorragend, da gibt's auch ne C# Lib zu.
    Mfg
    Vincent

    Ok, um eine Email geht es nicht ;D

    ich werde mich die Tage da mal rein lesen und dann Antworte ich weiter

    Momentan hab ich es so gemacht :D

    C#-Quellcode

    1. //wb = WebBrowser
    2. //container = CookieContainer
    3. ((mshtml.HTMLDocument)wb.Document).cookie.Split(';').Select(x => {
    4. Match m = Regex.Match(x, "([^=])=(.+)");
    5. return new Cookie(m.Groups[1].Value, m.Groups[2].Value);
    6. }).ToList().ForEach(x => container.Add(x));