4 Stimmen

Wie erhält man den Inhalt einer Webseite ohne CURL?

Ich brauche, um den Inhalt der Webseite zu erhalten, ich kann nicht Curl verwenden, da es nicht enabled.I versucht den folgenden Code, aber es funktioniert nicht.

$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n"
  )
);

$context = stream_context_create($opts);   

$fp = fopen($_GET['url'], 'r', false, $context);
if($fp)
fpassthru($fp);
fclose($fp);
exit;

Der Code erzeugt einen Fehler

Warning: fopen(http://www.google.com/search?&q=site:www.myspace.com+-intitle:MySpaceTV+%22Todd Terje%22) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request

5voto

mr.b Punkte 4851

Können Sie altmodischen Code verwenden, wie:

$CRLF = "\r\n";
$hostname = "www.something.com";

$headers[] = "GET ".$_GET['url']." HTTP/1.1";
$headers[] = "Host: ".$hostname;
$headers[] = "Accept-language: en";
$headers[] = "Cookie: foo=bar";
$headers[] = "";

$remote = fsockopen($hostname, 80, $errno, $errstr, 5);
// a pinch of error handling here

fwrite($remote, implode($CRLF, $headers).$CRLF);

$response = '';

while ( ! feof($remote))
{
    // Get 1K from buffer
    $response .= fread($remote, 1024);
}

fclose($remote);

Aktualisierung: Das Gute an dieser Lösung ist, dass sie nicht auf fopen-Wrapper angewiesen ist.

4voto

CharlesLeaf Punkte 3191

Haben Sie bemerkt, dass zwischen Todd und Terje ein TATSÄCHLICHes Leerzeichen in Ihrer Url steht? Das könnte die Ursache für Ihr Problem sein, denn Browser kodieren es normalerweise in + o %20 .

3voto

Sarfraz Punkte 366217

Sie können die file_get_contents Funktion dafür:

$content = file_get_contents('url/filepath here');
echo $content;

Nota: Wenn Sie von einem sicheren Protokoll, z.B. https, lesen wollen, stellen Sie sicher, dass Sie die openssl Erweiterung in der php.ini aktiviert ist.

Aktualisierung:

Nach dem, was Sie sagen, vermute ich, Sie haben allow_url_fopen Einstellungen in der Datei php.ini ausgeschaltet ist, müssen Sie dies aktivieren, um von Urls lesen zu können.

Update 2:

Es sieht so aus, als ob Sie nicht die richtige URL angeben. Ich habe es gerade überprüft, wenn Sie zum Beispiel einfach folgendes eingeben www.google.com funktioniert es gut:

$url = 'http://www.google.com';
$content = file_get_contents($url);
echo $content;

1voto

dreeves Punkte 25750

Sie können auch eine URL anstelle eines Dateinamens in file_get_contents .

0voto

Andrey Punkte 57704

Sniffer wie WireShark verwenden, um den Inhalt der aktuellen Browser-Anfrage zu erhalten. Kopieren Sie sie dann und entfernen Sie eine nach der anderen, bald werden Sie minimal benötigte Header erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X