# Ganz normaler HTTP-Request?



## multimolti (16. Dezember 2007)

Hallo!
Ich möchte für einen kleinen Versuch eine Verbindung zu einer anderen Website herstellen und einfach mal deren index-Dokument anfordern. Also sende ich z.B. das hier:
"GET /index.php HTTP/1.1\r\nHost: ogame.de\r\nUser-Agent: MeinBrowser\r\nConnection: close"
an den Host "ogame.de" und Port "80", aber ich bekomme einen Bad Request:

```
HTTP/1.1 400 Bad Request
Date: Sun, 16 Dec 2007 20:45:12 GMT
Server: Apache
Vary: Accept-Encoding
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>
```

Was mache ich denn falsch? Bei Wikipedia steht, dass man es so machen soll, und auch auf anderen Websites habe ich es so gesehen!


----------



## payerot (17. Dezember 2007)

Also wenn du bei OGames Boten willst, wird das ein hartes stück Arbeit, zumal dich die grafischen Eingabeaufforderungen dann endgültig zur Strecke bringen werden. 

Grundsätzlich solltest du immer den Datenverkehr zwischen einem echten WebBrowser und dem Ziel-Webserver analysieren und es auch genau mit dessen Requests versuchen. z.B. Firefox oder IE.

Per file_get_contents() bekomme ich den Frameset von ogame.de


----------



## multimolti (17. Dezember 2007)

Wie kann ich den Verkehr denn analysieren? Es gibt ja so Programme wie WireShark oder so, aber mit denen komme ich nicht wirklich klar. Kann mir jemand sowas empfehlen?

Und was ich später damit will ist ne ganz andere Sache ;-) Nen Bot ist eine ziemlich schwierige Sache, vorerst würde es ja auch reichen, wenn auf dem PC ein Infofeld kommt, sobald man angegriffen wird 

EDIT:
Ach so, was ich sagen wollte, ich bekomme es jetzt auch schon ganz gut hin, sobald ich das "HTTP/1.1" raus nehme, geht es eigentlich. Was aber etwas komisch ist, ist dass die Server nicht das gleiche antworten wie wenn ich mit Firefox drauf gehe. Hier meine Liste der getesteten Seiten:
- localhost (Apache): geht 1a, sehe ganz normale index-Seite
- google.de: ich bekomme html-Code, mit der Nachricht "this page has moved to www.google.de" (aber da bin ich doch schon!)
- google.de/ig (personalisierte Startseite): geht wunderbar, ich bekomme Kilobyteweise html-Code zugeschickt
- ogame.de: ich bekomme genau das hier: "<html><body><h1>it works!</h1></body></html>" (das ist die Standardnachricht von einem frisch eingerichteten Apache)

Andere Websites habe ich auch getestet, aber schon wieder vergessen was passiert ist, war auf jeden Fall alles komisch. Und irgendwas habe ich umgeändert, so dass ich jetzt keine Header-Infos mehr bekomme (vorher kam immer Server: Apache und so ein Quatsch).


----------



## payerot (17. Dezember 2007)

Ich benutze für solche Sachen FireBug, das ist ein AddOn für Firefox wie unschwer zu denken ist  Dieses AddOn ist einfach sehr mächtig.

Es kann sein, wenn du Google GETten willst, das du dann weitergeleitet wirst, musst dir auch immer genau anschauen, wie der Response-Header aussieht.

Hatte vor 2 oder 3 Jahren mal einen Bot für Fatal-Vortex gebaut, auch mit Angriffsüberwachung, Autospy, Autosafe etc. war echt spaßig bis dann diese blöden Bildchen kamen. Hatte dann die Idee, das über ein kleinen cpp Programm zu lösen aber ich kenne mich im Bild/Matrix Bereich 0 aus 

Falls du in dem Bereich noch etwas von mir wissen willst, nur raus damit.

EDIT:

```
function GetHttp($url)
{
	$url = parse_url($url);
	do {
		$fp = @fsockopen($url[host], 80);
	} while(!$fp);
    fputs($fp, "GET {$url[path]}?{$url[query]} HTTP/1.1\r\n");
    fputs($fp, "Host: {$url[host]}\r\n");
    fputs($fp, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4\r\n");
    fputs($fp, "Accept: text/html\r\n");
    #fputs($fp, "Referer: $referer\r\n");
    fputs($fp, "Keep-Alive: 300\r\n");
    fputs($fp, "Connection: keep-alive\r\n");
    fputs($fp, "Cookie: TEST\r\n");
    fputs($fp, "\r\n");

    while(!feof($fp))
      $res .= fgets($fp, 128);
      
    fclose($fp);
    return $res;
}

// Da bekomm ich den Frameset
echo GetHttp("http://www.ogame.de");
// Im Frameset fand ich den Verweis zu der Datei home.php
echo GetHttp("http://www.ogame.de/home.php");
```


----------



## multimolti (17. Dezember 2007)

Ach das ist jetzt nen Mist, ich habe eigentlich Firebug in meinem FF2.0, aber grade benutze ich mal die 3.0 Beta und da geht das Addon noch nicht. Und wenn ich jetzt mal die 2.0 starte, dann geht wieder alles was ich im 3er eingerichtet habe kaputt.

Naja versuchen kann mans. Und ich habe es mittlerweile hinbekommen, einfach irgendeine Website zu getten, aber das Problem ist ja, dass nicht unbedingt kommt, was ich will!
Hat jemand eine Idee, warum? Mein Request sieht jetzt einfach so aus:

```
connection.Send("GET / \r\nHost: " + connection.Server);
```
Also einfach die Index-Datei vom Server nehmen und als Host eben den Server, zu dem ich verbunden bin, angeben, also z.B. sieht der Request dann so aus:

```
GET /
Host: google.de
```
Und den Header empfange ich ja aus mir unbekannten Gründen nicht mehr.


----------



## payerot (18. Dezember 2007)

hast du meinen Code oben mal getestet? Da solltest du auf jeden Fall den Response Header mitgeliefert bekommen.


----------



## Michael Engel (18. Dezember 2007)

Statt alles selbst mit sockets zu machen würde ich dir auch eher zu cURL raten. Das unterstützt redirects, Cookies usw. warscheinlich wirst du es damit einfacher haben.

Generell ist aber zu solchen Bots eher abzuraten, sowohl deinem Provider als auch der Zielseite gefällt es aufgrund des Traffics / Nutzungsbestimmungen (denen du zugestimmt hast ^^) nicht..


----------



## multimolti (18. Dezember 2007)

Ich bin mittlerweile sowieso auf C# umgestiegen, dann kann das auch laufen wenn grade keiner am PC ist, ist ganz praktisch so.
Aber das Problem, dass ich nicht den html-Code geliefert bekomme, den Firefox bekommt, besteht immer noch, habe jetzt EXAKT das gleiche gesendet wie Firefox (also auch mit dem Useragent und Keep-Alive und so nem Zeug) und trotzdem kommt 1. kein Header und 2. teilweise die falsche Website.


----------

