HttpWebRequest Travian

02/02/2019 02:39 Najix3#1
Hallo Zusammen,

ich habe mich bereits im Forum umgeschaut und kann mich bereits in Travian einloggen und auch die Farmliste starten. Ich scheitere jedoch an dem Gebäude ausbau da ich über Live Http Headers kein Post mitschnitt bekomme so wie es bei einem Login ist.

Wenn ich den Button drücke wird folgendes mitgeschnitten:

Vieleicht könnt Ihr weiter helfen :)

Quote:
[Only registered and activated users can see links. Click Here To Register...] txxxtx.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: txxxtx.com/xxxld.php?id=1
Connection: keep-alive
Cookie: _ga=GA1.2.677607548.1548288473; tt_lang=en; tt_mlang=en; t4level=1; PHPSESSID=ciabkob9mmrtssaau637b2cu16; highlightsToggle=false; c_name=0|Win64|Windows 7|1366px*768px|amd64|-%2C-%2C-; chatmaninwindowtab=0; WMBlueprints=%5B%5D
Upgrade-Insecure-Requests: 1
GET: HTTP/1.1 302 Moved TemporarilyDate: Wed, 30 Jan 2019 23:07:34 GMT
Server: Apache/2.2.15
X-Powered-By: PHP/5.3.3
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Set-Cookie: tt_lang=en; expires=Wed, 06-Feb-2019 23:07:34 GMT
tt_mlang=en; expires=Wed, 06-Feb-2019 23:07:34 GMT
Location: xxxf1.php
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 20
Keep-Alive: timeout=5, max=170
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8


txxxtx.com/xxxld.phpHost: txxxtx.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: txxxtx.com/xxxld.php?id=1
Connection: keep-alive
Cookie: _ga=GA1.2.677607548.1548288473; tt_lang=en; tt_mlang=en; t4level=1; PHPSESSID=ciabkob9mmrtssaau637b2cu16; highlightsToggle=false; c_name=0|Win64|Windows 7|1366px*768px|amd64|-%2C-%2C-; chatmaninwindowtab=0; WMBlueprints=%5B%5D
Upgrade-Insecure-Requests: 1
GET: HTTP/1.1 200 OKDate: Wed, 30 Jan 2019 23:07:34 GMT
Server: Apache/2.2.15
X-Powered-By: PHP/5.3.3
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Set-Cookie: tt_lang=en; expires=Wed, 06-Feb-2019 23:07:34 GMT
tt_mlang=en; expires=Wed, 06-Feb-2019 23:07:34 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=5, max=169
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
02/02/2019 17:21 False#2
Quote:
Originally Posted by Najix3 View Post
Hallo Zusammen,

ich habe mich bereits im Forum umgeschaut und kann mich bereits in Travian einloggen und auch die Farmliste starten. Ich scheitere jedoch an dem Gebäude ausbau da ich über Live Http Headers kein Post mitschnitt bekomme so wie es bei einem Login ist.

Wenn ich den Button drücke wird folgendes mitgeschnitten:
[...]
Vieleicht könnt Ihr weiter helfen :)
Kleiner Tipp vorab, du brauchst Live Http Headers nicht. Schon sehr lange kann man im Browser deiner Wahl die Requests anschauen. Dafür einfach die Entwickler-Tools öffnen (meistens F12) und in den Tab "Netzwerk" (o.ä.) gehen.
Dort findest du dann alle Requests, kannst diese Filtern und natürlich auch Header, Parameter und co. nach schauen.

Beim login wird POST genutzt damit dein Benutzername und (vorallem) dein Passwort nicht oben an der Url als Parameter dran gehangen wird.
Zueinem könnte dann jemand der neben dir ist dein Paswort sehen zum anderen würde dein Passwort im Server Log mit geloggt werden.

Habe mir das ganze mal kurz angeschaut und das ausbauen eines Gebäudes ist relativ einfach, dazu holst du dir einfach den Quellcode der Gebäude Seite (Sprich einfach ein GET Request). Als Beispiel nehme ich jetzt einfach mal das Versteck
Code:
https://ts4.travian.de/build.php?id=30
Sobald du den Quellcode hast suchst du einfach die Stelle raus wo der Button zum ausbauen ist und parst die richtige Url.
Ausschnitt vom Quellcode :
Code:
<div class="upgradeButtonsContainer section2Enabled">

    <div class="section1">
        <button type="button" value="Ausbau auf Stufe 2" id="button5c55c0b8c9c0c" class="green build" onclick="window.location.href = 'dorf2.php?a=30&c=a27489'; return false;">
	<div class="button-container addHoverClick">
		<div class="button-background">
			<div class="buttonStart">
				<div class="buttonEnd">
					<div class="buttonMiddle"></div>
				</div>
			</div>
		</div>
		<div class="button-content">Ausbau auf Stufe 2</div>
	</div>
