コマンドライン引数を使用してgetまたはpostを送信しようとしています。つまり、ブラウザでテストする前に、コマンドラインでスクリプトをテストします(サーバーに問題があります)。オンラインで検索してみましたが、何も得られなかったので、間違った用語を使っていたのではないでしょうか。私は誰かがそれをするのを見たのでこれが可能であることを知っています。私はそれがどのように行われたかを覚えていません。
ありがとう! :)
標準のCGIモジュールを使用していますか?
たとえば、次のプログラムでは(-debug
の引数にuse CGI
があることに注意してください)
#! /usr/bin/Perl
use warnings;
use strict;
use CGI qw/ :standard -debug /;
print "Content-type: text/plain\n\n",
map { $_ . " => " . param($_) . "\n" }
param;
コマンドラインでパラメータを入力します。
$ ./prog.cgi foo = bar baz = quux Content-type:text/plain foo => bar baz => quux
標準入力を介してこれを行うこともできます。
$ ./prog.cgi (オフラインモード:標準入力で名前=値のペアを入力します。完了したら^ Dまたは^ Zを押します) foo = bar baz = quux ^ D コンテンツタイプ:text/plain foo => bar baz => quux
コマンドラインからCGIプログラムをテストするには、サーバーがプログラム用に作成した環境を偽造します。 CGI.pmには特別なオフラインモードがありますが、プログラムが通常期待する他のすべてに対して行う必要のある追加のセットアップのために、使用しない方が簡単であることがよくあります。
スクリプトの実装に応じて、これには多くの環境変数の設定が含まれます。これは、サーバーになりすましたラッパースクリプトから実行できます。
#!/bin/bash
export HTTP_COOKIE=...
export HTTP_Host=test.example.com
export HTTP_REFERER=...
export HTTP_USER_AGENT=...
export PATH_INFO=
export QUERY_STRING=$(cat query_string);
export REQUEST_METHOD=GET
Perl program.cgi
POSTリクエストに対してこれを行う場合、環境はわずかに異なり、標準入力でPOSTデータを提供する必要があります:
#!/bin/bash
export CONTENT_LENGTH=$(Perl -e "print -s q/post_data/");
export HTTP_COOKIE=...
export HTTP_Host=test.example.com
export HTTP_REFERER=...
export HTTP_USER_AGENT=...
export PATH_INFO=...
export QUERY_STRING=$(cat query_string);
export REQUEST_METHOD=POST
Perl program.cgi < post_data
これは必要に応じて凝ったものにすることができ、プログラムをテストするたびに、query_stringファイルまたはpost_dataファイルのデータを変更します。シェルスクリプトでこれを実行したくない場合は、ラッパーPerlスクリプトを作成するのも同じくらい簡単です。
古い議論ですが、私は同じ答えを探していました-したがって、フォローしている人のために-これは私が見つけたものです
RTFM! CGIのマニュアルページから(その他あります)デバッグコマンドラインまたはPerlデバッガーからスクリプトを実行している場合は、コマンドラインまたは標準入力からキーワードまたはパラメーター=値のペアのリストをスクリプトに渡すことができます。 (スクリプトをだまして環境変数から読み取ることを心配する必要はありません)。次のようなキーワードを渡すことができます。
your_script.pl keyword1 keyword2 keyword3
or this:
your_script.pl keyword1+keyword2+keyword3
or this:
your_script.pl name1=value1 name2=value2
or this:
your_script.pl name1=value1&name2=value2
To turn off this feature, use the -no_debug pragma.
Perlスクリプトを変更したくない場合は、他の人がすでに述べたように、少なくとも2つの環境変数を設定して呼び出すことができます。 GETリクエストをシミュレートするには:
Shell$ QUERY_STRING=limit=20 REQUEST_METHOD=GET ./events_html.pl
これは、www.myserver.org/events_html.pl?limit = 20のコンソールショートカットです。
はい、サーバーをバイパスして、コマンドラインからこれを行うことができます。このページではすべてを説明しています: Perl CGIデバッグ(sitewizard.com) (特にそのページの項目6)。ここで私は最も重要な部分を引用します:
GETメソッドを使用してスクリプトをオフラインでテストするには、それに応じてQUERY_STRING環境変数を設定するだけです。 Windowsを使用している場合は、同じウィンドウでスクリプトを実行する前に、DOSウィンドウで次のコマンドラインを使用できます。
qUERY_STRING = receiveient = John @ Doe.com&Fullname = M + Nameを設定します
POSTメソッドを使用してスクリプトをオフラインでテストするには、以下の行をtestinput.txtなどの名前のテキストファイルに入力します。
受信者[email protected]&Fullname=M+Name
次に、そのファイルをスクリプトへの入力としてリダイレクトします。 UnixシステムおよびWindowsのMSDOSプロンプトでは、次のように実行できます。
Perl -w scriptname.pl <testinput.txt
スクリプトは、Webサイトのフォームによって送信されたかのように、その入力を受け取ります。スクリプトで問題を追跡するのに役立つように、Perlが出力するエラーメッセージを確認してください。
Cgiスクリプトにデータを投稿するには:
$ echo -n 'a=b;c=d' | REQUEST_METHOD=POST CONTENT_LENGTH=999 Perl index.cgi
Cgiスクリプトにデータを取得するには:
$ Perl index.cgi 'a=b;c=d'