| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

15-05-2009, 20:07
|
|
Nucular
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 10
|
|
Zitat:
Moment, du schaust dir die Header über ein Browser-Plugin an?
Dabei bekommst du natürlich die Header-Kommunikation zwischen deinem Browser und deinem Script mit - aber doch nicht die zwischen deinem Script und dem anderen Server ...
|
Ok wieder was gelernt,...
Zitat:
|
Siehe Zlib-Funktionen im Manual.
|
Das hab ich mir gerade mal angeschaut,... ich müsste also nur das was ankommt mit gzdecode dekompremieren richtig?!...
Dann kommt aber bei mir der Fehler dass die Funktion nicht gefunden wird. Aber bei phpinfo() steht unter "Registered PHP Streams" --> "compress.zlib" was laut google zlib ist nur dass es umbenannt wurde...
edit:
macht der erst das gzip und dann deflate und muss ich es dann auch wieder auf umgekehrte Weise dekomprimieren?...
Geändert von Nucular (15-05-2009 um 22:49 Uhr)
|

15-05-2009, 23:49
|
|
Nucular
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 10
|
|
Ok vergesst den letzten Thread,... alles Mist ;-)
Aber Fragen aber ich dennoch :-/....
1. Man kann nicht schauen auf welche Art es komprimiert ankommt richtig? also gzip oder deflate...
2. Ich kann einen String gzcompress() und danach auch wieder gzuncompress() ohne Probleme,... aber den Response den ich schon seit Stunden probiere zu "entschlüsseln" lässt sich mit gzuncompress() nicht dekomprimieren,... data error! D.h. entweder nicht mit gzip compressed oder ich will womöglich zuviel/zuwenig gzuncompressen...
Wenn ich sich jemand die Zeit nehmen will/kann und mir mit ein paar Sätzen unter die Arme greifen könnte wäre ich sehr dankbar ;-)
|

16-05-2009, 00:02
|
Forsaken
  Administrator
|
|
Registriert seit: May 2009
Beiträge: 30
|
|
Es ist ja normal nicht meine Art solche Mengen an Code "vorzukauen" aber ich hab da schon einen Ziemlich weiten Ansatz wie sich das ganze relativ bequem lösen lässt.
Nötige Links zu dieser Methode:
PHP: file_get_contents - Manual / PHP: HTTP and HTTPS - Manual
PHP: stream_context_create - Manual
In den Kommentaren finden sich jeweils zahlreiche Beispiele die die verschienen Möglichkeiten demonstrieren.
Irgend eine kleinigkeit ist daran noch faul, sobald ich einen anständigen Netzwerk-Sniffer für Linux gefunden habe finde ich das bestimmt auch noch raus  Aber für den Fall das du schneller bist hier die Funktionen und der Aufruf mit denen ich es derzeit versuche:
PHP-Code:
function www_get_contents($url, $method, $ar_params, $cookies, $opt_header) { if ($ar_params) $params = http_build_query($ar_params); if (strtoupper($method) == "POST") { $opts = array( 'http'=>array( 'method'=>"POST", 'header'=>($opt_header ? implode("\r\n",$opt_header)."\r\n" : "").GetCookieHeader($cookies). "Content-Type: application/x-www-form-urlencoded;\r\n". "Content-Length: ".strlen($params)."\r\n", 'content'=>$params ) ); } else { $opts = array( 'http'=>array( 'method'=>"GET", 'header'=>($opt_header ? implode("\r\n",$opt_header)."\r\n" : "").GetCookieHeader($cookies) ) ); if ($ar_params) $url = $url."?".$params; } //var_dump($opts); //echo("<hr>"); //var_dump($url); $context = stream_context_create($opts); $result = file_get_contents($url, 0, $context); if (strlen($result) > 0) { //echo("<hr>"); //var_dump($http_response_header); $cookies = array(); foreach ($http_response_header as $httpline) { @list($header,$parameters) = explode(";",$httpline,2); @list($attr,$value) = explode(":",$header,2); if (strtolower(trim($attr)) == "set-cookie") { $cookies_raw = explode("&", trim($value)); foreach($cookies_raw as $cookie) { list($cookie_name, $cookie_value) = explode("=", $cookie); $cookies[$cookie_name] = $cookie_value; } } } if (!is_array($_SESSION['cookies'])) $_SESSION['cookies'] = $cookies; else $_SESSION['cookies'] = array_merge($cookies, $_SESSION['cookies']); return $result; } echo("<hr>"); var_dump($http_response_header); }
function GetCookieHeader($cookies) { if (empty($cookies)) return ""; $header = array(); foreach($cookies as $cookie=>$value) { $header[] = $cookie."=".$value; } return "Cookie: ".implode("; ", $header)."\r\n"; } session_start();
$uni = 60; $user = "Name"; $pass = "Passwort";
if (!is_array($_SESSION['cookies'])) $_SESSION['cookies'] = array(); $_SESSION['cookies']["uni_selected_".$uni] = 1; $_SESSION['cookies']["uni_user"] = $user; $_SESSION['cookies']["uni_lastLogin"] = $uni;
$params = array(); $params["submitInput"] = "Login"; $params["uni_id"] = $uni; $params["is_utf8"] = 0; $params["v"] = "2"; $params["uni_url"] = "uni".$uni.".ogame.de"; $params["login"] = $user; $params["pass"] = $pass;
$url = "http://uni".$uni.".ogame.de/game/reg/login2.php"; //$url = "http://localhost/ogame/post.php"; $header = array(); $header[] = "Referer: http://ogame.de/"; $header[] = "Accept: */*"; // gzip nicht akzeptieren das spaart arbeit solange der Server mitmacht ;) (ogame macht es mit) $header[] = "Accept-Encoding: deflate"; $result = www_get_contents($url, "POST", $params, $_SESSION['cookies'], $header); if (preg_match("/URL\=(.+?)'/", $result, $redirect_url)) { // Weiterleitung folgen $header = array(); $header[] = "Accept: */*"; // gzip nicht akzeptieren das spaart arbeit solange der Server mitmacht ;) (ogame macht es mit) $header[] = "Accept-Encoding: deflate"; $header[] = "Referer: ".$url; $url = "http://uni".$uni.".ogame.de".$redirect_url[1]; $result = www_get_contents($url, "GET", false, $_SESSION['cookies'], $header); echo($result); }
Läuft jetzt ohne Probleme
Geändert von Forsaken (16-05-2009 um 17:33 Uhr)
|

16-05-2009, 00:12
|
|
Nucular
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 10
|
|
Die erste Funktion hab ich mir heute mittag schon angeschaut,... hattest du glaub in deinem ersten Post geschrieben,... bin ich dir dankbar für,.. nur jetzt sitzt ich seit 2 Tage an meinem Script und bin alle 1-2 Stunden ein Schritt weiter gekommen,... und irgendwie kommts mir so vor als wär ich kurz vor meinem ersten Ziel, und zwar ein einfacher Login per PHP.. ^^...
deswegen scheuts mir davor mit einer ganz anderen Art und Weise und neuen Funktionen neu anzufangen :-P
Zitat:
|
Irgend eine kleinigkeit ist daran noch faul
|
Und genau diese Befürchtung hab ich auch....
Zitat:
|
sobald ich einen anständigen Netzwerk-Sniffer für Linux gefunden habe finde ich das bestimmt auch noch raus
|
das wär natürlich mue buenoooo!! ^^
Zitat:
|
Aber für den Fall das du schneller bist hier die Funktionen und der Aufruf mit denen ich es derzeit versuche:
|
Werd ich mir morgen aufjedenfall mal anschauen...
So,... ne gute Nacht wünsch ich ;-)
|