</button>
<script type="text/javascript" id="button5c55c0b8c9c0c_script">
	jQuery(function() {
        jQuery('button#button5c55c0b8c9c0c').click(function () {
            jQuery(window).trigger('buttonClicked', [this, {"type":"button","value":"Ausbau auf Stufe 2","name":"","id":"button5c55c0b8c9c0c","class":"green build","title":"","confirm":"","onclick":"window.location.href = \u0027dorf2.php?a=30\u0026amp;c=a27489\u0027; return false;"}]);
        });
	});
</script>
<div class="clear"></div><div class="inlineIcon clocks"><i class="clock"></i><span class="value ">0:10:50</span></div>    </div>

    <div class="section2">
        <button type="button" value="Ausbau **25‬%‬ schneller" id="button5c55c0b8c9d4d" class="green build videoFeatureButton" onclick="jQuery(window).trigger('showVideoWindow', {'data' : {'cmd': 'adSalesVideo', 'uid': '3404', 'gid': '23', 'lvl' : '1', 'buildingPlotId': '30', 'csum' : 'a27489'}}); this.blur(); return false;" time="0:08:08" style="display:inline-block;">
	<div class="button-container addHoverClick">
		<div class="button-background">
			<div class="buttonStart">
				<div class="buttonEnd">
					<div class="buttonMiddle"></div>
				</div>
			</div>
		</div>
		<div class="button-content">Ausbau **25‬%‬ schneller</div>
	</div>
</button>
<script type="text/javascript" id="button5c55c0b8c9d4d_script">
	jQuery(function() {
        jQuery('button#button5c55c0b8c9d4d').click(function () {
            jQuery(window).trigger('buttonClicked', [this, {"type":"button","value":"Ausbau \u0026#x202d;\u0026#x202d;25\u0026#x202c;\u0026#37;\u0026#x202c; schneller","name":"","id":"button5c55c0b8c9d4d","class":"green build videoFeatureButton","title":"","confirm":"","onclick":"jQuery(window).trigger(\u0027showVideoWindow\u0027, {\u0027data\u0027 : {\u0027cmd\u0027: \u0027adSalesVideo\u0027, \u0027uid\u0027: \u00273404\u0027, \u0027gid\u0027: \u002723\u0027, \u0027lvl\u0027 : \u00271\u0027, \u0027buildingPlotId\u0027: \u002730\u0027, \u0027csum\u0027 : \u0027a27489\u0027}}); this.blur(); return false;","time":"0:08:08","style":"display:inline-block;"}]);
        });
	});
