phpでアクセス先のphpにPOSTでバイナリデータを送信したいです
Client.php → Server.php へデータをPOSTでデータを送信したいです。
送信するデータは AAA=1とBBB=2とファイルから読み込んだバイナリデータです。
その際、Wiresharkで送信データを見る時、「bina.bin(中身のバイナリはFB EE FB EFとします)と同じバイナリデータが表示されていてほしいです。formは使えません。
ver1のClient.phpのプログラムを示します。
// 送信データファイル読み込み
$SendContents = file_get_contents("C:/xampp/htdocs/bina.bin");
//POSTデータ
$data = array(
"AAA" => "1",
"BBB" => "2",
"BinData" => $SendContents
);
$data = http_build_query($data, "", "&");
$header = array(
"Content-Type: application/x-www-form-urlencoded",
"Content-Length: ".strlen($data)
);
$context = array(
"http" => array(
"method" => "POST",
"header" => implode("\r\n", $header),
"content" => $data
)
);
// アクセスする先
$url = "http://xxxxxxxxx/Server.php";
file_get_contents($url, false, stream_context_create($context));
上記のコードでは%エンコードされているようでして、Wiresharkに「FB EE FB EF」のデータが出ませんでした。
ver2のClient.phpのプログラムを示します。
$SendContents = file_get_contents("C:/xampp/htdocs/bina.bin");
//POSTデータ
$data = array(
"AAA" => "1",
"BBB" => "2",
"BinData" => "$SendContents"
);
$header = "Content-Type: application/octet-stream";
$opts = array(
'http' => array(
'method' => 'POST',
'header' => $header,
'content' => $data,//←直接"$SendContents"を入れると上手くいく
)
);
// アクセスする先
$url = "http://xxxxxxxxx/Server.php";
file_get_contents($url, false, stream_context_create($opts));
ver2のコードですと、上手く送信ができません。
'content' => $SendContents にするとWiresharkにはバイナリデータ「FB EE FB EF」が表示されますが、POSTで AAA=1 と BBB=2も送信したいと思っております。
ここからどうすれば良いかご教授願いたいです。
宜しくお願い致します。
xampp
Apache
php
Wireshark
追記
サーバーのプログラムを示します。
echo $_POST["AAA"];
echo $_POST["BBB"];
echo $_POST["$data"];
です