Cookie bei fsockopen() im header mitsenden

L

Lukasz

Hallo.

Ich möchte aus technischen Gründen bei fsockopen() Bilder zwischen Webseiten austauschen. Damit das funkioniert, dachte ich mir ich sende einen Cookie für den Automatischen login mit. Also will ja keinen anlgegen, oder auslesen, sondern nur meiner anderen Seite einen Cookie übergeben.

Damit will ich einen login in meine Webseite bzw. die des Mitglieder die sich für diesen Dienst anmelden werden, anbeiten. Mein Server soll dann Bilder an den anderen Server übergeben. Wunschmässig möchte ich nicht über POST oder GET Parameter gehen, da ich denke diese Methode scheint mir noch sicherer, beides zu nutzen.

Nun habe ich das Script soweit dem Server hallo zu sagen. Jetzt habe ich ein Cookie, welches ich mir aus dem Cookieverzeichnis von Win geholt habe, und will das dem Server mitgeben. Doch ich weis nicht wie. Mit set_cookie etwa`? Oder $_COOKIE['...']; Keine Ahnung wie ich den in den Header meiner Abfrage bekomme. Wenn einer bescheid weis, bite herzlichst um Anwort.
 
Hallo

wie darf ich das genau verstehen?

[raw] => HTTP/1.1 302 Found
Date: Wed, 26 Oct 2005 04:34:05 GMT
Server: Apache/2.0.55 (Unix)
Set-Cookie: PHPSESSID=2e62efe317e0e21bdf429c6ab78eb29d; 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: cookiecheck.php?sessionid=2e62efe317e0e21bdf429c6ab78eb29d
Content-Length: 0
Connection: close
Content-Type: text/html

Soweit ich verstehe erzeuge ich ein Array. Diesen sende ich mitteler header(mein array()) ab.

Also fsockopen() verbindung öffnen,
header() absetzen,
an das Ende des Protokolls scrollen`

