質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

6564閲覧

phpでアクセス先のphpにPOSTでバイナリデータを送信したいです

g1mkt

総合スコア15

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/11/24 15:01

編集2016/11/24 23:21

###前提・実現したいこと
Client.php → Server.php へデータをPOSTでデータを送信したいです。
送信するデータは AAA=1とBBB=2とファイルから読み込んだバイナリデータです。
その際、Wiresharkで送信データを見る時、「bina.bin(中身のバイナリはFB EE FB EFとします)と同じバイナリデータが表示されていてほしいです。formは使えません。

ver1のClient.phpのプログラムを示します。

php

1// 送信データファイル読み込み 2$SendContents = file_get_contents("C:/xampp/htdocs/bina.bin"); 3//POSTデータ 4$data = array( 5 "AAA" => "1", 6 "BBB" => "2", 7 "BinData" => $SendContents 8 ); 9$data = http_build_query($data, "", "&"); 10$header = array( 11 "Content-Type: application/x-www-form-urlencoded", 12 "Content-Length: ".strlen($data) 13); 14$context = array( 15 "http" => array( 16 "method" => "POST", 17 "header" => implode("\r\n", $header), 18 "content" => $data 19 ) 20); 21// アクセスする先 22$url = "http://xxxxxxxxx/Server.php"; 23file_get_contents($url, false, stream_context_create($context));

上記のコードでは%エンコードされているようでして、Wiresharkに「FB EE FB EF」のデータが出ませんでした。

ver2のClient.phpのプログラムを示します。

php

1$SendContents = file_get_contents("C:/xampp/htdocs/bina.bin"); 2//POSTデータ 3$data = array( 4 "AAA" => "1", 5 "BBB" => "2", 6 "BinData" => "$SendContents" 7 ); 8$header = "Content-Type: application/octet-stream"; 9$opts = array( 10 'http' => array( 11 'method' => 'POST', 12 'header' => $header, 13 'content' => $data,//←直接"$SendContents"を入れると上手くいく 14 ) 15 ); 16// アクセスする先 17$url = "http://xxxxxxxxx/Server.php"; 18file_get_contents($url, false, stream_context_create($opts));

ver2のコードですと、上手く送信ができません。
'content' => "$SendContents" にするとWiresharkにはバイナリデータ「FB EE FB EF」が表示されますが、POSTで AAA=1 と BBB=2も送信したいと思っております。
ここからどうすれば良いかご教授願いたいです。
宜しくお願い致します。

###補足情報(言語/FW/ツール等のバージョンなど)
xampp
Apache
php
Wireshark
###追記###
サーバーのプログラムを示します。
echo $_POST["AAA"];
echo $_POST["BBB"];
echo $_POST["$data"];
です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

g1mkt

2016/11/26 04:57

zico様 ご回答有難うございます。ストリームを使用してみて一回作ってみようと思います。有難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問