Seite 1 von 1

Url Aufrufen

Verfasst: 10.11.2005, 10:36
von pebosi
Hi,

ich möchte bei einem Projekt (PHP)
folgende URL aufrufen:
https://www.google.com/webmasters/sitemaps/ping?
sitemap=https://domain.de/map.xml
(eine Zeile)

Wie kann ich das "versteckt" öffnen...allerdings ohne PEAR...

Verfasst:
von

Url Aufrufen

Verfasst: 10.11.2005, 10:40
von Bauchladen
https://sourceforge.net/projects/snoopy/

Beispiel

Code: Alles auswählen

$client = new Snoopy();
$client->agent = 'MeinHTTPClient;
$client->read_timeout = 20; // bei proxies hoeher
$client->use_gzip = false;
@$client->fetch($url);

Url Aufrufen

Verfasst: 10.11.2005, 12:41
von pebosi
ah danke werde das mal testen, gibt es vielleicht eine möglichkeit ohne klasse?

Verfasst:
von

Url Aufrufen

Verfasst: 10.11.2005, 14:31
von pebosi
so habs jetzt mal eingebaut, ist ja ein super teil... hab mir dann mal den Status ausgeben lassen den der Google Server mit zurückgibt, dieser ist 0, das sollte doch heissen das die Sitemap übermittelt wurde oder?

Url Aufrufen

Verfasst: 10.11.2005, 23:59
von Babelfisch
Der HTTP Statuscode sollte eher 200 sein. Mach mal das @ vor der letzten Zeile weg, vielleicht wird ja eine Fehlermeldung ausgegeben.

Ohne Snoopy ist es übrigens auch nicht wirklich schwerer:

Code: Alles auswählen

if ($fp = fsockopen ('www.google.com', 80, $errno, $errstr, 30)) {

	fputs ($fp, "GET /webmasters/sitemaps/ping?sitemap=http://example.com/map.xml HTTP/1.0\r\n\r\n");
	fputs($fp, "Host: www.google.com\r\n");
	fputs($fp, "Connection: close\r\n\r\n");

   while (!feof($fp)) {
       echo fgets($fp,128);
   }

   fclose($fp);

}

Verfasst: 11.11.2005, 01:39
von tobsn
readfile( 'url' );

8)

Url Aufrufen

Verfasst: 11.11.2005, 08:42
von Bauchladen
Solange es keine Redirects gibt und man keine HTTP Fehlercodes braucht. Irgendwann wundert man sich dann warum das Skript nicht mehr geht und merkt dann 3 Threads und 7 Tage später dass man das doch gleich von Anfang an richtig hätte machen sollen.

Gruss,

Bauchladen

ps: `wget $url` # ;) .. macht auch redirects!

Re: Url Aufrufen

Verfasst: 11.11.2005, 10:44
von Babelfisch
Bauchladen hat geschrieben:Solange es keine Redirects gibt und man keine HTTP Fehlercodes braucht.
Den Statuscode kann man auch relativ leicht ermitteln und ein Redirect ist jetzt auch nicht so die Hürde. Ich hab hier mal schnell eine Funktion dafür zusammengezimmert:

Code: Alles auswählen

function get_url($url, &$http_status, $count = 1) {

	$url_parts = parse_url($url);
	
	$port = (isset($url_parts['port'])) ? $url_parts['port'] : 80;
	$query = (isset($url_parts['query'])) ? '?'.$url_parts['query'] : '';
	
	if ($fp = @fsockopen($url_parts['host'], $port, $errno, $errstr, 30)) {

		fputs($fp, 'GET '.$url_parts['path'].$query." HTTP/1.0\r\n");
		fputs($fp, 'Host: '.$url_parts['host']."\r\n");
		fputs($fp, "User-Agent: PHP\r\n");
		fputs($fp, "Connection: close\r\n\r\n");

		$in_body = FALSE;
		$body = '';

		while (!feof($fp)) {
	
			$line = fgets($fp, 128);
			
			if ($in_body) {
				
				$body .= $line;
			
			}	elseif (preg_match('=HTTP/1\.[1|0]\s([0-9]{3})=si', $line, $match)) {
	
				$http_status = $match[1];
	
			} elseif (preg_match('=Location:(.*)=si', $line, $match)) {
	
				$http_location = trim($match[1]);
	
			} elseif ($line == "\r\n") {
			
				$in_body = TRUE;
			
			}
	
		}
	
		fclose($fp);
		
		if (in_array($http_status, array(301, 302, 303, 307))) {

			if ($count > 20) {

				print('Fehler: Redirect Limit überschritten');

				return FALSE;

			} elseif (!empty($http_location)) {

				return get_url($http_location, $http_status, $count+1);

			}
		
		} elseif (in_array($http_status, array(200, 201, 202, 204, 205))) {

			return $body;

		} else {

			return FALSE;

		}

	} else {

		$http_status = -1;

		return FALSE;

	}

}

