fsockopen: 301 Weiterleitung und location entspricht der abgefragten URL

ZodiacXP

Erfahrenes Mitglied
Mit meinem Skript teste ich zur Zeit mehrere Seiten und nun ist etwas komisches erschienen.

Zunächst ein Teil vom Skript (einfache Abfrage einer Ressource):
PHP:
$this->url = parse_url($url);
$fp = fsockopen($this->url["host"], 80, $errno, $errstr, 30);
		
// Send request
fwrite ($fp,
	"GET " . $this->url["path"] . " HTTP/1.1\r\n".
	"Host: " . $this->url["host"] . "\r\n".
	"Accept-Encoding: deflate, gzip, x-gzip, identity\r\n" .
	"Connection: Close\r\n\r\n"
);
		
// fetch incoming data
$result = "";
while (!feof($fp))
{
	$result .= fgets($fp);
}

Ein Auszug aus der Antwort (teilweise durch % "zensiert"):
HTTP/1.1 301 Moved Permanently
Location: http://%%%/
Content-Encoding: gzip
Content-Length: 20
Connection: close
Content-Type: text/html; charset=UTF-8

Hierbei steht nun im Location-Feld genau die Ressource, die abgefragt wurde.
Direkt im RFC 2616 nachgelesen und in "Location" sollte die neue Adresse stehen.
Allerdings schafft ein Browser es die Seite trotzdem anzuzeigen.

Wie soll ich damit umgehen?
Habe ich einen Denkfehler?


Die empfangenen 20 Bytes mittels http_inflate entpackt entsprechen einem leeren String. Keine Fehler von fsockopen in $errstr.
Die URL nenne ich zunächst mal nicht - ein Beitrag vom Schöpfer zur URL wurde heute erst geschlossen und ich denke es ist eh irrelevant.
 
Ist es vielleicht möglich, dass er deine Anfrage blockt, weil du einen unbekannten HTTP_USER_CLIENT übergibst?
 
Anders kann ich es mir auch nicht mehr vorstellen.
Wenn man Firefox immitiert dann lädt er "unendlich lange".
Scheine groß geblockt zu werden von der Gegenstelle. Obwohl es nur ein Blog ist :p
Naja, Ok. Werden so Seiten ignoriert.

Danke.
 
Die Weiterleitung enthaelt nicht zufaellig irgendwelche Parameter?

Wenn Du moechtest kannst Du mir die URL mal per PM zukommen lassen, dann schau ich mal nach ob ich was rausfinden kann.
 
Neja, heute gehts wieder. Hab Firefox / IE immitiert.
Wohl temporär geblockt, wegen fehlendem User-Agent. Was ein crap.

Im Moment hänge ich dabei fest den Inhalt von http://layer-ads.de/ia3-66307.js zu erreichen. Aus der Anfrage (s. oben) eine Funktion gemacht und "quasi rekursiv" die Weiterleitung beachtet.

Aber man wird endlos weitergeleitet:
usw...

Es kommt jedesmal lediglich folgender Header an (um unwichtiges gekürzt):
HTTP/1.1 302 Found
Cache-Control: post-check=0, pre-check=0
Cache-Control: private
Pragma: no-cache
Location: http://layer-ads.de/ia3-66307-dbabd171a3d7ff38799524129976b1d0.js
Content-Length: 0
Server: bash-httpd 0.02

Zur Zeit denke ich das es damit zusammenhängt, dass ich keine Cookies gesendet habe. Dafür würde ich aber gerne mal ein Set-Cookie empfangen :p - was nicht passiert. Auch hier schafft ein Browser es wieder wunderbar.

Dies ist meine Anfrage:
GET /ia3-66307.js HTTP/1.1
Host: layer-ads.de
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml
Accept-Encoding: deflate, gzip, x-gzip, identity
Referrer: http://www.layer-ads.de/
Connection: Close

Was soll denn das? Das ist doch irgendwie... nÄ ^ ^
 
Zuletzt bearbeitet:
So, hab grad mal mit der von Dir angegebenen URL probiert.

