So, das Gründgerüst steht:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace cyberport
{
class Program
{
static void Main(string[] args)
{
#region
string result;
string parameter, email = "xxx", password = "xxx";
CookieContainer cookieJar = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://www.cyberport.de/");
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0";
request.ContentType = "application/x-www-form-urlencoded";
request.Referer = "https://www.cyberport.de/";
request.CookieContainer = cookieJar;
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Method = "POST";
request.KeepAlive = true;
request.AllowAutoRedirect = true;
//request.Headers.Add("Accept-Language: de,en-US;q=0.7,en;q=0.3");
//request.Headers.Add("Accept-Encoding: gzip, deflate, br");
parameter = "nextscript=https%3A%2F%2Fwww.cyberport.de%2F&__POSTBACK=quickLogin&scriptMode=shop&token=" + getToken() + "&EMAIL="
+ email + "&password=" + password + "&submit.x=23&submit.y=10";
byte[] byteArray = Encoding.ASCII.GetBytes(parameter);
request.ContentLength = byteArray.Length;
//using (Stream stream = request.GetRequestStream())
// stream.Write(byteArray, 0, byteArray.Length);
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
result = new StreamReader(response.GetResponseStream()).ReadToEnd();
//using (StreamReader sr = new StreamReader(response.GetResponseStream()))
// result = sr.ReadToEnd();
File.WriteAllText(@"C:\Users\Admin\Desktop\yyy.txt", result);
Console.WriteLine(result);
Console.WriteLine("d0ne.");
Console.ReadLine();
Console.ReadLine();
#endregion
}
private static string getToken()
{
string html;
using (WebClient client = new WebClient())
html = client.DownloadString("https://www.cyberport.de/");
int position = html.IndexOf("id=\"loginform\"");
html = html.Substring(position, html.Length - position);
position = html.IndexOf("<input type=\"hidden\" name=\"token\" value=\"");
return html.Substring(position + 41, 32);
}
}
}
Müssen alle Infos von Live HTTP Headers mit rein und falls nein, woher weiß ich, welche wirklich nötig sind?
Sobald man sich den Response Stream ausgeben lässt, erhält man einen nicht lesbaren Zeichensatz. Anfangs dachte ich, es wäre ein Encodingfehler, allerdings habe ich dem StreamReader jetzt schon einige Encodings mitgebenen, jedoch vergebens.
Ich denke, dass mein Request noch nicht korrekt ist. Brauche ich den CookieContainer?
Habe die Parameter erst als String übergeben, habe dann aber auf SO irgendwo gelesen, dass diese als byte Array übergeben werden, ist das korrekt so?
Im Quelltext sind mehrere Token vorhanden, wenn ich jedoch den Quelltext im FF anzeigen lasse, mich anschließend im Browser einlogge und dann den Request anschaue, handelt es sich um einen komplett anderes Token. Meine Funktion nimmt jetzt einfach mal den 2. Token, neben der LoginForm, dass erschien mir irgendwie am naheliegendsten.
Bearbeitet von 13asim37, 22 February 2017 - 22:07 Uhr.