if ($content = get_url('http://w3.org/', $status)) {

  print($content);

} else {

  print('Fehler: '.$status);

}
Ist jetzt nicht groß getestet, sollte aber eigentlich funktionieren.
Bauchladen hat geschrieben:Irgendwann wundert man sich dann warum das Skript nicht mehr geht und merkt dann 3 Threads und 7 Tage später dass man das doch gleich von Anfang an richtig hätte machen sollen.
Dann fehlt in deinem Beispiel aber auch noch eine rudimentäre Fehlerüberprüfung. :wink:

Re: Url Aufrufen

Verfasst: 11.11.2005, 10:55
von Bauchladen
Babelfisch hat geschrieben: Den Statuscode kann man auch relativ leicht ermitteln und ein Redirect ist jetzt auch nicht so die Hürde. Ich hab hier mal schnell eine Funktion dafür zusammengezimmert:

Code: Alles auswählen

function get_url($url, &$http_status, $count = 1) {
...
Ist jetzt nicht groß getestet, sollte aber eigentlich funktionieren.
Wow klasse. Warum auch bereits getesteten und probaten Code (der zudem nahezu 100% Standard konform ist) Reusen wenn man sich schnell mal eben selbst einen Strick knüpfen kann. Dein Kunde möchte ich echt nicht sein. Sorry, aber du bist für mich ein Frickler und Eigenbrötler.
Babelfisch hat geschrieben:
Bauchladen hat geschrieben:Irgendwann wundert man sich dann warum das Skript nicht mehr geht und merkt dann 3 Threads und 7 Tage später dass man das doch gleich von Anfang an richtig hätte machen sollen.
Dann fehlt in deinem Beispiel aber auch noch eine rudimentäre Fehlerüberprüfung. :wink:
Wäre ein Einzeiler .. merkst du den Unterschied ?


Gruss

Bauchladen

Re: Url Aufrufen

Verfasst: 11.11.2005, 11:02
von Babelfisch
Bauchladen hat geschrieben:Wow klasse. Warum auch bereits getesteten und probaten Code (der zudem nahezu 100% Standard Konform ist) Reusen wenn man sich schnell mal eben selbst einen Strick knüpfen kann. Dein Kunde möchte ich echt nicht sein. Sorry, aber du bist für mich ein Frickler und Eigenbrötler.
Was du von mir hälst, ist mir eigentlich ziemlich egal und meine Kunden haben sich auch noch nie darüber beschwert, dass ich weiß, was ich programmiere.
Babelfisch hat geschrieben:Dann fehlt in deinem Beispiel aber auch noch eine rudimentäre Fehlerüberprüfung. :wink:
Bauchladen hat geschrieben:Ist ein Einzeiler .. merkst du den Unterschied ?
Tja, ein Einzeiler ohne Fehlerüberprüfung. Wie tobsn schon schrieb, hätte dafür auch readfile() oder file() augereicht. Wie war das gleich noch mal mit den Kanonen und den Spatzen?

Re: Url Aufrufen

Verfasst: 11.11.2005, 11:09
von Bauchladen
Babelfisch hat geschrieben: Tja, ein Einzeiler ohne Fehlerüberprüfung. Wie tobsn schon schrieb, hätte dafür auch readfile() oder file() augereicht. Wie war das gleich noch mal mit den Kanonen und den Spatzen?
Die Fehlerprüfung ist ein Einzeiler. Und was deine Qualifikation angeht, was meinst du warum die BigProjects der Szene auf Snoopy setzen statt das Rad nochmal neu zu erfinden ?

Re: Url Aufrufen

Verfasst: 11.11.2005, 11:43
von Babelfisch
Bauchladen hat geschrieben:Die Fehlerprüfung ist ein Einzeiler.
Ja natürlich ist das nur ein Einzeiler, genau wie bei meiner Funktion. Nur hast du in deinem Beispiel halt keine Fehlerüberprüfung gemacht.
Bauchladen hat geschrieben:Und was deine Qualifikation angeht, was meinst du warum die BigProjects der Szene auf Snoopy setzen statt das Rad nochmal neu zu erfinden ?
Die "BigProjects", da bin ich ja jetzt extrem beeindruckt.

Nicht das ich was gegen Snoopy haben. Für meinen Zwecke (siehe passender Eintrag in der Sig) reicht es aber nun mal nicht aus und wie ich schon sagte, ist es nie verkehrt wenn man weiß was man eigentlich macht. pebosi kann sich jedenfalls freuen, da er doch nun mehrere Möglichkeiten hat und sich eine aussuchen kann.