Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过命令行将POST和GET数据发送到Perl CGI脚本?_Perl_Command Line_Post_Cgi_Get - Fatal编程技术网

如何通过命令行将POST和GET数据发送到Perl CGI脚本?

如何通过命令行将POST和GET数据发送到Perl CGI脚本?,perl,command-line,post,cgi,get,Perl,Command Line,Post,Cgi,Get,我试图通过命令行参数发送get或post。也就是说,在通过浏览器进行测试之前,在命令行中测试脚本(服务器有问题)。我试着在网上搜索,我想我可能使用了不正确的术语,因为我什么都没有得到。我知道这是可能的,因为我看到有人这么做。我只是不记得是怎么做到的 谢谢!:) 是的,可以从命令行绕过服务器执行此操作。本页解释了所有内容:(特别是该页的第6项)。在此,我引述最重要的部分: 使用 方法,只需设置 查询字符串环境变量 因此。如果您使用的是Windows, 您可以使用以下命令 运行前在DOS窗口中的行

我试图通过命令行参数发送get或post。也就是说,在通过浏览器进行测试之前,在命令行中测试脚本(服务器有问题)。我试着在网上搜索,我想我可能使用了不正确的术语,因为我什么都没有得到。我知道这是可能的,因为我看到有人这么做。我只是不记得是怎么做到的


谢谢!:)

是的,可以从命令行绕过服务器执行此操作。本页解释了所有内容:(特别是该页的第6项)。在此,我引述最重要的部分:

使用 方法,只需设置 查询字符串环境变量 因此。如果您使用的是Windows, 您可以使用以下命令 运行前在DOS窗口中的行 同一窗口中的脚本:

设置查询字符串=收件人=John@Doe.com&Fullname=M+Name

使用 POST方法,将下面的行放入 名为testinput.txt的文本文件

接受者=John@Doe.com&Fullname=M+Name

然后将该文件作为输入重定向到 剧本。在Unix系统上以及 在Windows的MSDOS提示下,您可以 这样做:

perl-w scriptname.pl 然后,您的脚本将收到该消息 输入,就好像它是由 网站上的表格。检查错误 perl向 帮助您跟踪中的问题 剧本


您使用的是标准CGI模块吗

例如,使用以下程序(注意
使用CGI
的参数中的
-debug

您可以在命令行上输入它的参数:

$ ./prog.cgi foo=bar baz=quux Content-type: text/plain foo => bar baz => quux $./prog.cgi foo=bar baz=qux 内容类型:文本/纯文本 foo=>bar baz=>qux 您也可以通过标准输入来执行此操作:

$ ./prog.cgi (offline mode: enter name=value pairs on standard input; press ^D or ^Z when done) foo=bar baz=quux ^D Content-type: text/plain foo => bar baz => quux
 #!/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
美元/prog.cgi (脱机模式:在标准输入上输入名称=值对;完成后按^D或^Z) foo=bar baz=qux ^D 内容类型:文本/纯文本 foo=>bar
baz=>qux附带了现成的脚本,可以从命令行使用。检查系统中的
GET
POST
脚本。

要从命令行测试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数据:

$ ./prog.cgi (offline mode: enter name=value pairs on standard input; press ^D or ^Z when done) foo=bar baz=quux ^D Content-type: text/plain foo => bar baz => quux
 #!/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
#/bin/bash
导出内容长度=$(perl-e“print-sq/post\u data/”);
导出HTTP_COOKIE=。。。
导出HTTP_HOST=test.example.com
导出HTTP_REFERER=。。。
导出HTTP\u用户\u代理=。。。
导出路径\u信息=。。。
导出查询字符串=$(cat查询字符串);
导出请求\方法=POST
perl program.cgi

您可以根据需要进行修改,每次您想要测试程序时,都可以更改查询字符串或post数据文件中的数据。如果您不想在shell脚本中执行此操作,那么制作包装器Perl脚本也同样容易。

在Windows中,您可以使用VBScript编写一个命令行util,该命令行util调用MS XML库:

Dim XMLHttp : Set XMLHttp = CreateObject("Microsoft.XMLHTTP")
On Error Resume Next

strIPAddress = WScript.Arguments(0)
strMACAddress = WScript.Arguments(1)
strSubnetMask = WScript.Arguments(2)

On Error Goto 0

WScript.Echo "Attempting to wake host " & strIPAddress & " on NIC " & strMACAddress &
"using netmask " & strSubnetMask

strGetUrl = http://wolService/WolService/WolService.asmx/WakeBroadcast?hostIP=" &
strIPAddress & "&macAddress=" & strMACAddress & "&subnetMask=" & strSubnetMask

XMLHttp.Open "GET", strGetUrl, False
XMLHttp.Send ""

WScript.Echo XMLHttp.ResponseText

编辑:此脚本发送HTTP请求,可以从命令行使用。我被“如何通过命令行向Perl CGI脚本发送POST和获取数据”这一问题弄糊涂了,并认为这是关于从未指定的客户端操作系统通过命令行向Perl CGI脚本发送POST和获取数据的问题。

以前的讨论,但我一直在寻找同样的答案——所以对于那些追随我的人来说——这就是我发现的

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.

要提供cgi脚本发布数据,请执行以下操作:

$ echo -n 'a=b;c=d' | REQUEST_METHOD=POST CONTENT_LENGTH=999 perl index.cgi
要提供cgi脚本以获取数据,请执行以下操作:

$ perl index.cgi 'a=b;c=d'

如果您不想更改perl脚本,可以至少设置两个环境变量来调用它,其他人已经提到过。要模拟GET请求,请执行以下操作:

shell$ QUERY_STRING=limit=20 REQUEST_METHOD=GET ./events_html.pl

这是www.myserver.org/events_html.pl?limit=20的控制台快捷方式。作为参考,环境变量/标准输入方法适用于任何CGI应用程序,无论是Perl还是其他应用程序。这个建议缺失了很多,更不用说它的示例命令行没有工作的希望。这是另一回事。他想从命令行(没有服务器)运行一个CGI脚本来测试它。他想在命令行上运行一个脚本来测试它。没有服务器。