6

生のhttpパケットをWebサーバーに送信してその応答を受信したいのですが、その方法がわかりません。私はソケットに不慣れで、私が見つけたすべてのリンクはソケットを使用してudpパケットを送信します。どんな助けでも素晴らしいでしょう。

4

3 に答える 3

9

fsockopenマニュアルページからこの簡単な例を見てください:

<?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);
}
?>

サーバーへの接続は。で確立されfsockpenます。$outで送信されるHTTPリクエストを保持しますfrwite。次に、HTTP応答がで読み取られfgetsます。

于 2009-09-22T23:10:33.047 に答える
3

GET リクエストを実行してレスポンスの本文を受け取るだけであれば、ほとんどのファイル関数が URL の使用をサポートしています。

<?php

$html = file_get_contents('http://google.com');

?>

<?php

$fh = fopen('http://google.com', 'r');
while (!feof($fh)) {
    $html .= fread($fh);
}
fclose($fh);

?>

単純な GET 以外の場合は、curl を使用します (php にコンパイルする必要があります)。curl を使用すると、POST および HEAD リクエストを実行したり、さまざまなヘッダーを設定したりできます。

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://google.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$html = curl_exec($ch);

?>
于 2009-09-23T02:18:16.250 に答える
2

cURL は、クライアント側の HTTP を実装するよりも簡単です。いくつかのオプションを設定するだけで、あとは cURL が処理します。

$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);

cURL がサポートしていないヘッダーを設定する必要がある場合は、CURLOPT_HTTPHEADER オプションを使用して、追加のヘッダーの配列を渡します。ヘッダーを解析する必要がある場合は、CURLOPT_HEADERFUNCTION をコールバックに設定します。curl_setoptその他のオプションについては、ドキュメントを参照してください。

于 2009-09-23T07:20:50.880 に答える