Как я могу отправить POST и ПОЛУЧИТЬ данные к сценарию CGI Perl через командную строку?

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

Спасибо!:)

19
задан brian d foy 8 February 2010 в 20:50
поделиться

5 ответов

Используете ли вы стандартный модуль CGI?

Например, с помощью следующей программы (обратите внимание на -debug в аргументах используйте 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
21
ответ дан 30 November 2019 в 02:48
поделиться

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

19
ответ дан 30 November 2019 в 02:48
поделиться

Есть одна вещь, которую я нахожу странной: Вы вызываете ob _ end _ flush () в начале функции. Это фактически очищает выходной буфер, но также выводит все сначала клиенту (я предполагаю, включая Content-Headers, заданные CodeIgniter). Измените вызов на ob _ end _ clean () , он очистит буфер и отбросит его. Это даст вам чистый старт для создания собственных заголовков.

Другой наконечник:

Вместо того, чтобы читать файл как поток и передавать его поблочно, вы могли бы дать эту функцию попробовать:

// ...
if (file_exists("dir-with-files/$filename")) {
   readfile($file);
}

Это заботится почти обо всем.

-121--4268455-

Вот статья , в которой приведен пример выбора целой недели с помощью указателя даты.

$(function()
{
    $('.date-pick').datePicker({selectWeek:true,closeOnSelect:false});
});    
-121--1421865-

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

Чтобы проверить сценарий в автономном режиме с помощью метод GET, просто установите QUERY_STRING переменная среды соответственно. При использовании Windows можно использовать следующую команду: строка в окне DOS перед запуском сценарий в том же окне:

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

To тестирования сценария в автономном режиме с помощью метод POST, поместите строку ниже в текстовый файл с именем testinput.txt.

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

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

perl -w scriptname.pl < testinput.txt

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

1
ответ дан 30 November 2019 в 02:48
поделиться

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

-1
ответ дан 30 November 2019 в 02:48
поделиться

В 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 через командную строку из неуказанной клиентской ОС.

-1
ответ дан 30 November 2019 в 02:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: