5Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
12
12
ZUGRIFFE
897
897
EMPFEHLEN
-
Moin Jungs,
also ich habe ein kleines Problem. und zwar möchte ich von der Seite meines Kumpel News auslesen. Dazu muss ich allerdings in einen geschützten Bereich. So nun habe ich das Anmeldeformular auf seiner Seite ausgeführt. Wie kann ich jetzt das Cookie auf dem Server speichern, so das dieser dann testweise die seite zum Client schicken kann ohne das dieser sich nochmals anmelden muss.
Hier mal die klasse, die Verbindung herstellt und das Formular ausfüllt
PHP-Code:<?php
/**
* @author Kai Dölger
* @layout NewsBot
* @date 17.02.2010 - 13:05
*/
$ob = new bot();
class bot
{
function bot ()
{
$this->login_use();
}
function login ($host, $path, $referer, $data_to_send)
{
$fp = fsockopen($host, 80);
printf("Open!\n");
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data_to_send) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data_to_send);
printf("Sent!\n");
while(!feof($fp))
{
$res .= fgets($fp, 128);
}
printf("Done!\n");
fclose($fp);
return $res;
}
function login_use ()
{
$data = "loginName=*****&pass=******";
printf("Go!\n");
$x = $this->login(
"**************",
"/index.php",
"******************",
$data);
$content = require("*********/index.php");
printf($content);
}
function getNews ()
{
}
}
?>
-
Moin,
Cookies werden ja im Browser und nicht auf dem Server gespeichert.
Was du tun müsstest wäre dies:
was die Funktion login() zurückgibt erstmal durchsuchen nach dem Wert des betreffenden Cookies(wie der Name des Cookies ist, weisst du ja, nehme ich mal an).
Diesen Wert musst du dir merken und beim nächsten mal den Cookie in der Anfrage mit übermitteln, das sollte dann ca. so aussehen:
Code :1 2 3 4 5
$fp = fsockopen($host, 80); fputs($fp, "GET [I]/loginerforderndeNews.php[/I] HTTP/1.1\r\n"); fputs($fp, "Host: $host\r\n"); fputs($fp, "Connection: close\r\n"); fputs($fp, "Cookie: [I]namesDesCookies=wertDesCookies[/I]\r\n\r\n");
-
Richtig, aber in dem Moment wo mein Server die News beim anderen Server abfragt wird der ja zum Client

