PHP How To Send Raw HTTP-Paket
Frage
Ich mag ein rohes http-Paket an einen Webserver senden und seine Antwort zu empfangen, aber ich kann nicht einen Weg, es zu tun, herauszufinden. im inexperianced mit Steckdosen und jeder Link finde ich Sockets verwendet UDP-Pakete zu senden. jede Hilfe wäre toll.
Lösung
Schauen Sie sich auf diesem einfachen Beispiel aus dem fsockopen
Manpage :
<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
Die Verbindung zum Server wird mit fsockpen
etabliert. $out
hält die HTTP-Anforderung, ist dann mit frwite
senden. Die HTTP-Antwort wird dann gelesen mit fgets
.
Andere Tipps
Wenn alles, was Sie tun möchten, ist eine GET-Anforderung durchführen und den Körper der Antwort erhalten, die meisten der Dateifunktionen unterstützen mit Urls:
<?php
$html = file_get_contents('http://google.com');
?>
<?php
$fh = fopen('http://google.com', 'r');
while (!feof($fh)) {
$html .= fread($fh);
}
fclose($fh);
?>
Für mehr als einfache GETs, verwenden curl (Sie haben es in PHP zu kompilieren). Mit curl können Sie tun, POST und HEAD-Anfragen sowie Set verschiedene Header.
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://google.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
?>
ist cURL einfacher als Implementierung Client-Seite HTTP. Alles, was Sie tun müssen, ist ein paar Optionen gesetzt und cURL übernimmt den Rest.
$curl = curl_init($URL);
curl_setopt_array($curl,
array(
CURLOPT_USERAGENT => 'Mozilla/5.0 (PLAYSTATION 3; 2.00)',
CURLOPT_HTTPAUTH => CURLAUTH_ANY,
CURLOPT_USERPWD => 'User:Password',
CURLOPT_RETURNTRANSFER => True,
CURLOPT_FOLLOWLOCATION => True
// set CURLOPT_HEADER to True if you want headers in the result.
)
);
$result = curl_exec($curl);
Wenn Sie einen Header festlegen müssen, die cURL nicht unterstützt, verwenden Sie die CURLOPT_HTTPHEADER Option, eine Reihe von zusätzlichen Header übergeben. Stellen Sie CURLOPT_HEADERFUNCTION auf einen Rückruf, wenn Sie Header analysieren müssen. Lesen Sie die Dokumentation für curl_setopt
für weitere Optionen.