Java クライアントは http post を使用してファイル ストリームをバイト ストリームに変換し、Java コード スニペットは次のとおりです。
ByteArrayEntity(outputStream.toByteArray()); inetentity(entity); if(httpclient == null){httpclient = new defaulthttpclient();
1. ストリームを取得するにはどうすればよいですか?どのインターフェースを使用すればよいでしょうか? php://input
2. バイトストリームを取得した後、それを文字列に変換するにはどうすればよいですか?クロ?開梱しますか?または何?
通常のアプリケーション層の http メソッドではなく、http データを受け入れる比較的原始的な方法だと思います。
(現在、ファイルを取得するために file(php://input) を使用しています。バイトストリーム、そして chr( ) ASCII 文字を変換してからファイルに書き込んで表示すると、文字化けしているようです)
注: バイトストリームには ASCII 文字のみが含まれており、中国語の文字は含まれていません。議論(解決策)へ
補足:
オリジナルファイル ストリームの内容は以下の通り:
launch {"primary":"-1415673003223"} 1415673003223
controller {"model":"Test Controller","primary ":"count"} 1415673003991
click {"click_name ":"テスト ボタン名","primary":"count"} 1415673004598
view {"view_name":"テスト ページ名","primary":"1415673005202"} 1415673005203
ビュー {"view_name":"テスト ページ名","prim ary" :"-1415673005795"} 1415673005795
ゲーム {"package_name":"テスト ゲーム","primary":"1415673007231"} 1415673 007231 ゲーム {" package_name":"Test Game", "primary":"-1415673008047"} 1415673008051 ファイルを保存したいだけなら
$path ="/tmp/newfile"$content = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : '';file_put_contents($path, $fileContent);
$content = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : '';//然后对$content进行字符串处理得到你需要的结构
$path ="/tmp/newfile"$content = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : '';file_put_contents($path, $fileContent);
$content = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : '';//然后对$content进行字符串处理得到你需要的结构
me が必要です。 あなたの方法を試しましたが、抽出されたコンテンツが文字化けしており、そこで行き詰まってしまいました。ご覧のとおり、Java 側では、最初にファイルを書き込むとき、ファイル ストリームを読み取るとき、バイト ストリームを変換するとき、Entity を設定するときに、文字エンコードに関する特別な処理は実行されません。では、次は文字化けの問題にどう対処するのでしょうか?
$s = file_get_contents('php://input');
$s = file_get_contents('php://input');
test.txt の内容を投稿します
あなた
$s = file_get_contents('php://input');
test.txt の内容を投稿します
mb_detect_encoding を使用しました($s, "auto") 確認すると戻り値はUTF-8になっているのですが、ファイルに保存してvimで見ると文字化けしてしまいます。 vimの問題なのでしょうか?
你
$s = file_get_contents('php://input');
file_put_contents('test.txt', base54_encode($s));
贴出 test.txt 的内容
接收到的的确是“乱码”,因为他做了 gzip 压缩
$s = 'H4sIAAAAAAAAAH3OXWuDMBgF4Ov2Z3gdJIn5UsiFjIwVnB3ald1JTFIaMLFYLIyx/z63wkZhFN6bw8vDOTraafS2u0SJGAijdYOs3G7/xiCY3OD02X3/dqrddY2qVNmqbq+adrOtu8dt07Xl80ulwMVFO04ynIPIF+mD8zLOwwBm/8tfN/9KIyEI2khkiswVghR0OV4cLJittxL3mFnIiYa9JY7mPTaYCJ4zwdwhs73jiNIeI2COOsZl/U/Xw1NZ16q6KYrXRf4kEUypSGmWYsLWg56jOa4+ktPkg57ekyJBBFEmMs44Ezz5XN3kOyCHDGbkD1zz+gslJTZeZAEAAA==';$s = base64_decode($s);echo gzdecode($s);
android_vn=16,model=LeTVX60,release_vn=TEST_RELEASE_VERSION_FOR_SAMPLE,vendor=msm8960,imei=null,ui_vn=TEST_UI_VERSION_FOR_SAMPLE,vc=0,mac=1c:3e:84:54:57:fd,udid=2b26d074a0bd4e59b2c24879686ef3dbe7155b21,channel=TEST_CHANNEL_FOR_SAMPLE,vn=null,ip=10.58.53.246launch {"primary":"1415683767687"} 1415683767687launch {"primary":"1415683906034"} 1415683906034应该是这个(解压没有出错,得到的文字完整)
$s = 'H4sIAAAAAAAAAH3OXWuDMBgF4Ov2Z3gdJIn5UsiFjIwVnB3ald1JTFIaMLFYLIyx/z63wkZhFN6bw8vDOTraafS2u0SJGAijdYOs3G7/xiCY3OD02X3/dqrddY2qVNmqbq+adrOtu8dt07Xl80ulwMVFO04ynIPIF+mD8zLOwwBm/8tfN/9KIyEI2khkiswVghR0OV4cLJittxL3mFnIiYa9JY7mPTaYCJ4zwdwhs73jiNIeI2COOsZl/U/Xw1NZ16q6KYrXRf4kEUypSGmWYsLWg56jOa4+ktPkg57ekyJBBFEmMs44Ezz5XN3kOyCHDGbkD1zz+gslJTZeZAEAAA==';$s = base64_decode($s);echo gzdecode($s);
android_vn=16,model=LeTVX60,release_vn=TEST_RELEASE_VERSION_FOR_SAMPLE,vendor=msm8960,imei=null,ui_vn=TEST_UI_VERSION_FOR_SAMPLE,vc=0,mac=1c:3e:84:54:57:fd,udid=2b26d074a0bd4e59b2c24879686ef3dbe7155b21,channel=TEST_CHANNEL_FOR_SAMPLE,vn=null,ip=10.58.53.246launch {"primary":"1415683767687"} 1415683767687launch {"primary":"1415683906034"} 1415683906034
接收到的的确是“乱码”,因为他做了 gzip 压缩
$s = 'H4sIAAAAAAAAAH3OXWuDMBgF4Ov2Z3gdJIn5UsiFjIwVnB3ald1JTFIaMLFYLIyx/z63wkZhFN6bw8vDOTraafS2u0SJGAijdYOs3G7/xiCY3OD02X3/dqrddY2qVNmqbq+adrOtu8dt07Xl80ulwMVFO04ynIPIF+mD8zLOwwBm/8tfN/9KIyEI2khkiswVghR0OV4cLJittxL3mFnIiYa9JY7mPTaYCJ4zwdwhs73jiNIeI2COOsZl/U/Xw1NZ16q6KYrXRf4kEUypSGmWYsLWg56jOa4+ktPkg57ekyJBBFEmMs44Ezz5XN3kOyCHDGbkD1zz+gslJTZeZAEAAA==';$s = base64_decode($s);echo gzdecode($s);
android_vn=16,model=LeTVX60,release_vn=TEST_RELEASE_VERSION_FOR_SAMPLE,vendor=msm8960,imei=null,ui_vn=TEST_UI_VERSION_FOR_SAMPLE,vc=0,mac=1c:3e:84:54:57:fd,udid=2b26d074a0bd4e59b2c24879686ef3dbe7155b21,channel=TEST_CHANNEL_FOR_SAMPLE,vn=null,ip=10.58.53.246launch {"primary":"1415683767687"} 1415683767687launch {"primary":"1415683906034"} 1415683906034应该是这个(解压没有出错,得到的文字完整)
接收到的的确是“乱码”,因为他做了 gzip 压缩
$s = 'H4sIAAAAAAAAAH3OXWuDMBgF4Ov2Z3gdJIn5UsiFjIwVnB3ald1JTFIaMLFYLIyx/z63wkZhFN6bw8vDOTraafS2u0SJGAijdYOs3G7/xiCY3OD02X3/dqrddY2qVNmqbq+adrOtu8dt07Xl80ulwMVFO04ynIPIF+mD8zLOwwBm/8tfN/9KIyEI2khkiswVghR0OV4cLJittxL3mFnIiYa9JY7mPTaYCJ4zwdwhs73jiNIeI2COOsZl/U/Xw1NZ16q6KYrXRf4kEUypSGmWYsLWg56jOa4+ktPkg57ekyJBBFEmMs44Ezz5XN3kOyCHDGbkD1zz+gslJTZeZAEAAA==';$s = base64_decode($s);echo gzdecode($s);
android_vn=16,model=LeTVX60,release_vn=TEST_RELEASE_VERSION_FOR_SAMPLE,vendor=msm8960,imei=null,ui_vn=TEST_UI_VERSION_FOR_SAMPLE,vc=0,mac=1c:3e:84:54:57:fd,udid=2b26d074a0bd4e59b2c24879686ef3dbe7155b21,channel=TEST_CHANNEL_FOR_SAMPLE,vn=null,ip=10.58.53.246launch {"primary":"1415683767687"} 1415683767687launch {"primary":"1415683906034"} 1415683906034应该是这个(解压没有出错,得到的文字完整)
base64 解码后的是二进制串,而你在#1补充了原始文件的样式(显然不是二进制的)
所以尝试了可能的压缩算法,不想一下就对上了
补充一下,得到的串的同两个字符是 "\x1f\x8b"
这是 gzip 的文件头标识
补充一下,得到的串的同两个字符是 "\x1f\x8b"
这是 gzip 的文件头标识