16-05-2009, 00:17
|
Forsaken
  Administrator
|
|
Registriert seit: May 2009
Beiträge: 30
|
|
Hehe klar hab ich absolut Verständniss für 
Ich werd noch eben schaun ob der Post nur bei OGame nicht vernünftig erkannt wird oder ob das ein allgemeines Problem ist... aber ich Tippe eher auf ersteres.
Gute Nacht
Edit: Ähm ja... es ist schon ziemlich spät... Letzten endes hab ich meinen Fehler dann aber doch gefunden. So habe ich jetzt immerhin auch wieder eine ziemlich effektive funktion für http requests.
Für den Lerneffekt hab ich die wichtigen ausgaben mal auskommentiert drin gelassen.
Ansonsten viel Erfolg bei was auch immer du vor hast
Geändert von Forsaken (16-05-2009 um 01:25 Uhr)
|

16-05-2009, 18:46
|
Forsaken
  Administrator
|
|
Registriert seit: May 2009
Beiträge: 30
|
|
Ich hab mir Heute mal etwas Zeit genommen und eine Klasse geschrieben die ich dann auch in meinen Kernel übernehmen werde 
Es gibt noch viele um das man sie erweiten kann (was ich auch noch werde) aber für deine Zwecke reicht sie denke ich jetzt schon aus.
Die Klasse ist komplett im PHP-Doc Stil Kommentiert und auch Allgemein war ich mal spendabel mit den Kommentaren 
Zum besseren Verständniss noch ein kurzes Anwendungsbeispiel:
PHP-Code:
require_once("sys.http.php"); session_start(); $ogame = new http_wrapper($_SESSION["ogame_cookies"]); // GZIP nicht akzeptieren $ogame->AddHeader("Accept: */*"); $ogame->AddHeader("Accept-Encoding: deflate"); // Account daten $uni = 60; $user = "Name"; $pass = "Passwort";
// Login-Cookies setzen $ogame->AddCookie("uni_selected_".$uni, 1); $ogame->AddCookie("uni_user", $user); $ogame->AddCookie("uni_lastLogin", $uni); // Parameter für den Login Setzen $params = array(); $params["submitInput"] = "Login"; $params["uni_id"] = $uni; $params["is_utf8"] = 0; $params["v"] = "2"; $params["uni_url"] = "uni".$uni.".ogame.de"; $params["login"] = $user; $params["pass"] = $pass; $ogame->AddParameters($params); // Login-Request abschicken $ogame->referer = "http://ogame.de/"; $ogame->SetMethod("POST"); $result = $ogame->GetURL("http://uni".$uni.".ogame.de/game/reg/login2.php"); echo("<noscript>".$result."</noscript>");
Geändert von Forsaken (16-05-2009 um 19:09 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|