Как я могу отправить данные POST и GET в CGI Perl script через командную строку?
Я пытаюсь отправить сообщение get или post через аргумент командной строки. Это тест script в командной строке, прежде чем я проведу проверку через браузер (у сервера есть проблемы). Я пробовал искать в Интернете, и я полагаю, что я, вероятно, использовал неправильную терминологию, потому что ничего не получил. Я знаю, что это возможно, потому что я видел, как кто-то это делает. Я просто не помню, как это было сделано.
Спасибо!:)
Ответы
Ответ 1
Используете ли вы стандартный модуль 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
(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
Ответ 2
Чтобы проверить программу CGI из командной строки, вы подделываете среду, которую создает сервер для программы. CGI.pm имеет специальный автономный режим, но часто мне легче его не использовать из-за дополнительной настройки, которую мне нужно сделать для всего, что обычно ожидают мои программы.
В зависимости от реализации вашего script, это включает в себя установку множества переменных среды, которые вы можете сделать из оболочки script, которая претендует на роль сервера:
#!/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. Если вы не хотите делать это в оболочке script, так же легко сделать оболочку Perl script.
Ответ 3
Старая дискуссия, но я искал те же ответы - так для тех, кто следует - вот что я узнал
RTFM! с страницы руководства CGI (и есть больше)
DEBUGGING Если вы запускаете script из командной строки или в perl отладчик, вы можете передать script список ключевых слов или параметр = значение пар в командной строке или со стандартного ввода (вам не нужно беспокоиться о том, чтобы обмануть ваш script в чтение из среды переменные). Вы можете передавать такие ключевые слова:
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.
Ответ 4
Если вы не хотите изменять perl script, вы можете вызвать его, по крайней мере, с двумя переменными окружения, как уже упоминалось ранее. Чтобы имитировать запрос GET:
shell$ QUERY_STRING=limit=20 REQUEST_METHOD=GET ./events_html.pl
Что консольный ярлык для www.myserver.org/events_html.pl?limit=20
Ответ 5
Да, это возможно сделать из командной строки, минуя ваш сервер. На этой странице объясняются все: Отладка Perl CGI (sitewizard.com) (особенно пункт 6 на этой странице). Здесь я цитирую наиболее важную часть:
Чтобы протестировать script в автономном режиме, используя GET, просто установите Переменная окружения QUERY_STRING соответственно. Если вы используете Windows, вы можете использовать следующую команду в окне DOS перед запуском script в том же окне:
установить [email protected]& Полное имя = M + Название
Чтобы протестировать script в автономном режиме, используя POST, введите строку ниже в текстовый файл с именем, скажем, testinput.txt.
[email protected]& = Полное имя М + Имя
Затем перенаправить этот файл в качестве входного script. В системах Unix, а также в командной строке Windows "MSDOS" вы можете сделайте это так:
perl -w scriptname.pl < testinput.txt
Затем ваш script получит как будто он был отправлен форме на веб-сайте. Проверьте ошибку сообщения о том, что перлы, если они есть, поможет вам отслеживать проблему в script.
Ответ 6
Чтобы предоставить данные cgi script:
$ echo -n 'a=b;c=d' | REQUEST_METHOD=POST CONTENT_LENGTH=999 perl index.cgi
Чтобы предоставить cgi script получить данные:
$ perl index.cgi 'a=b;c=d'
Ответ 7
LWP поставляется с готовыми скриптами, которые могут использоваться из командной строки. Проверьте сценарии GET
и POST
в вашей системе.
Ответ 8
В Windows вы можете использовать VBScript для записи командной строки, которая вызывает вызовы в библиотеку 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
Изменить: этот script отправляет HTTP-запросы и может использоваться из командной строки. Я запутался в вопросе "Как я могу отправить данные POST и GET в CGI Perl script через командную строку" и думал, что это связано с отправкой данных POST и GET в Perl CGI script через командную строку из неопределенной клиентской ОС.