</script>
<div class="clear"></div><div class="inlineIcon clocks"><i class="clock"></i><span class="value ">0:08:08</span></div><div class="inlineIcon "><i class="play_video"></i><span class="value ">**0‬/*9‬‬</span></div>    </div>

    <div class="clear"></div>

</div>
Zum Parsen der Url kannst du ein DOMparser nehmen, Regex oder was du magst.
Als Beispiel wie es mit Regex aussehen könnte:
[Only registered and activated users can see links. Click Here To Register...]

Somit würdest in diesem Beispiel z.B die Url "dorf2.php?a=30&c=a27489" herrausbekommen.
Wenn du dir die Urls nach einem refresh der Seite anschaust wirst du merken das der Wert des Parameters c immer anders ist. Somit kannst du nicht einfach immer die gleiche Url aufrufen sondern wirst gezwungen die Url aus dem Quellcode zu parsen.
02/03/2019 04:15 Serraniel#3
#moved
02/10/2019 22:01 Najix3#4
Nabend :)

vielen vielen Dank. Mit deiner Antwort hast du mir sehr weitergeholfen. Habe mich mit http web request intensiver beschäftigt und mir reg ex Tutorials angeschaut aber finde einfach nicht die richtigen pattern.

Ich habe erst einmal versucht mir auf der Übersichtsseite die Dorf-ID der Dörfer in einer List Box versucht anzeigen zu lassen aber es klappt einfach nicht:

Quote:
<a id="" title="<span class='coordinates coordinatesWithText coordinatesLTR'><span class='coordText'>- MIRKO</span><span class='coordinatesAligned coordinatesLTR'><span class='coordinateX'>(31</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-82)</span></span><span class='clear'> </span>" href="?newdid=26350" class=""><img src="x.gif"/>- MIRKO</a><span class='coordinates coordinatesWrapper coordinatesAligned coordinatesLTR'><span class='coordinateX'>(31</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-82)</span></span><span class='clear'> </span></li><li class="entry " title="">
<a id="" title="<span class='coordinates coordinatesWithText coordinatesLTR'><span class='coordText'>- REVENGE</span><span class='coordinatesAligned coordinatesLTR'><span class='coordinateX'>(26</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-73)</span></span><span class='clear'> </span>" href="?newdid=25354" class=""><img src="x.gif"/>- REVENGE</a><span class='coordinates coordinatesWrapper coordinatesAligned coordinatesLTR'><span class='coordinateX'>(26</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-73)</span></span><span class='clear'> </span></li><li class="entry " title="">
<a id="" title="<span class='coordinates coordinatesWithText coordinatesLTR'><span class='coordText'>- SPORT CLIPS</span><span class='coordinatesAligned coordinatesLTR'><span class='coordinateX'>(26</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-72)</span></span><span class='clear'> </span>" href="?newdid=25355" class=""><img src="x.gif"/>- SPORT CLIPS</a><span class='coordinates coordinatesWrapper coordinatesAligned coordinatesLTR'><span class='coordinateX'>(26</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-72)</span></span><span class='clear'> </span></li><li class="entry " title="">
<a id="" title="<span class='coordinates coordinatesWithText coordinatesLTR'><span class='coordText'>- TOLGA</span><span class='coordinatesAligned coordinatesLTR'><span class='coordinateX'>(19</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-81)</span></span><span class='clear'> </span>" href="?newdid=23939" class=""><img src="x.gif"/>- TOLGA</a><span class='coordinates coordinatesWrapper coordinatesAligned coordinatesLTR'><span class='coordinateX'>(19</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-81)</span></span><span class='clear'> </span></li><li class="entry " title="">
<a id="" title="<span class='coordinates coordinatesWithText coordinatesLTR'><span class='coordText'>- TOM TOM</span><span class='coordinatesAligned coordinatesLTR'><span class='coordinateX'>(30</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-78)</span></span><span class='clear'> </span>" href="?newdid=26153" class=""><img src="x.gif"/>- TOM TOM</a><span class='coordinates coordinatesWrapper coordinatesAligned coordinatesLTR'><span class='coordinateX'>(30</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-78)</span></span><span class='clear'> </span></li><li class="entry " title="">
<a id="" title="<span class='coordinates coordinatesWithText coordinatesLTR'><span class='coordText'>- YESMIN</span><span class='coordinatesAligned coordinatesLTR'><span class='coordinateX'>(33</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-87)</span></span><span class='clear'> </span>" href="?newdid=26747" class=""><img src="x.gif"/>- YESMIN</a><span class='coordinates coordinatesWrapper coordinatesAligned coordinatesLTR'><span class='coordinateX'>(33</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-87)</span></span><span class='clear'> </span></li><li class="entry " title="">
<a id="" title="<span class='coordinates coordinatesWithText coordinatesLTR'><span class='coordText'>AMEVIDA</span><span class='coordinatesAligned coordinatesLTR'><span class='coordinateX'>(32</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-83)</span></span><span class='clear'> </span>" href="?newdid=26550" class=""><img src="x.gif"/>AMEVIDA</a><span class='coordinates coordinatesWrapper coordinatesAligned coordinatesLTR'><span class='coordinateX'>(32</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-83)</span></span><span class='clear'> </span></li><li class="entry " title="">
ich möchte gerne:
Quote:
</span>" href="?newdid=26350" class=""><img src="x.gif"/>
Die Dorf ID in dem Fall die 26350 in einer Listbox anzeigen lassen und nutze dafür folgenden Code:

Quote:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim r As New System.Text.RegularExpressions.Regex(" href=""?newdid="".*"" class=""><img src=""x.gif""/>")
Dim matches As MatchCollection = r.Matches(RichTextBox1.Text)

For Each itemcode As Match In matches

ListBox1.Items.Add(itemcode.Value.Split("""").GetV alue(1))

Next
End Sub

Bei mir wird jedoch garnichts angezeigt.. Das verstehe ich nicht. Danach würde ich gerne die Dorf Namen auslesen auch das klappt nicht.

Vielen Dank für eure Hilfe :)
02/10/2019 23:16 mrapc#5
Wärst du so gut und packst einmal den gesamten HTML Quellcode in einen PasteBin?
Ich denke was auch gehen dürfte sind die DOM Elemente zu parsen.
Das habe ich mal mit GeckoFX gemacht, das hat ganz wunderbar funktioniert.

Ich denke aber auch das dein Spiel Sockets verwendet und du üben jene auch in der Lage wärst Befehle zu senden.

Ich sehe gerade False hat das schon so beantwortet.
Also wie gesagt DOM Parsen halte ich für am schlausten.
Dein schlimmster Feind ist dann natürlich ein uglyfier, aber ich denke die benutzen keinen.
02/10/2019 23:58 False#6
Quote:
href=""?newdid="".*"" class=""><img src=""x.gif""/>
Wenn ich es richtig sehe ist das dein Regex.

Dort sind einige Sachen die du beachten solltest, z.B. hast du das Fragezeichen und den Punkt (in x.gif) nicht escaped.

Ein ? Heißt in Regex das das vorherige Zeichen optional ist was bei dir ja nicht der fall ist (Somit hättest du das Fragezeichen escapen müssen \?)
Ein Punkt heißt soviel wie "jedes belibige Zeichen", das hättest du also auch escapen (\.) müssen damit er wirklich nach einem Punkt geschaut wird.
Desweiteren hast du mehrfach "" im Regex, was dort nichts zu suchen hat (da im Quellcode keine "" zu sehen sind).

Auf Regex101 kannst du dein Regex gut testen, die "rausgefilterten" Werte werden im Quellcode farbig markiert und rechts auch noch einmal angezeigt.

Für dein Fall wäre z.B. folgender Regex möglich (zu beachten sind natürlich die verwendeten Flags)
[Only registered and activated users can see links. Click Here To Register...]

Lies dich am besten mehr in Regex ein oder nutz dein Dom parser (musst du dich ggf. aber auch einlesen).
02/16/2019 18:45 Mad0ck#7
Kann dir bei Travian HTML DOM empfehlen (:

Der Liebe False hat mir schon einiges zu dem Thema beigebracht, und kann nun eigentlich mehr oder weniger ( auch wenns teilweise nicht so schön gecodet ist ) alles automatisieren was ich will o.o

Ist nach 1-2 Beispielen auch relativ schnell zu verstehen :)
02/17/2019 15:16 Najix3#8
@[Only registered and activated users can see links. Click Here To Register...]: Vielen Dank, hast du Erfahrung im Travian Bereich? Hast du evtl Beispiele zu HTML DOM? Wie hast du damit angefangen? Was empfhielst du mir? :)
02/17/2019 15:45 Najix3#9
Hallo Zusammen,

ich möchte gerne per HttpWebRequest bei Travian Einheiten ausbilden.

So sieht der Mitschnitt aus:
Code:
http://tx40xxxxxxxxxxis.com/build.php

Host: tx40xxxxxxxxxxis.com

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Accept-Language: de,en-US;q=0.7,en;q=0.3

Accept-Encoding: gzip, deflate

Referer: http://tx40xxxxxxxxxxis.com/build.php?id=19

Content-Type: application/x-www-form-urlencoded

Content-Length: 29

Connection: keep-alive

Cookie: _ga=GA1.2.635458686.1547908770; tt_lang=en; tt_mlang=en; t4level=1; highlightsToggle=false; c_name=0|Win32|Windows%20NT%2010.0|1920px*1080px|amd64|-%2C-%2C-; chatmaninwindowtab=0; mapId1=%7B%22grid%22%3Atrue%7D; PHPSESSID=madekpgikfgovupi2brhmk6sr3; WMBlueprints=%5B%5D

Upgrade-Insecure-Requests: 1

id=19&ft=t1&t21=1&t22=0&s1=ok

POST: HTTP/1.1 302 Moved Temporarily

Date: Sun, 17 Feb 2019 13:55:33 GMT

Server: Apache/2.2.15

X-Powered-By: PHP/5.3.3

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Pragma: no-cache

Set-Cookie: tt_lang=en; expires=Sun, 24-Feb-2019 13:55:33 GMT
tt_mlang=en; expires=Sun, 24-Feb-2019 13:55:33 GMT

Location: build.php?id=19

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public

Vary: Accept-Encoding

Content-Encoding: gzip

Content-Length: 20

Keep-Alive: timeout=5, max=195

Connection: Keep-Alive

Content-Type: text/html; charset=UTF-8

Und so sieht mein Code aus:

Code:
farmh.GetResponse("http://tx40xxxxxxxxxxis.com/build.php", "?id=19&ft=t1&t21=1&t22=0&s1=ok")
Ich nutze die Function von Kraizy aus dem TuT [Only registered and activated users can see links. Click Here To Register...]

Leider passiert hier garnichts, normalerweise sollte 1 Einheit ausgebildet werden.

Ich hoffe auf eure Unterstützung, vielen Dank im Voraus.
02/17/2019 15:54 Ludder231#10
Evtl .muss du noch die Location mitsenden im deinem post.

PHP Code:
Locationbuild.php?id=19 
02/17/2019 18:14 Mad0ck#11
Quote:
Originally Posted by Najix3 View Post
@[Only registered and activated users can see links. Click Here To Register...]: Vielen Dank, hast du Erfahrung im Travian Bereich? Hast du evtl Beispiele zu HTML DOM? Wie hast du damit angefangen? Was empfhielst du mir? :)
Kannst mich ja mal bei Discord adden (:
S208-Michi#2840

lg