Как я могу отправить данные POST и GET в сценарий Perl CGI через командную строку? - PullRequest
19 голосов
/ 08 февраля 2010

Я пытаюсь отправить get или post через аргумент командной строки. Это проверяет скрипт в командной строке, прежде чем я проверю через браузер (на сервере есть проблемы). Я попытался выполнить поиск в Интернете и, вероятно, использовал неверную терминологию, потому что ничего не получил. Я знаю, что это возможно, потому что я видел, как кто-то делал это. Я просто не помню, как это было сделано.

Спасибо! :)

Ответы [ 8 ]

21 голосов
/ 08 февраля 2010

Вы используете стандартный модуль 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
19 голосов
/ 08 февраля 2010

Чтобы протестировать программу 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-оболочки.

5 голосов
/ 16 декабря 2010

Старая дискуссия, но я искал те же ответы - так что для тех, кто следит - вот что я узнал

RTFM! из справочной страницы CGI (и не только) DEBUGGING Если вы запускаете скрипт из командной строки или в 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.
3 голосов
/ 19 июня 2013

Если вы не хотите изменять скрипт perl, вы можете вызвать его, как минимум, с двумя установленными переменными окружения, как уже упоминалось другими. Для имитации запроса GET:

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

Это ярлык консоли для www.myserver.org/events_html.pl?limit=20

.
1 голос
/ 08 февраля 2010

Да, это можно сделать из командной строки, минуя ваш сервер. Эта страница объясняет все: Отладка Perl CGI (sitewizard.com) (особенно пункт 6 на этой странице). Здесь я процитирую самую важную часть:

Чтобы проверить скрипт в автономном режиме, используя ПОЛУЧИТЕ метод, просто установите Переменная среды QUERY_STRING соответственно. Если вы используете Windows, вы можете использовать следующую команду строка в окне DOS перед запуском скрипт в том же окне:

установить QUERY_STRING=recipient=John@Doe.com&Fullname=M+Name

Чтобы проверить скрипт в автономном режиме, используя Метод POST, поместите строку ниже в текстовый файл с именем, скажем, testinput.txt.

recipient=John@Doe.com&Fullname=M+Name

Затем перенаправьте этот файл в качестве ввода в сценарий. В системах Unix, а также под приглашением Windows MSDOS вы можете сделать это так:

perl -w scriptname.pl

Ваш сценарий получит это вход, как если бы он был отправлен Форма на сайте. Проверьте ошибку сообщения, которые изливаются Perl, если таковые имеются, помочь вам отследить проблему в сценарий.

0 голосов
/ 29 апреля 2011

Чтобы дать данные поста скрипта cgi:

$ echo -n 'a=b;c=d' | REQUEST_METHOD=POST CONTENT_LENGTH=999 perl index.cgi

Чтобы дать сценарию cgi получить данные:

$ perl index.cgi 'a=b;c=d'
0 голосов
/ 09 февраля 2010

В 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

Редактировать: этот скрипт отправляет HTTP-запросы и может использоваться из командной строки. Я запутался в вопросе «Как я могу отправить данные POST и GET в сценарий Perl CGI через командную строку» и подумал, что речь идет об отправке данных POST и GET в сценарий Perl CGI через командную строку из неуказанной клиентской ОС.

0 голосов
/ 08 февраля 2010

LWP поставляется с готовыми сценариями, которые можно использовать из командной строки. Проверьте наличие скриптов GET и POST в вашей системе.

...