2008年12月18日

[Apache-Users 7241] Re:リクエストから、POSTパラメータを取り出す

** Apache ユーザーズメーリングリスト **
** 注意:このメールへの返信は Apache-Users へ行きます **

早速入力フィルターを追加しました。


register_hooksの部分で、

(1)を使用するとコンパイルエラーが発生します。
=================================================================================
warning: passing arg 1 of `ap_hook_create_request' from incompatible pointer type
=================================================================================

(2)を使用すると、★部分に落ちてしまいます。
hoge_filter のコーディングミスでしょうか。


static void hoge_insert_filter(request_rec *r)
{
ap_add_input_filter("BODYCHECK", NULL, r, r->connection);
}

static int hoge_filter(ap_filter_t *f,
apr_bucket_brigade *bb,
ap_input_mode_t mode,
apr_read_type_e block,
apr_off_t readbytes)
{
apr_status_t rv;
apr_bucket *b;
const char *body;
apr_size_t body_len;

rv = ap_get_brigade(f->next, bb, mode, block, readbytes);
if (rv != APR_SUCCESS)
//★
fprintf(stderr, "%s\n", "ERROR");
return rv;

APR_BRIGADE_FOREACH(b, bb) {
if (!APR_BUCKET_IS_EOS(b)) {
rv = apr_bucket_read(b, &body, &body_len, APR_BLOCK_READ);
if (rv != APR_SUCCESS) {
return rv;
}
}
}
return rv;
}

static void hoge_register_hooks(apr_pool_t *p)
{
ap_register_input_filter("BODYCHECK", hoge_filter, NULL, AP_FTYPE_CONTENT_SET);
//(1) ap_hook_create_request(hoge_insert_filter, NULL, NULL, APR_HOOK_LAST);
//(2) ap_hook_insert_filter(hoge_insert_filter, NULL, NULL, APR_HOOK_LAST);
}

> log_transactionはリクエストが読み込み終わった後に呼ばれるので、
> その中でリクエストを読もうとしたってだめです。
> POSTデータをログに書き出すと勝手に解釈してコメントすると、
> 入力フィルターでリクエストを覗いて、モジュールのどこかに保持しておいて、
> log_transactionでログに書き出せばいいと思いますよ。
>
> On Tue, 16 Dec 2008 12:00:29 +0900
> apache-users@xxxxx wrote:
>
> > ** Apache ユーザーズメーリングリスト **
> > ** 注意:このメールへの返信は Apache-Users へ行きます **
> >
> > こんにちは。
> > Apacheモジュールほぼ初心者です。
> >
> > リクエストから、POSTパラメータを取り出す
> >
> > という簡単な?ことができずに困っています。
> > CentOS 5.x
> > Apache 2.0
> > です。
> >
> > https://www.codeblog.org/blog/inoue/200612.html
> > などを参考に試行錯誤して、以下のようなコーディングに至っていますが
> > 何がおきているのか分かりません。。。
> > =================================================================
> > static int util_read(request_rec *r){
> > int rc = OK;
> >
> > if ((rc = ap_setup_client_block(r, REQUEST_CHUNKED_ERROR)) != OK) {
> > return rc;
> > }
> >
> > if (ap_should_client_block(r)) {
> > char buff[HUGE_STRING_LEN];
> > int rsize, len_read, rpos=0;
> > long length = r->remaining;
> > const char **rbuf;
> > *rbuf = (char*)apr_palloc(r->pool, length + 1);
> >
> > while ((len_read =
> > ap_get_client_block(r, buff, sizeof(buff))) > 0) {
> >
> > if ((rpos + len_read) > length) {
> > rsize = length - rpos;
> > }
> > else {
> > rsize = len_read;
> > }
> > memcpy((char*)*rbuf + rpos, buff, rsize);
> > rpos += rsize;
> > }
> >
> > fprintf(stderr, "len=%d; %s\n", rc, rbuf);
> > }
> >
> > return rc;
> > }
> >
> >
> > static int hoge_loging(request_rec *r){
> > util_read(r);
> > }
> >
> >
> > static void hoge_register_hooks(apr_pool_t *p){
> > ap_hook_log_transaction(hoge_loging, NULL, NULL, APR_HOOK_MIDDLE);
> > }
> >
> > module AP_MODULE_DECLARE_DATA hoge_module = {
> > STANDARD20_MODULE_STUFF,
> > create_dir_config, /* create per-dir config structures */
> > NULL, /* merge per-dir config structures */
> > NULL, /* create per-server config structures */
> > NULL, /* merge per-server config structures */
> > NULL, /* table of config file commands */
> > hoge_register_hooks /* register hooks */
> > };
> > =================================================================
> >
> > ログを見ると、こんな風になってます。
> > len=0; ?
> > len=0; (
> >
> > [Tue Dec 16 11:43:50 2008] [notice] child pid 21487 exit signal Aborted (6)
> >
> >
> >
> > お手本となるようなソースをご提供頂けないでしょうか。
> > すみません。。

--
入退会・変更・配送一時停止は以下へ
http://mm.apache.jp/mailman/listinfo/apache-users


投稿者 xml-rpc : 2008年12月18日 00:39
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/80169
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。