スポンサーリンク

このドキュメントの内容は、以下の通りです。

HTTP Request Body を圧縮して、データ転送量を減らそうと思い、gzipでデータを圧縮してみました。

plain.txt


適当にテキストを入れたファイルを作成します。

request.php


request.php は、 HTTP Request を送信するためのスクリプトです。
データを圧縮して、 handler.php に curl で投げます。

<?php
// リクエストデータを読み込む
$request_body = file_get_contents ('./plain.txt');
error_log (strlen ($request_body) );

// リクエストデータを gzip する
$request_body = gzencode ($request_body);

// HTTP リクエストの HTTP Header に、コンテンツの長さとエンコーディング gzipをセットする。
$headers = array (
	'Content-Length' => strlen ($request_body),
	'Content-Encoding' => 'gzip',

);

var_dump ($headers);

$curl = curl_init ("http://localhost/handler.php");

curl_setopt ($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt ($curl, CURLOPT_POSTFIELDS, $request_body);
curl_exec ($curl);
curl_close ($curl);
?>

handler.php


request.php の圧縮データを受信して、error log に受信データの内容を出力するだけのプログラムです。

<?php
error_log ('handler.php');

// Request Body を受け取ります。
$data = file_get_contents("php://input");

// デコード前のデータサイズなどを出力します。
error_log ("Before decode");
error_log (strlen ($data));
error_log ($data);

// Request Body を gunzip します
$plain = gzdecode ($data);

// gunzip したデータをエラーログに出力します。
error_log ("After decode");
error_log ( strlen ($plain) );
error_log ( $plain );
?>

実行例


% php request.php
521
array(2) {
	["Content-Length"]=>
		int(34)
		["Content-Encoding"]=>
		string(4) "gzip"
}

Apache のエラーログ出力

% tail -f /var/log/httpd-error.log
[Fri Nov 30 12:06:20 2012] [error] [client 127.0.0.1] handler.php
[Fri Nov 30 12:06:20 2012] [error] [client 127.0.0.1] Before decode
[Fri Nov 30 12:06:20 2012] [error] [client 127.0.0.1] 34
[Fri Nov 30 12:06:20 2012] [error] [client 127.0.0.1] \x1f\x8b\b
[Fri Nov 30 12:06:20 2012] [error] [client 127.0.0.1] After decode
[Fri Nov 30 12:06:20 2012] [error] [client 127.0.0.1] 521
[Fri Nov 30 12:06:20 2012] [error] [client 127.0.0.1]
FreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\nFreeBSD\n\n


という感じで、データを圧縮して、送信できます。

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

はてなの人気のブックマーク

スポンサーリンク
 

過去ログ

2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー