2009-09-22 41 views
5

生のhttpパケットをウェブサーバに送信し、その応答を受信したいが、それを行う方法が見つからない。私はソケットとinexperiancedと私が見つけたすべてのリンクはUDPパケットを送信するソケットを使用しています。どんな助けも素晴らしいだろう。PHP Raw HTTPパケットを送信する方法

+0

@Ozzy:note - HTTPはUDP(パケット)ではなくTCP(ストリーム)を使用します。 –

+0

aa私はthxを参照してください:) – Ozzy

+0

なぜHTTPを実装しますか?まともなチャンスがあります。あなたが望むことをcURLが行うので、あなたは車輪を再構築する必要はありません。 – outis

答えて

6

fsockopen manual pageからこの単純な例を見てみましょう:サーバーへの接続がfsockpenで確立され

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

を。 $outは、frwiteで送信されるHTTPリクエストを保持します。 HTTP応答はfgetsで読み取られます。あなたが持っている(以上、単純な、使用カールを取得するために

<?php 

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

?> 

<?php 

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

?> 

:あなたがしたいすべてがGETリクエストを実行し、レスポンスのボディを受け取っている場合

+1

それは私が必要としていたものです。私はパケットのスプーフィングthoへの私のアプローチを再考する必要があると思う:S – Ozzy

3

は、ファイルの機能のほとんどが使用してURLをサポートphpにコンパイルする)。カールすると、POSTやHEAD要求を行うことができます。また、さまざまなヘッダーを設定することもできます。

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

$html = curl_exec($ch); 

?> 
+0

それはラッパーの実装と呼ばれる... Ozzy *生* httpのためにしかし、それを言っている... HTTPについて生の何もありません...どのような立場から見ているかによって異なります! –

2

クライアント側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); 

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