3

私は、OS に組み込み Linux を使用し、Web サーバーにBoaを使用する開発作業を行っています。CGI スクリプトに投稿し、フォーム データを処理し、返信する Web ページがあります。私の開発環境は Ubuntu で、すべて正常に動作しましたが、コードを組み込み Linux に移植すると、CGI モジュールがインスタンス化されませんでした (少なくともインスタンス化されていないようです)。これは私のコードの一部を取り除いたものです。print ステートメントは、初期化されていない変数について不平を言っています。

use CGI;

use strict;
use warnings;

my $cgiObj = CGI->new();

print $cgiObj->param('wlanPort');

繰り返しますが、これは私の開発環境では問題なく動作しますが、組み込み環境では失敗します。CGI.pm がインストールされ、CGI->new() コマンドで生成されるエラーはありません。フォーム データが送信されていることも確認しましたが、明らかに、Perl スクリプトによって受信されていることは保証できません。

これは Boa の設定の問題であると感じており、それについては次に調べます。私はPerlにかなり慣れていないので、他に何をすべきかわかりません。何か案は?

編集: 間違いなく、Boa の設定の問題ではありません。まだ調べ中です。

更新: コードを次のように簡略化しました。

#!/usr/bin/perl
use CGI qw(:standard);
$data = param('wlanPort') || '<i>(No Input)</i>';
print header;                            
print <<END; 
<title>Echoing user input</title>
<p>wlanPort: $data</p>           
END  

予想通り、印刷されます(入力なし)

ファイルのアップロード機能が必要で、「POST」メソッドを使用しているため、フォームが enctype="multipart/form-data" であることも指摘しておく必要があります。

HttpFox プラグインを使用して投稿データを検査し、wlanPort 値を確認しました。

-----------------------------132407047814270795471206851178 Content-Disposition: フォームデータ。name="wlanPort"

eth1

ということで、ほぼ間違いなく送られてきました…

更新 2: Ubuntu ラップトップの組み込みシステムで使用されているのと同じバージョンの Perl と Boa をインストールしました。同じ結果であるデバイスではなく、ラップトップで動作します。Boa と (Micro) Perl をデバイス上で構築する方法と Ubuntu で構築する方法以外のすべての可能性を使い果たしたと雇用主に伝えました。

4

2 に答える 2

1

CGIは美しくシンプルなプロトコルであり、あなたの質問に直接答えることはできませんが、問題を切り分けるのに役立ついくつかのテクニックを提案することができます。

フォームがPOST経由で送信されている場合、そのフォームのコンテンツは、スクリプトが取得しているHTTPリクエストのコンテンツにURLエンコードされた文字列として表示されます。CGIモジュールをまったく使用しなくても、STDINからのリクエストを読み取ることができるはずです。

my $request = "";
while (<STDIN>) {
   $request .= $_;
}

if (open my $out, ">>/tmp/myapp.log") {
    print $out $request;
    close $out;   
}

次に、/ tmp / myapp.logを調べて、自分が思っているリクエストからすべての情報を取得しているかどうかを確認できます。

完全を期すために、フォームがGETを介して送信する場合、引数は環境変数QUERY_STRINGにあります。これは、Perlで$ENV{'QUERY_STRING'}を使用して確認できます。

CGIのオブジェクトインターフェイスと機能インターフェイスがリクエストを解析する方法に違いはありません。私はboaに精通していませんが、基本的なCGIプロトコルを破ることは想像できません。

一般的な問題は、フォームパラメータに1つの名前を付け、CGIスクリプトで別のパラメータ名を探していることです。それはいつも笑いです。

頑張って、これがいくつかの助けになることを願っています。

于 2011-08-19T15:49:20.187 に答える