sehe ich das so richtig`?

Wie ist es dann, setze ich den Header ab, sofern meine Verbindung steht, oder schon zuvor?

Grüsse Lukaszc!
 
Hallo Dennis!

Ich habe das heute Nacht die ganze Zeit gemacht. Nur ich frage eben, mann müsste ja in PHP einen header schon mal definieren und abesenden können. Und da in PHP ein header vor jeglicher Ausgabe (echo, print) etc statt finden sollte, dachte ich mir ich bediene mich des ob_end_start() und flush()!

Denn ich willl ja nicht individuell auf die Antwort abwarten, sondern nur diese Cookie an den anderen Webserver übermitteln.

Was mir da eben zu dem Tutorial von dir fehlt ist das logische vertändniss. Denn ich weis ja was mein Script ausgeben wird, wenn der Login funktioniert hat, wird er mir ein "okay" oder "ende" liefern.

Ich habe schon zahlreiche Beispiele probiert, die sammt alle gut funktionieren. Ich brauche aber wirklich nichts anderes wie dieses Cookie zu übetragen, und auf diese Antwort zu warten.

Wennn die dann nicht gleich "okay" ist, kann ich schon von vorne herein einen "404" falsche Verbindung etc - alle sammt unter einen nenner bringen.

Mich interessiert daher nur das Cookie zu übermitteln, und wollte mich deshalb an den header() von PHP wenden.

Obgleich ich ja nicht weis, wie ich das fertig bekomme.

Ich hoffe du verstehst mich.

Beispiel

HP1 | Server | HP2
okay| Anfrage | ende -> keine Übertragung
ende | Anfrage | ende -> keine Übertragung
ende | Anfrage | okay -> keine Übertragung
okay| Anfrage | okay -> Übertragung erfolgt

Eventuell kann ich es noch so erklären.
Stimmt Webseite 1 der Übertragung zu, hole ich mir das Bild dann einfach ab. Es geschieht jedoch nicht mehr über fsockopen(). Mit dem Bild im zwischenspeicher, melde ich mich bei HP2 an (wieder fsockopen), mit Cookieinformationen zur Übertragung. Stimmt die zu, gebe ich ihr die Bilddaten weiter. Andernfalls verfallen diese (Script Ende).

Grüsse Lukasz!
 
Zuletzt bearbeitet von einem Moderator:
Du sendest den Header ja an den Server und nicht an den Client, also wird Dir der Befehl header() ueberhaupt nicht helfen.
Du baust mittels fsockopen() eine Verbindung zum Web-Server auf und schreibst dann die Header und auch alle anderen Daten mit fwrite(), so wie es auch im Tutorial geschieht.
 
Genau das hat mir im Verständnis gefehlt. Danke!

PHP:
$host = "bla"; 
$seite = "/content.php?encoding=html&offset=0"; 
$fp = fsockopen( "$host", 80, &$errno, &$errdesc ); 
if ( ! $fp ) 
die ( "Keine Verbindung zu $host:\nFehler: $errno\nBeschreibung: $errdesc\n" ); 

$anfrage = "GET $seite HTTP/1.0\r\n"; 
$anfrage .= "Host: $host\r\n"; 
$anfrage .= "Referer: http://blabla";
//header also die Cookiedaten rein
fputs ( $fp, $anfrage ); 
while ( ! feof( $fp ) ) 
{ 
$inhalt= fread($fp, 1024); 
if ( $inhalt == "okay") {
// okay ich weis bescheid, ich kann das Bild abholen
} 
}

also hier ganz klar in die Anfrage $anfrage .= die headerdaten des Cookies rein!
 
Zuletzt bearbeitet von einem Moderator:
Probier mal Folgendes:
PHP:
<?php

	define('CRLF', chr(0x0D).chr(0x0A));
	$requestURL = 'http://example.net/content.php?encoding=html&offset=0';
	$requestMethod = 'GET';

	$parts = parse_url($requestURL);
	$fp = fsockopen($parts['host'], !empty($parts['port']) ? $parts['port'] : 80, &$errno, &$errdesc)
		or die("Keine Verbindung zu ".$parts['host'].":\nFehler: $errno\nBeschreibung: $errdesc\n");

	$headerFields = array(
		'Host' => $parts['host'],
		'Referer' => 'http://blabla'
		'Cookie' => 'Argumentbezeichner="Argumentwert"'
	);

	$request = sprintf(
		'%s %s%s %s%s',
			$requestMethod,
			$parts['path'],
			$parts['query'],
			$_SERVER['SERVER_PROTOCOL'],
			CRLF
		);
	foreach( $headerFields as $name => $value ) {
		$request .= $name.': '.$value . CRLF;
	}
	$request .= CRLF;

	fputs($fp, $request);
	$response = '';
	while( !feof($fp) ) {
		$response .= fread($fp, 1024);
	}

	// einfache Ausgabe der Antwort
	header('Content-Type: text/plain');
	echo $response;

?>
 
Ich brauche unbedingt eine Hilfe bei folgendem Problem:

Ich kann das Cookie einer ASP-Seite mittels Curl auslesen.
Nun muss ich 2 Post-Felder und das Cookie beim nächsten Request mitgeben.

Ist das nun POST oder GET?

habe schon mit Curl probiert:


PHP:
$url="http://www.bibliotheken.at/results.asp";
	
	echo $url."<br/>";

	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch,CURLOPT_COOKIEFILE,'cookies.txt');
	curl_setopt($ch,CURLOPT_COOKIEJAR,"cookies.txt");
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,120);
	curl_setopt($ch, CURLOPT_LOW_SPEED_LIMIT,   61440);
    curl_setopt($ch, CURLOPT_LOW_SPEED_TIME,    20); 
	curl_setopt($ch,CURLOPT_TIMEOUT,6580);
	curl_setopt($ch,CURLOPT_POST,1);
	curl_setopt($ch,CURLOPT_POSTFIELDS,"Stichwort=".$_POST['stichwort']."&ZST=31818001");
	//curl_setopt($ch, CURLOPT_TIMEOUT, 20);  
	curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
	//curl_setopt($ch,CURLOPT_PROXYPORT,8080);

$output = curl_exec($ch);
	$info = curl_getinfo($ch);


und mit der HTTPconnection.class.php:
PHP:
require("httpconnection.class.php");
/*$http=new httpconnection("www.bibliotheken.at");
$data=$http->post("results.asp","Stichwort=".$_POST['stichwort']."&ZST=31818001",$_SESSION['cookie'],"","","","");
echo nl2br(print_r($data['head'],true));
$output= $data['body'];
file_put_contents("test.txt",$output);
unset($http);*/
Nach dieser Aktion bekomme ich eine leere Seite.

PHP:
$http=new httpconnection("www.bibliotheken.at");
$data=$http->get("results.asp","Stichwort=".$_POST['stichwort']."&ZST=31818001",$_SESSION['cookie'],"","");
echo nl2br(print_r($data['head'],true));
echo $data['body'];
unset($http);
Nach dem bekomme ich die typische Fehlermeldung: Die Seite konnte nicht angezeigt werden...blalba

Bitte helft mir sogut ihr könnt!
Ich brauche das ganze für ein Schulprojekt und es funktioniert einfach nicht:(

DANKE!
 
Zurück