Je veux envoyer un paquet http brut à un serveur Web et recevoir sa réponse, mais je ne peux pas trouver un moyen de le faire. Im inexpérimenté avec les sockets et chaque lien que je trouve utilise des sockets pour envoyer des paquets UDP. Toute aide est la bienvenue.PHP Comment envoyer un paquet HTTP brut
Répondre
Jetez un oeil à cet exemple simple du fsockopen
manual page:
<?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);
}
?>
La connexion au serveur est établie avec fsockpen
. $out
contient la requête HTTP qui est ensuite envoyée avec frwite
. La réponse HTTP est ensuite lue avec fgets
.
c'est exactement ce dont j'avais besoin.je pense que je dois repenser mon approche à l'usurpation de paquets tho: S – Ozzy
Si tout ce que vous voulez faire est d'effectuer une requête GET et recevoir le corps de la réponse, la plupart des fonctions de fichiers pris en charge en utilisant les urls:
<?php
$html = file_get_contents('http://google.com');
?>
<?php
$fh = fopen('http://google.com', 'r');
while (!feof($fh)) {
$html .= fread($fh);
}
fclose($fh);
?>
Pour plus de simples GETS, boucle d'utilisation (vous avez pour le compiler en php). Avec curl vous pouvez faire des requêtes POST et HEAD, ainsi que définir différents en-têtes.
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://google.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
?>
tout ce qui s'appellerait une mise en œuvre wrapper ... Ozzy regardait pour * raw * http.Mais ayant dit que ... il n'y a rien de cru sur http ... dépend de quel point son regard sur! –
cURL est plus simple que l'implémentation de HTTP côté client. Tout ce que vous avez à faire est de définir quelques options et cURL gère le reste.
$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);
Si vous devez définir un en-tête cURL ne prend pas en charge, utilisez l'option CURLOPT_HTTPHEADER, en passant un tableau d'en-têtes supplémentaires. Définissez CURLOPT_HEADERFUNCTION sur un rappel si vous devez analyser les en-têtes. Lisez les documents pour curl_setopt
pour plus d'options.
@Ozzy: note - HTTP utilise TCP (flux) et non UDP (paquets). –
aa je vois thx :) – Ozzy
Pourquoi voulez-vous implémenter HTTP? Il y a une chance décente que cURL fera ce que vous voulez afin que vous n'ayez pas à réinventer la roue. – outis