在 PHP 程式碼中解碼/解壓縮接收到的 HTTP POST 資料,請求資料來自 Java/Android 應用程式,透過 HTTP POST GZIP/DEFLATE 壓縮格式傳送。
1) 使用 Java Android 應用程式中的 DeflaterOutputStream java 類別將資料傳送到 PHP,並在 PHP 中接收,如下所示
echo gzinflate( substr($HTTP_RAW_POST_DATA,2,-4) ) . PHP_EOL . PHP_EOL;
2) 使用 Java Android 應用程式中的 GZIPOutputStream java 類別將資料傳送到 PHP,並在 PHP 程式碼中接收,如下所示
echo gzinflate( substr($HTTP_RAW_POST_DATA,10,-8) ) . PHP_EOL . PHP_EOL;
從 Java Android 端(API level 10+)以 DEFLATE 壓縮格式傳送資料
String body = "Lorem ipsum shizzle ma nizle";
URL url = new URL("http://www.url.com/postthisdata.php");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Content-encoding", "deflate");
conn.setRequestProperty("Content-type", "application/octet-stream");
DeflaterOutputStream dos = new DeflaterOutputStream(
conn.getOutputStream());
dos.write(body.getBytes());
dos.flush();
dos.close();
BufferedReader in = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String decodedString = "";
while ((decodedString = in.readLine()) != null) {
Log.e("dump",decodedString);
}
in.close();
在 PHP 端(v 5.3.1),用於解壓縮此 DEFLATE 資料的程式碼如下
echo substr($HTTP_RAW_POST_DATA,2,-4);
從 Java Android 端(API level 10+)以 GZIP 壓縮格式傳送資料
String body1 = "Lorem ipsum shizzle ma nizle";
URL url1 = new URL("http://www.url.com/postthisdata.php");
URLConnection conn1 = url1.openConnection();
conn1.setDoOutput(true);
conn1.setRequestProperty("Content-encoding", "gzip");
conn1.setRequestProperty("Content-type", "application/octet-stream");
GZIPOutputStream dos1 = new GZIPOutputStream(conn1.getOutputStream());
dos1.write(body1.getBytes());
dos1.flush();
dos1.close();
BufferedReader in1 = new BufferedReader(new InputStreamReader(
conn1.getInputStream()));
String decodedString1 = ""; // 字串 decodedString1 = ""
while ((decodedString1 = in1.readLine()) != null) { // 當 (decodedString1 = in1.readLine()) 不為 null 時
Log.e("dump",decodedString1); // 輸出錯誤訊息,標籤為 "dump",訊息為 decodedString1
}
in1.close(); // 關閉 in1
On PHP side (v 5.3.1), code for decompressing this GZIP data will be // 在 PHP 端 (版本 5.3.1),解壓縮 GZIP 資料的程式碼如下
echo substr($HTTP_RAW_POST_DATA,10,-8); // 輸出 $HTTP_RAW_POST_DATA 字串,從第 10 個字元開始,到倒數第 8 個字元
Useful PHP code for printing out compressed data using all available formats. // 使用所有可用格式輸出壓縮資料的實用 PHP 程式碼。
$data = "Lorem ipsum shizzle ma nizle"; // $data = "Lorem ipsum shizzle ma nizle"
echo "\n\n\n"; // 輸出三個換行符號
for($i=-1;$i<=9;$i++) // $i 從 -1 迴圈到 9
echo chunk_split(strtoupper(bin2hex(gzcompress($data,$i))),2," ") . PHP_EOL . PHP_EOL; // 使用 gzcompress 壓縮 $data,並以指定壓縮等級 $i 進行壓縮,然後將結果轉換為十六進位字串,再將字串以兩個字元為一組,用空格隔開,最後輸出兩個換行符號
echo "\n\n\n"; // 輸出三個換行符號
for($i=-1;$i<=9;$i++) // $i 從 -1 迴圈到 9
echo chunk_split(strtoupper(bin2hex(gzdeflate($data,$i))),2," ") . PHP_EOL . PHP_EOL; // 使用 gzdeflate 壓縮 $data (同上)
echo "\n\n\n"; // 輸出三個換行符號
for($i=-1;$i<=9;$i++) // $i 從 -1 迴圈到 9
echo chunk_split(strtoupper(bin2hex(gzencode($data,$i,FORCE_GZIP))),2," ") . PHP_EOL . PHP_EOL; // 使用 gzencode 並強制使用 GZIP 壓縮 $data (同上)
echo "\n\n\n"; // 輸出三個換行符號
for($i=-1;$i<=9;$i++) // $i 從 -1 迴圈到 9
echo chunk_split(strtoupper(bin2hex(gzencode($data,$i,FORCE_DEFLATE))),2," ") . PHP_EOL . PHP_EOL; // 使用 gzencode 並強制使用 DEFLATE 壓縮 $data (同上)
echo "\n\n\n"; // 輸出三個換行符號
Hope this helps. Please ThumbsUp if this saved you a lot of effort and time. // 希望這有幫助。如果這幫你省了很多力氣和時間,請按讚。