[C#]Mit HttpWebRequest auf Seite einloggen.

06/08/2011 18:55 Lawliet#1
Hallo,
Ich möchte mich gerne über ein Kleines Programm mit 2 Eingabefeldern und einem Login Button auf einer Seite einloggen.
Mein Ziel ist es, nach dem Login die Cookies auslesen zu können, da dort für mich wichtige Infos gespeichert werden ;)
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void id01_TextChanged(object sender, EventArgs e)
        {
            //string id01 = textBox1.Text;

        }

        private void pw01_TextChanged(object sender, EventArgs e)
        {
            //string pw01 = textBox2.Text;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string url = "http://passport.nexoneu.com/Login.aspx?nexoneuTheme=NexonEU";
            webBrowser1.DocumentText = sendRequest(url);
            
        }
        public string sendRequest(string url)
        {
            //LOGIN 
            ASCIIEncoding encoding = new ASCIIEncoding();
            byte[] loginData = encoding.GetBytes("do=login" + "&txtLogin0=" + id01.Text + "&txtPassword0=" + pw01.Text);
            CookieContainer cookieContainer = new CookieContainer();

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + "login.php?do=login");///
            request.CookieContainer = cookieContainer;
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";

            Stream stream = request.GetRequestStream();
            stream.Write(loginData, 0, loginData.Length);
            stream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            MessageBox.Show(url);
            url = ("http://en.nexoneu.com/NXEU.aspx?PART=/Main");
            CookieContainer cookieContainer2 = new CookieContainer();
            HttpWebRequest request2 = (HttpWebRequest)WebRequest.Create(url);
            MessageBox.Show(url);
Was ist falsch?
Ich habe so etwas noch nie gemacht und praktisch alles auf msdn nachgeschlagen. Können also einige logische Fehler drinn sein.
06/08/2011 19:21 Ronox#2
Hi,
also wenn du einen POST absenden willst, dann noch die HTML seite und die Cookies Speichern willst hast du in deiner sendRequest Funktion ein paar kleinigkeiten Vergessen, im Endeffekt müste das so aussehen:

Code:
         private string sendRequest(string host, string path, string post)
         { 
                HttpWebRequest request1 = (HttpWebRequest)HttpWebRequest.Create("https://" + host + path);
                request1.Method = "POST";
                request1.Host = host;
                request1.ContentType = "application/x-www-form-urlencoded";

                request1.Referer = referer;
                request1.CookieContainer = new CookieContainer();
                request1.CookieContainer = cookiecontain;
                request1.CookieContainer.Add(cookiecoll);
                ASCIIEncoding encoding = new ASCIIEncoding();
                byte[] loginDataBytes = encoding.GetBytes(post);
                request1.ContentLength = loginDataBytes.Length;
 
                Stream stream = request1.GetRequestStream();
                stream.Write(loginDataBytes, 0, loginDataBytes.Length);
                stream.Close();

                HttpWebResponse response = (HttpWebResponse)request1.GetResponse();
                StreamReader sr = new StreamReader(response.GetResponseStream());
                string html = sr.ReadToEnd();
                sr.Close();
                cookiecontain.Add(response.Cookies);
                cookiecoll.Add(response.Cookies);
                response.Close();
                return html;
         }
Ich Verwende immer eine Cookiecollection und einen cookiecontainer, warum frag mich was leichteres ist aus der Angewohnheit entstanden, daher benötigst du halt noch so was in deinem Quellcode:
Code:
 CookieContainer cookiecontain = new CookieContainer();
 CookieCollection cookiecoll = new CookieCollection();
12/07/2017 02:10 Onkelmat#3
Also ich hab den Ogame bot geschrieben.

Du solltest vor dem Login im Prinzip zu erst die Login-Seite mit einem request aufrufen und bei dem Request schon einen CookieContainer anlegen.

CookieContainer cookieContainer = new CookieContainer();
httpWebRequest.CookieContainer = cookieContainer;
globals.CC = cookieContainer;

danach musst du den cookieContainer immer bei jedem request mit übergeben. Ich speicher den Cookiecontainer in einer statischen Variable ab die ich dann immer wieder nutzen kann.