Funktion get_headers über Proxy

Ich frage über die Funktion die Header Informationen von einer bestimmten URL ab. Kann ich da einen Proxy zwischen schalten, also mit ip, username und pw?
 
get_headers() liefert die Header, die der Client gesendet hat.

Hast du ein Script, was auf einem Webserver läuft und rufst das mit dem Browser auf oder ist das eine Konsolen-Anwendung?

Wenn du eine Anfrage an eine URL sendest, machst du das über einen Browser-Simulator. Entweder benutzt du Sockets oder curl. In beiden Fällen kannst du get_headers() eigentlich gar nicht einsetzen.

Kannst du mal ein bisschen Code posten, damit man sehen kann, worauf das hinausläuft?
 
Es geht eigentlich darum die Dateigröße einer externen Datei abzufragen. Normalerweise frage ich diese folgendermaßen ab:

$size = array_change_key_case(get_headers($url, 1),CASE_LOWER);
echo $size['content-length'];

Ich muss diese Abfrage jetzt allerdings über einen Proxy durchführen, weil die Datei sonst nicht erreichbar ist.
 
Zuletzt bearbeitet:
Der rest vom Script läuft bereits über cURL. Ich weiß allerdings nicht wie ich mit cURL die Header Informationen bzw. speziell die größe auslesen kann.
 
Ich habe dir doch schon den Link zu curl_getinfo() gepostet.

Hier ein kleines Beispiel:

PHP:
<?php
$curl = curl_init("http://www.domain.com/");

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_PROXY, "proxy_address");
curl_setopt($curl, CURLOPT_PROXYPORT, proxy_port);

$x = curl_exec($curl);
$infos = curl_getinfo($curl);
curl_close ($curl);

echo "<pre>";
var_dump($infos);
echo "</pre>";
?>
 
Sorry für Doppelpost: Ich habe es noch mal etwas verfeinert, und jetzt kommt die Download Size auch korrekt rüber:

PHP:
<?php
$userAgent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)';
$url = 'http://www.spiderace.com/samplefiles/testfile.zip';

$curl = curl_init($url);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_NOBODY, 1);
curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);
curl_setopt($curl, CURLOPT_PROXYPORT, 3128);
curl_setopt($curl, CURLOPT_PROXY, "217.219.97.11");
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($curl, CURLOPT_FAILONERROR, 1);


$x = curl_exec($curl);

if(!curl_errno($curl))
{
	$infos = curl_getinfo($curl);
	echo "<pre>";
	var_dump($infos);
	echo "</pre>";
}
else 
{
	echo curl_error($curl);
}

curl_close ($curl);

?>

Edit: Hier der Result:

Code:
array
  'url' => string 'http://www.spiderace.com/samplefiles/testfile.zip' (length=49)
  'content_type' => string 'application/zip' (length=15)
  'http_code' => int 200
  'header_size' => int 271
  'request_size' => int 218
  'filetime' => int -1
  'ssl_verify_result' => int 0
  'redirect_count' => int 0
  'total_time' => float 1.467
  'namelookup_time' => float 0
  'connect_time' => float 0.234
  'pretransfer_time' => float 0.234
  'size_upload' => float 0
  'size_download' => float 0
  'speed_download' => float 0
  'speed_upload' => float 0
  'download_content_length' => float 435108
  'upload_content_length' => float 0
  'starttransfer_time' => float 1.467
  'redirect_time' => float 0
  'certinfo' => 
    array
      empty
 
Bei einer kleinen Datei funktionierts. Bei einer größeren bekomm ich allerdings den Fehler:

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 16517510 bytes)
 
Zurück