2010-02-08 10 views
19

Próbuję wysłać wiadomość lub wpis za pomocą argumentu wiersza polecenia. To jest test skryptu w wierszu poleceń, zanim przetestuję przeglądarkę (serwer ma problemy). Próbowałem wyszukiwać w Internecie i prawdopodobnie używam niewłaściwej terminologii, ponieważ nic nie dostałem. Wiem, że to możliwe, ponieważ widziałem, jak ktoś to robi. Po prostu nie pamiętam, jak to się stało.Jak mogę wysłać dane POST i GET do skryptu Perl CGI za pomocą wiersza poleceń?

Dzięki! :)

Odpowiedz

21

Czy używasz standardowego modułu CGI?

Na przykład, z następującym programem (Zawiadomienie -debug w argumenty 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; 

karmić parametry to w wierszu poleceń:

$ ./prog.cgi foo=bar baz=quux 
Content-type: text/plain 

foo => bar 
baz => quux

Można również zrobić za pomocą standardowe wejście:

$ ./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
1

Tak, można to zrobić z wiersza poleceń, pomijając serwer. Ta strona wyjaśnia wszystko: Perl CGI debugging (sitewizard.com) (szczególnie pozycja 6 na tej stronie). Cytuję tutaj najważniejszą rolę:

Aby przetestować skrypt w trybie offline przy użyciu metody GET , wystarczy ustawić zmienną środowiskową query_string odpowiednio. Jeśli używasz systemu Windows, może użyć następującego polecenia linii w oknie DOS przed uruchomieniem skrypt w tym samym oknie:

zestaw [email protected] & fullname = M + nazwa

Aby przetestować skrypt w trybie offline, korzystając z metody POST , należy umieścić poniższy wiersz w pliku tekstowym o nazwie, powiedzmy, testinput.txt.

[email protected] & fullname = M + nazwa

Następnie przekierować ten plik jako wkład do skryptu. W systemach Unix, jak również pod wierszu MSDOS Windowsa można zrobić to w ten sposób:

perl -w scriptname.pl < testinput.txt

Twój skrypt otrzyma wówczas, że wejście jakby został wysłany przez formularz na stronie internetowej. Sprawdź komunikaty o błędach , które może wywoływać perl, jeśli są, do , aby pomóc w śledzeniu problemu w skrypcie .

+0

odsyłającym/podejście standardowe wejście środowiska zmienna współpracuje z dowolnej aplikacji CGI , Perl lub w inny sposób. – fennec

+0

Ta rada jest dość pomijana, nie wspominając o tym, że przykładowa linia poleceń nie ma żadnej nadziei na działanie. –

-1

LWP zawiera gotowe skrypty, których można używać z wiersza polecenia. Sprawdź skrypty GET i POST w systemie.

+0

To jest coś innego. Chce uruchomić skrypt CGI z wiersza poleceń (bez serwera), aby go przetestować. –

17

Aby przetestować program CGI z wiersza poleceń, należy udawać środowisko, które serwer tworzy dla programu. CGI.pm ma specjalny tryb offline, ale często łatwiej mi go nie używać ze względu na dodatkową konfigurację, którą muszę wykonywać w przypadku wszystkiego, czego zazwyczaj oczekują moje programy.

W zależności od wykonania skryptu, wiąże się to ustawienie wielu zmiennych środowiskowych, które można zrobić ze skryptu otoki, który udaje się na serwerze:

#!/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 

Jeśli robisz to dla POST żądanie, środowisko jest nieco inna i trzeba dostarczyć dane POST na standardowym wejściu:

#!/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 

można zrobić to jak fantazja, jak trzeba i za każdym razem chcesz przetestować program, zmienia się dane w plikach query_string lub post_data . Jeśli nie chcesz tego robić w skrypcie powłoki, równie łatwo można utworzyć opakowujący skrypt Perla.

-1

W systemie Windows można użyć VBScript napisać util wiersza poleceń, który wywołuje w bibliotece 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 

Edit: Ten skrypt wysyła żądania HTTP i może być używany z wiersza poleceń. Zaskoczyło mnie pytanie "Jak wysłać dane POST i GET do skryptu Perl CGI za pośrednictwem wiersza poleceń" i myślałem, że chodzi o wysyłanie danych POST i GET do skryptu Perl CGI za pośrednictwem wiersza poleceń z nieokreślonego systemu operacyjnego klienta.

+0

Chce uruchomić skrypt w wierszu poleceń, aby go przetestować. Nie ma serwera. –

5

Old dyskusja, ale szukałem tych samych odpowiedzi - tak dla tych, którzy idą - to co się dowiedziałem

RTFM! ze strony człowieka CGI (i tam jest więcej) debugowanie Jeśli używasz skryptu z linii poleceń lub w Perl debuggera, można przekazać skrypt listę słów kluczowych lub parametr = wartość par w wierszu poleceń lub ze standardowego wejścia (nie musisz się martwić o wykrycie skryptu do odczytu zmiennych ze środowiska ). Można przekazać słowa kluczowe tak:

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. 
0

Aby podać dane cgi skrypt post:

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

dać skrypt CGI uzyskać dane:

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

Jeśli nie chcesz aby zmienić skrypt perla, możesz wywołać go z co najmniej dwoma zestawami zmiennych środowiskowych, o czym już wspomniały inni. Aby symulować żądania GET:

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

to skrót konsoli www.myserver.org/events_html.pl?limit=20

Powiązane problemy