Ich krieg eine Weiterleitung und anschliessend krieg ich ein Script und auch Cookies.
Hier mal die Header.
Erste Anfrage:
Code:
Array
 (
 [raw] => HTTP/1.1 302 Found
 Connection: close
 Cache-Control: post-check=0, pre-check=0
 Cache-Control: private
 Last-Modified: Sun, 15 Mar 2009 04:23:45 GMT
 Expires: Thu, 21 Jul 1977 07:30:00 GMT
 Pragma: no-cache
 Location: http://layer-ads.de/ia3-66307-ad35f6260e0265597265eeac25b50602.js
 Content-type: text/html
 Content-Length: 0
 Date: Sun, 15 Mar 2009 04:23:45 GMT
 Server: bash-httpd 0.02
 
 [httpversion] => 1.1
 [httpcode] => 302
 [httpstatus] => Found
 [server] => bash-httpd 0.02
 [contentlength] => 0
 [location] => Array
 (
 [uri] => http://layer-ads.de/ia3-66307-ad35f6260e0265597265eeac25b50602.js
 )
 
 )
Zweite Anfrage:
Code:
Array
 (
 [raw] => HTTP/1.1 200 OK
 Connection: close
 Transfer-Encoding: chunked
 Cache-Control: post-check=0, pre-check=0
 Cache-Control: private
 Last-Modified: Sun, 15 Mar 2009 04:23:46 GMT
 Expires: Thu, 21 Jul 1977 07:30:00 GMT
 Pragma: no-cache
 P3P: policyref="http://layer-ads.de/w3c/p3p.xml", CP="NOI CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV"
 Content-Type: text/javascript
 Set-Cookie: la_cookie_style3=1237091026; path=/; domain=.layer-ads.de
 Set-Cookie: la_cookie=true; expires=Thu, 14-May-2009 04:23:46 GMT; path=/; domain=.layer-ads.de
 Set-Cookie: la_dbcluster=3; path=/; domain=.layer-ads.de
 Date: Sun, 15 Mar 2009 04:23:46 GMT
 Server: bash-httpd 0.02
 
 [httpversion] => 1.1
 [httpcode] => 200
 [httpstatus] => OK
 [server] => bash-httpd 0.02
 [contenttype] => text/javascript
 [cookies] => Array
 (
 [0] => Array
 (
 [name] => la_cookie_style3
 [value] => 1237091026
 [path] => /
 [domain] => .layer-ads.de
 [secure] => 
 [httponly] => 
 )
 
 [1] => Array
 (
 [name] => la_cookie
 [value] => true
 [expirydate] => Array
 (
 [string] => Thu, 14-May-2009 04:23:46 GMT
 [timestamp] => 1242275026
 )
 
 [path] => /
 [domain] => .layer-ads.de
 [secure] => 
 [httponly] => 
 )
 
 [2] => Array
 (
 [name] => la_dbcluster
 [value] => 3
 [path] => /
 [domain] => .layer-ads.de
 [secure] => 
 [httponly] => 
 )
 
 )
 
 )

Und der Content sieht dann so aus:
HTML:
<!--

/*===============================================================================*\
||###############################################################################||
||#		  This script is part of http://www.layer-ads.de		#||
||#	      (c) 2005-2007 Oliver Sperke - All rights reserved			#||
||###############################################################################||
\*===============================================================================*/

// If you want to know, if the user uses adblock, check if this variable is defined
var spScriptLoaded = true;

// Source protected (No campaign found)

//-->
 
HA! :D
Hab deine Klasse dazu auch mal verwendet und als es dann übersichtlicher wurde:
PHP:
$http = new httpconnection("layer-ads.de");
$data = $http->get("/ia3-66307.js");
$data = $http->get($data["head"]["location"]["uri"]);
dachte ich mir: "Der Server mag die URI mit Schema und Host nicht!" :rolleyes:

Komm mir grad wie ein dummer Anfänger vor. Weil RFC2616 sagt:
http://tools.ietf.org/html/rfc2616#page-37 hat gesagt.:
To allow for transition to absoluteURIs in all requests in future versions of HTTP, all HTTP/1.1 servers MUST accept the absoluteURI form in requests, even though HTTP/1.1 clients will only generate them in requests to proxies.

Naja, man muss auf alles achten ^ ^
Danke für die Hilfe!
 
Zuletzt bearbeitet:
Zurück