Also eigentlich wollte ich die Daten aus dem Cookie dann in ner DB speichern, aber das ist ja im Moment nicht mein Problem
Wie ich den Wert übermittle ist mir klar, mein Problem ist wie komme ich an den Wert ran? Beispiel siehe Anhang
Danke schonmal
-
So zum Beispiel:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
function login_use () { $data = "loginName=*****&pass=******"; printf("Go!\n"); $x = $this->login( "**************", "/index.php", "******************", $data); [COLOR="Blue"][B] preg_match('@PHPSESSID=([\da-f]{32})@,$x,$sid); //in $sid[1] sollte jetzt die Session-ID stehen[/B][/COLOR] $content = require("*********/index.php"); printf($content); }
-
Alles klar, werde es morgen gleich mal ausprobieren, DANKE
Kai
-
Also erstnochmal ein großes Danke an Sven.
So nun weis ich nicht ob ich einfach zu blöd bin oder mir meine PHP Kenntnisse hier an ihre Grenzen stoßen. Nun habe ich mich angemeldet und will nun den Content aus dem geschützten Breich auslesen. Allerdings klappt das nicht so ganz
Das ganze sollte in der Funktion getNews() passieren, tut es aber leider nicht
Hier die Klasse
Ich bekomme jetzt folgende AusgabePHP-Code:<?php
/**
* @author Kai Dölger
* @layout Project1
* @date 17.02.2010 - 13:05
*/
$ob = new bot();
class bot
{
var $session;
var $serverid;
function bot ()
{
$this->login_use();
$this->getMessages();
}
function login ($host, $path, $referer, $data_to_send)
{
$fp = fsockopen($host, 80);
printf("Open!\n");
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data_to_send) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data_to_send);
printf("Sent!\n");
while(!feof($fp))
{
$res .= fgets($fp, 128);
}
printf("Done!\n");
fclose($fp);
return $res;
}
function login_use ()
{
$data = "loginName=******&pass=********";
printf("Go!\n");
$x = $this->login(
"**********************",
"/start.php",
"*****************************",
$data);
preg_match('@PHPSESSID=([\da-f]{32})@',$x,$sid);
echo "<br />Cookie SessionID: ".$sid[1];
$this->session = $sid[1];
}
function getNews ()
{
$fp = fsockopen("*******", 80);
fputs($fp, "GET /start/index.php HTTP/1.1\r\n");
fputs($fp, "Host: ************* \r\n");
fputs($fp, "Connection: close\r\n");
fputs($fp, "Cookie: PHPSESSID=".$this->session." \r\n\r\n");
while ( ! feof( $fp ) )
{
$inhalt= fread($fp, 80);
}
echo "<p>".$inhalt."</p>";
}
}
?>
Code :1 2 3 4
Go! Open! Sent! Done! Cookie SessionID: 64caa3cb09b8704e70a09e3d9d63a20c : 0 Connection: close Content-Type: text/html
Allerdings wollte ich den HTML Code haben in der unteren Zeile. Ich hoffe ihr habt Geduld mit mir und helft mir ein weiteres mal aus der Klemme. DANKE
-
Du liest da nur 80 Zeichen pro Zeile:
das ist vermutlich etwas wenig.Code :1
$inhalt= fread($fp, [B]80[/B]);
-
Okay, danke, dann hab ich die Zahl etwas missinterpretiert
Werde mal schaun was passiert wenn ich sie vergrößere
BESTEN DANK
So hab das ganze mal auf 250 Zeichen erhöht. Dann erhalte ich folgende Ausgabe
Code :1 2 3 4
Go! Open! Sent! Done! Cookie SessionID: 0f5a0b459b4e3e4c8291e9bc227f1bf8 st-check=0, pre-check=0 Pragma: no-cache Location: / Content-Length: 0 Connection: close Content-Type: text/html
Dann habe ich die Zahl weiter auf 1000 erhöht und ich bekam gar keine Ausgabe mehr.
Also jetzt bin ich leicht verwirrt !? PS: Bei Content-Length sollte aber eigentlich auch nicht "0" stehen, oder?
Grüße KaiGeändert von KGD92 (19.02.10 um 14:06 Uhr)
-
Das lässt sich eigentlich recht schwer sagen, woran es hapert...wenn man die Gegenseite nicht kennt(vielleicht wird dort ja noch mehr erwartet zum Login).
Hier mal ein funktionierendes Beispiel:Ich hab dafür 2 Dateien online gestellt, zuerst http://doktormolle.de/temp/355213/login.php zum Login:PHP-Code:<?php
class bot
{
var $auth,
$sessionID;
function bot(
$host,
$loginPath,
$loginMethod,
$loginData,
$loginReferer,
$loginContentType,
$sessionName
)
{
$this->auth=get_defined_vars();
$this->login();
}
function login ()
{
$fp = fsockopen($this->auth['host'], 80, $errno, $errstr, 30);
fputs($fp, "{$this->auth['loginMethod']} {$this->auth['loginPath']} HTTP/1.0\r\n");
fputs($fp, "Host: {$this->auth['host']}\r\n");
fputs($fp, "Referer: {$this->auth['loginReferer']}\r\n");
if($this->auth['loginData']!='')
{
fputs($fp, "Content-type: {$this->auth['loginContentType']}\r\n");
fputs($fp, "Content-length: ". strlen($this->auth['loginData']) ."\r\n");
}
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $this->auth['loginData']);
$res='';
while(!feof($fp))
{
$line=fgets($fp, 1024);
$res.=$line;
if(strpos($res, "\r\n\r\n")!==false)
{
fclose($fp);
return false;
}
if(preg_match('@Set-Cookie: '.$this->auth['sessionName'].'=([\da-f]{32})@',$line,$sid))
{
$this->sessionID=$sid[1];
fclose($fp);
return true;
}
}
fclose($fp);
return false;
}
function request($path,
$method,
$referer='',
$contentType='',
$data=''
)
{
$fp = fsockopen($this->auth['host'], 80, $errno, $errstr, 30);
fputs($fp, "{$method} {$path} HTTP/1.0\r\n");
fputs($fp, "Host: {$this->auth['host']}\r\n");
fputs($fp, "Referer: {$referer}\r\n");
if($data!='')
{
fputs($fp, "Content-type: {$contentType}\r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
}
if(!empty($this->sessionID))
{
fputs($fp, "Cookie: {$this->auth['sessionName']}={$this->sessionID};\r\n");
}
fputs($fp, "Connection: close\r\n\r\n");
if($data!='')
{
fputs($fp, $data);
}
$res='';
while (!feof($fp))
{
if(isset($body))
{
$body.=fgets($fp, 1024);
}
else
{
$res.= fgets($fp, 1024);
if(strpos($res, "\r\n\r\n")!==false)
{
unset($res);
$body='';
}
}
}
fclose($fp);
return $body;
}
}
$_bot=new bot('doktormolle.de',
'/temp/355213/login.php',
'POST',
'loginName=Hans&pass=Wurst',
'',
'application/x-www-form-urlencoded',
'PHPSESSID'
);
if($_bot->login())
{
echo 'Session-Id geholt:'.$_bot->sessionID.'<hr/>';
$news=$_bot->request(
'/temp/355213/news.php',
'GET'
);
echo $news;
}
?>
...da wird beim Login einfach ne Session-Variable gesetzt.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
<?php ini_set('session.use_cookies',1); ini_set('session.use_trans_sid',1); session_start(); if( empty($_SESSION['loggedIn']) && isset($_POST['loginName']) && $_POST['loginName']=='Hans' && isset($_POST['pass']) && $_POST['pass']=='Wurst' ) { $_SESSION['loggedIn']=true; } if(!empty($_SESSION['loggedIn'])) { die('Eingelocht'); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <meta name="author" content="doktormolle" /> <meta name="date" content="2010-02-19" /> <title>Login</title> </head> <body> <form method="post"> loginName<br/> <input name="loginName"/><br/> pass<br/> <input name="pass"/><br/> <input type="submit"> </form> </body> </html>
und http://doktormolle.de/temp/355213/news.php
Code :1 2 3 4 5 6 7 8 9 10 11 12
<?php session_start(); if(empty($_SESSION['loggedIn'])) { echo 'Du bist nicht eingeloggt, keine News'; } else { echo 'Du bist eingeloggt, hier sind die News'; } ?>
...das Ergebnis siehst du ja beim Testen.
Passe mal die Daten an mit deinen und probiere, ob es hinhaut.
Wenn nicht, müsstest du eventuell die Adressen verraten, die du da abfragst, damit man nachschauen kann, was da vor sich geht.
-
Jop, Danke, ich schau mal was sich machen lässt
-
Also ich kommen meinem Ziel näher
Ich benutze zur Zeit folgende Funktion zum auslesen der Webseite
So, ich bekomme auch eine Ausgabe allerdings enthält diese nur den HeaderPHP-Code:function PostToHost($host, $path, $referer, $data_to_send) {
$res = "";
$fp = fsockopen($host, 80);
printf("Open!\n");
fputs($fp, "GET $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
//fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Cookie: PHPSESSID={$this->session}&ServerID={$this->serverid}\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data_to_send) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data_to_send);
printf("Sent!\n");
while(!feof($fp)) {
$res .= fgets($fp);
}
printf("Done!\n");
fclose($fp);
print("<br>".$res);

Code :1
HTTP/1.0 302 Found Date: Sat, 20 Feb 2010 17:50:23 GMT Server: Apache P3P: CP="CAO OUR" Set-Cookie: PHPSESSID=51a3af58b34fafc27f3317b70e05fa17; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Location: / Content-Length: 0 Connection: close Content-Type: text/html
Also so langsam geht mir mein Latein langsam aus !?
Danke schonmal
-
Die Header sagen da eigentlich alles aus.
Der Inhalt ist lt. Server temporär unter anderer Adresse verfügbar(HTTP-Status 302), und zwar unter / (siehe Location-Header)
-
Okay, danke
Ähnliche Themen
-
externes PHP-Script ausführen (CSIM, JpGraph)
Von Paula im Forum PHPAntworten: 0Letzter Beitrag: 16.09.05, 10:52 -
Externes Programm in eigenem Fenster ausführen
Von jokey2 im Forum VisualStudio & MFCAntworten: 0Letzter Beitrag: 18.05.05, 10:06 -
Externes Programm ausführen
Von rettich im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 3Letzter Beitrag: 27.04.05, 15:54 -
Anfänger-Cookie-Problem == Cookie speichern & auslesen
Von altox-de im Forum PHPAntworten: 12Letzter Beitrag: 12.09.04, 12:30 -
externes bild holen und speichern
Von ultrakollega im Forum PHPAntworten: 4Letzter Beitrag: 26.03.03, 14:15





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren