|
You last visited: Today at 06:31
Advertisement
Webautomatisierung mit WebRequests - Login
Discussion on Webautomatisierung mit WebRequests - Login within the Coding Tutorials forum part of the General Coding category.
08/11/2014, 12:21
|
#1
|
elite*gold: 155
Join Date: Aug 2009
Posts: 628
Received Thanks: 153
|
Webautomatisierung mit WebRequests - Login
In diesem Tutorial möchte ich euch ein wenig die Webautomatisierung mit WebRequests näher bringen.
Ich sehe sehr oft, dass viele sich mit WebBrowser Controls rumärgern, um eine Webseite zu automatisieren, obwohl überhaupt keine grafische Umsetzung der Webseite benötigt wird.
Daher werde ich in diesem Video den Loginprozess bei OGame grob analysieren und hinterher in C# automatisieren.
Über ein kleines Feedback würde ich mich freuen, vorallem da dies mein erstes Videotutorial ist.
Ich werde in Zukunft auch noch mehrere Tutorials veröffentlichen, die dann auch etwas besser gemacht sind  Dieses Tutorial hab ich gestern relativ schnell aufgenommen und ist daher nicht ganz so tiefgreifend wie es sein könnte.
Falls ihr noch weitere Themenideen habt, so würde ich mich auch über Themenvorschläge freuen
(Der Ton ist leider nicht ideal, da ich teilweise nicht direkt am Mikro war)
|
|
|
01/29/2015, 22:09
|
#2
|
elite*gold: 0
Join Date: Dec 2008
Posts: 11
Received Thanks: 1
|
Hallo!
Vielen Dank für dieses Tutorial!
Hat vlt jemand weitere Tutorials in diese Richtung gesehen?
|
|
|
02/04/2015, 15:39
|
#3
|
elite*gold: 0
Join Date: Dec 2008
Posts: 11
Received Thanks: 1
|
Hallo ,
wie kann man den jetzt diesen Button "anklicken"?
Das Problem ist ja,dass der Tocken sich immer ändert?!

(Hmm Bild wird nicht angezeigt)
Mein govnoCode:
PHP Code:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Web; namespace oGameBot { class Program { static void Main(string[] args) { var cookieContainer=new CookieContainer(); const string username = "юзер", password = "пассворд"; const string userAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 " + "(KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36"; // Startseite aufrufen HttpWebRequest req = WebRequest.CreateHttp("http://de.ogame.gameforge.com"); req.Method = "GET"; req.Host = "de.ogame.gameforge.com"; req.UserAgent = userAgent; req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; req.Headers.Add("Accept-Language", "de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,ru;q=0.2"); req.Headers.Add("Accept-Encoding", "gzip, deflate, sdch"); req.CookieContainer = cookieContainer; using (var resp = (HttpWebResponse)req.GetResponse()) { } // Login req = WebRequest.CreateHttp("http://de.ogame.gameforge.com/main/login"); req.Method = "POST"; req.Host = "de.ogame.gameforge.com"; req.UserAgent = userAgent; req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; req.Headers.Add("Accept-Language", "de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,ru;q=0.2"); req.Headers.Add("Accept-Encoding", "gzip, deflate, sdch"); req.CookieContainer = cookieContainer; req.ContentType = "application/x-www-form-urlencoded"; var postParams = Encoding.UTF8.GetBytes("kid=&uni=s131-de.ogame.gameforge.com&login=" + HttpUtility.UrlEncode(username) + "&pass=" + HttpUtility.UrlEncode(password)); req.ContentLength = postParams.Length; string startPage, serverHost; using (var reqStream = req.GetRequestStream()) { reqStream.Write(postParams, 0, postParams.Length); using (var resp = (HttpWebResponse)req.GetResponse()) { startPage = resp.ResponseUri.ToString(); serverHost = Regex.Match(startPage, @"\/\/(.+com)").Groups[1].Value; } } req = WebRequest.CreateHttp(startPage); req.Method = "GET"; req.Host = serverHost; req.UserAgent = userAgent; req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; req.Headers.Add("Accept-Language", "de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,ru;q=0.2"); req.Headers.Add("Accept-Encoding", "gzip, deflate, sdch"); req.CookieContainer = cookieContainer; req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; var content=""; using (var resp = (HttpWebResponse) req.GetResponse()) { using (var reader = new StreamReader(resp.GetResponseStream())) { content = reader.ReadToEnd(); } } Console.WriteLine(content); var resorsPage= startPage.Replace("overview", "resources"); // [url=http://s131-de.ogame.gameforge.com/game/index.php?page=overview&PHPSESSID=666df0fbcba06e687437588e891ccfdaa7d36df2]OGame Startseite[/url] req = WebRequest.CreateHttp(resorsPage); req.Method = "GET"; req.Host = serverHost; req.UserAgent = userAgent; req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; req.Headers.Add("Accept-Language", "de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,ru;q=0.2"); req.Headers.Add("Accept-Encoding", "gzip, deflate, sdch"); req.CookieContainer = cookieContainer; req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; using (var resp = (HttpWebResponse)req.GetResponse()) { using (var reader = new StreamReader(resp.GetResponseStream())) { content = reader.ReadToEnd(); } } // [url=http://s131-de.ogame.gameforge.com/game/index.php?page=resources&ajax=1&type=1]OGame Startseite[/url] resorsPage = resorsPage.Insert(resorsPage.IndexOf("PHPSESSID"), "ajax=1&type=1"); req = WebRequest.CreateHttp(resorsPage); req.Method = "GET"; req.Host = serverHost; req.UserAgent = userAgent; req.Accept = "*/*"; req.Headers.Add("Accept-Language", "de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,ru;q=0.2"); req.Headers.Add("Accept-Encoding", "gzip, deflate, sdch"); req.CookieContainer = cookieContainer; req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; using (var resp = (HttpWebResponse)req.GetResponse()) { using (var reader = new StreamReader(resp.GetResponseStream())) { content = reader.ReadToEnd(); } } resorsPage = resorsPage.Insert(resorsPage.IndexOf("PHPSESSID"), "&deprecated=1"); req = WebRequest.CreateHttp(resorsPage); req.Method = "POST"; req.Host = serverHost; req.UserAgent = userAgent; req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; req.Headers.Add("Accept-Language", "de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,ru;q=0.2"); req.Headers.Add("Accept-Encoding", "gzip, deflate, sdch"); req.CookieContainer = cookieContainer; req.ContentType = "application/x-www-form-urlencoded"; req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; var postParams1 = Encoding.UTF8.GetBytes("token=a1329596d322f24f9c43822bd96e56ea&modus=1&type=1"); //tocken verändert sich req.ContentLength = postParams1.Length; //string startPage, serverHost; using (var reqStream = req.GetRequestStream()) { reqStream.Write(postParams1, 0, postParams.Length); //using (var resp = (HttpWebResponse)req.GetResponse()) //{ // startPage = resp.ResponseUri.ToString(); // serverHost = Regex.Match(startPage, @"\/\/(.+com)").Groups[1].Value; //} } using (var resp = (HttpWebResponse)req.GetResponse()) { using (var reader = new StreamReader(resp.GetResponseStream())) { content = reader.ReadToEnd(); } } Console.ReadKey(); } } }
Ich weiß..Ist alles andere als "guter Code" , aber mir geht es erstmal, um die Grundlagen.
Bis dahin bin ich ja mit WebRequest Methode "POST" hingekommen, aber ich weiß nun nicht wie ich den Button auslösen soll,weil sich der Tocken im POST immer ändert.
Bitte um eine kleine Hilfestellung
Vielen Dank!
|
|
|
02/06/2015, 22:36
|
#4
|
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
|
Es ist ein Token, kein Tocken. Wenn sich der immer ändert dann lies ihn doch aus den geschickten Headern bzw. aus dem Source heraus und schicke ihn mit.
|
|
|
02/14/2015, 02:30
|
#5
|
elite*gold: 1
Join Date: Sep 2012
Posts: 314
Received Thanks: 31
|
Thanks for tutorial, help friend also with it.
|
|
|
09/18/2015, 00:35
|
#6
|
elite*gold: 0
Join Date: Mar 2012
Posts: 505
Received Thanks: 55
|
Fehler 1 "System.Net.WebRequest" enthält keine Definition für "CreateHttp"
|
|
|
09/18/2015, 13:45
|
#7
|
elite*gold: 300
Join Date: Apr 2013
Posts: 3,234
Received Thanks: 1,205
|
Quote:
Originally Posted by ZaanyHD
Fehler 1 "System.Net.WebRequest" enthält keine Definition für "CreateHttp"
|
Stell mal dein .Net Framework auf 4.0 um.
|
|
|
09/22/2015, 15:11
|
#8
|
elite*gold: 159
Join Date: Jan 2012
Posts: 526
Received Thanks: 85
|
C#
Quote:
Originally Posted by #Saiirex
Stell mal dein .Net Framework auf 4.0 um.
|
Empfiehlt es sich noch diese Methoden zu nutzen? Oder gibt es inzwischen bessere Möglichkeiten? Ich würde gerne im späteren Verlauf kleinere Bots schreiben?
-- Funktioniert mit .Net Framework 4.0 auch nicht.
-- Ich habe gesehen einen Beispiel auf der Seite von Microsoft gesehen:
WebRequest myRequest = WebRequest.Create("http://www.contoso.com");
Ich würde sagen das Tutorial ist etwas Outdated? Die Eigenschaften der Funktion WebRequest, ist anderst als im Tutorial. Beispielsweise wird "Host" nichtmehr verwendet?
|
|
|
09/22/2015, 19:15
|
#9
|
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
|
Ist veraltet, inzwischen sollte man eher auf  zurückgreifen.
|
|
|
09/22/2015, 19:29
|
#10
|
elite*gold: 2932
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
|
veraltet ist das falsche wort, der neue httpclient ist eher eine art update für den alten webclient. beides funktioniert im kern über webrequets und das wird auch so bleiben, deswegen ist es kein problem auch selber direkt webrequests zu nutzen wenn man wirklich die ganzen einstellungsmöglichkeiten braucht.
da keine der klassen als deprecated markiert ist kann jeder die klasse nutzen mit der er am schnellsten am ziel gelangt.
|
|
|
09/28/2015, 12:19
|
#11
|
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
|
Quote:
Originally Posted by tolio
da keine der klassen als deprecated markiert ist kann jeder die klasse nutzen mit der er am schnellsten am ziel gelangt.
|
Dann werde ich mal etwas genauer...
WebRequest ist in Ordnung, diese sind bis auf 1Methode und 1Property in keinster Hinsicht veraltet. Jedoch wird hier im Tutorial WebRequest.CreateHttp() verwendet (was aus irgendeinem, m.M.n unlogischen Grund nicht als veraltet markiert ist).
Das gibt eine Instanz von HttpWebRequest zurück und diese Klasse ist definitiv obsolete (=veraltet). Siehe:
Quote:
|
deswegen ist es kein problem auch selber direkt webrequests zu nutzen wenn man wirklich die ganzen einstellungsmöglichkeiten braucht.
|
Auch der HttpClient bietet viele Einstellungen (genauer: alle aus RFC2621,  ). Mir fällt gerade nichts ein was hiermit nicht abgedeckt wird
WebClient wird im Video soweit ich das gesehen habe nicht verwendet.
|
|
|
09/28/2015, 21:23
|
#12
|
elite*gold: 0
Join Date: Sep 2007
Posts: 37
Received Thanks: 2
|
Libcurl ist auch eine sehr schöne Library. Relativ easy zu handlen und hat ein integriertes Cookie Handling. Also relativ enstpannt, wenn der Webentwickler alles mit csrf tokens und andere cookies vollgeboxt hat.
|
|
|
09/29/2015, 22:48
|
#13
|
elite*gold: 2932
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
|
^ kann man machen, aber wie schon festgestellt kann man in .Net das ganze auch einfach mit hausmitteln machen.
@skynet
also bei mir wird die httpwebrequest klasse nicht als obsolete angezeigt, weder im msdn noch in der reference source hat die klasse eine entsprechendes obsolete custom attribute.
lediglich der constructor ist entsprechend gekennzeichnet und in der reference source steht auch warum:
genau deswegen soll man eben die create methode in der webrequest klasse nutzen:
Quote:
Do not use the HttpWebRequest constructor. Use the WebRequest.Create method to initialize new HttpWebRequest objects. If the scheme for the Uniform Resource Identifier (URI) is http:// or Create returns an HttpWebRequest object.
|
noch kurz zum webclient, ich hab mir das video nicht angeschaut, ich wollt lediglich die möglichkeiten nennen die bei diesem thema in frage kommen.
|
|
|
 |
Similar Threads
|
[.Net] Generic WebRequests
04/12/2015 - Coding Snippets - 0 Replies
Kurz:
Da ich keine Lust hatte für jede Art von Resourcen die ich in einem WebBot abrufe (String, Image, Binary, ...) eine extra Methode zu bauen, hab ich mir überlegt eine generische Lösung zu basteln. Die Klasse hat keinen Anspruch eine vollständige Allround Lösung zu sein sondern ist für ein aktuelles Projekt entstanden und hat entsprechende Funktionen.
Länger:
Ganz von alleine gehts natürlich nicht, deswegen kann man für jeden Type einen Converter angeben welchen den responseStream des...
|
Hilfe bei webrequests
06/21/2014 - .NET Languages - 5 Replies
Hey,
Bin gerade dabei Webrequests zu lernen (VB) & bin auf ein Problem gestoßen..
Habe mir ein paar tutorials angeschaut & die haben immer ein "Http live headers" benutzt.
Dieses Tool finde ich nicht bzw wenn ich eins finde gibt es mir nur Sachen mit denen ich nichts anfangen kann.
Da ich mir sicher bin das manch einer hier webrequests kann & aktiv benutzt, würde ich euch gerne Fragen welches tool ihr benutzt? (Am besten Chrome)
|
WebRequests in Verbindung mit Javascript
04/26/2014 - .NET Languages - 1 Replies
Ist es möglich, den JavaScript Code einer Seite auszuführen, dass (für mich) wertvoller Code nachgeladen wird. Ist das möglich, oder muss ich dann wohl oder übel den WebClient nutzen?
Danke im Vorraus für die Antworten.
MfG
Requi
|
Verstehe was bei Webrequests nicht...
08/29/2013 - .NET Languages - 2 Replies
Unzwar hab ich folgendes Problem, hier aber erstmal der Beispielcode:
Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
Public Class WebRequestPostExample
Public Shared Sub Main()
|
Mehrere Webrequests / Cookiecon löschn
07/22/2013 - .NET Languages - 14 Replies
Bräuchte mal hilfe, habe es schon gegoogelt aber finde nichts.
Mein Programm loggt sich mit mehreren Accounts über 'nen Webrequest ein, und soll dann ausgeben ob sie gehen oder nicht.
Der Login funktioniert, allerdings nur mit dem 1 Acc, d.h. Wenn der 1 Acc geht, werden alle als gehend angezeigt, und wenn der erste nicht geht alles andrsrum.
Mein Kolleg meinte das liegt am CookieCon, ich weis aber nicht wie man diesen leert oder löscht. Eine andere alternative wäre auch für jeden...
|
All times are GMT +1. The time now is 06:32.
|
|