Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Nie wiem czy ktoś z was kojarzy taki wynalazek jak DirectAdmin ale ostatnio płodziłem pewnego plugina do niego. Jednym ze skryptów jest prosty skrypcik perlowski. No i tu się zaczyna problem (perla jako tako nie znam - tyle co mi trzeba było do przetworzenia requestu i napisania pluginu ;]). Jeden skrypt zapodaje z formularza dane do skryptu perlowego. No i jak formularz prześlę metodą GET to perl to łapie. Ale może zdarzyć się sytuacja że GET będzie tasiemcowaty. Jak zmusić perla do przełknięcia tablicy $_POST ? Fragment skryptu perlowskiego który dobiera sie do $_GET
#!/usr/bin/perl use LWP::Simple; local ($buffer, @pairs, @login, $user_conf_file, $pair, $domain, $state); $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer = $ENV{'QUERY_STRING'}; } @pairs=split(/&/,$buffer);
Teraz prosiłbym o info, sznurki, wskazówki jak przerobić to na POST?
Kod
#!/usr/bin/perl use LWP::Simple; local ($buffer, @pairs, @login, $user_conf_file, $pair, $domain, $state); $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "POST") { $buffer = $ENV{'QUERY_STRING'}; } print $buffer;
wywala mi na ekran wszystko mówiący napis POST podczas gdy na GET jest wyświetlane wszsytko co zostało do skryptu przekazane...
Offline
myślę że pomoże:
http://www.scs.leeds.ac.uk/Perl/Cgi/textareas.html
Offline
A ja bym radził sprawdzić, co potrafi WWW::Mechanize i/lub Web::Scraper, są trudniejsze od LWP:Simple, ale ma 25x większe możliwości, bazuje na nich np moduł Finance::Bank::Mbank (daje rade z logowaniem - formularz javascript, i sprawdzeniem stanu konta).
Biblioteka mBank.pm ma aż 5.6 kb (z komentarzami) - i działa z takim bajzlem. :D
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2011-11-17 09:39:14)
Offline
@jacekalex - cały skrypt perlowski ma aż 22 linijki. Zadaniem skryptu jest pobranie z tablicy POST/GET loginu, nazw domen i wpisanie nazw domen do pliku. Równie dobrze mogę to zacząć pisać w C/C++, Pyhtonie czy w Javie tylko pytanie po jakiego grzyba z armatą na wróbla? Cały UserLevel pluginu to 4 pliki o łącznej długości 76 linijek. Z czego 90% to linijki w stylu:
echo "<table cellspacing='1' cellpadding='3' class='list'><tr><td class='listtitle'><a class='listtitle'><b>${PLUGIN_NAME}</b></a></td>" echo "<table cellspacing='1' cellpadding='3' class='list'>"; echo "<fieldset style=\"border-color: blue; padding:8xp;text-align:justify; background-color:lightblue\">";
Czyli wypluwanie kodu HTML ;]
@milyges - gracie zapoznam się i potestuję może coś mi z tego wyjdzie ;]
Offline
W takim razie - zainteresuj się modułami CGI -tam dość łatwo wsadzisz dane POST, bo LWP::Simple działa raczej od drugiej strony.
Tu masz fajny działający przykład:
Strona: http://anders.com/projects/sysadmin/djbdnsRecordBuilder/
Skrypt: http://anders.com/projects/sysadmin/djbdnsRecordBui … ildRecord.txt
I chyba (Twojego skryptu nie widziałem), wystarczy 10 linijek, a nie 22 :D
Tu masz prosty przykład POST:
http://www.tutorialspoint.com/perl/perl_cgi.htm
A tu fajne przykłady, które chyba już czytałeś.
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2011-11-17 10:22:00)
Offline
winnetou: mi umknęła chyba najistotniejsza kwestia, czyli w jakiej relacji jest ten skrypt do żądania HTTP.
Ten skrypt ma za zadanie wysłać żądanie HTTP gdzieś tam, czy cokolwiek może wysłać do tego skryptu żądanie, a on ma go przetworzyć i wysłać odpowiedź?
W tym pierwszym wypadku użyj LWP::UserAgent. W tym drugim — CGI. Jeżeli chcesz przykładów użycia, to możesz zajrzeć do źródła moich skryptów: getlyrics.pl (LWP::UA) i Jab2GG (CGI).
Na marginesie, niemal na pewno nie masz na myśli local.
Offline
Minio - skrypt odbiera post z formularza, ma go przetworzyć a następnie wynik wypluć na ekran/konsole.
Co do "local" to skrypt powstał po ślepieniu się i próbie zrozumienie jednego z pluginów które już ktoś napisał.
Dobra co ja się będę rozpisywał jak ktoś ma ochotę pogrzebać w moich wypocinach to plugin jest dostępny na "Stronie developera ;)"
Offline
winnetou: jeżeli dobrze zrozumiałem, to chodzi Tobie o coś takiego.
Czytanie i modyfikowanie plików konfiguracyjnych oraz dodatkowy kod HTML/CSS już sobie dopiszesz.
#!/usr/bin/perl use strict; use warnings; use CGI qw(-no_xhtml -nosticky); use utf8; my $query = new CGI; print $query->header(-type => 'text/html', -charset => 'UTF-8' ); if ($query->param('do_this')) { my $login = $query->param('hidden_name'); print "<h1>$login</h1>\n"; foreach my $name ($query->param) { next if ($name =~ m/do_this|hidden_name/); print $name . " -- " . $query->param($name) . '<br>' ."\n"; } } print $query->start_multipart_form(-name => 'connect') . "\n"; print $query->hidden(-name => 'hidden_name', -default => ['jakis login']) . "\n"; foreach my $domena ('domena1', 'domena2', 'domena3') { # tutaj powinieneś działać na tablicy domen danego użytkownika print $query->checkbox(-name => $domena, -checked => 0, -label => $domena) . "\n"; } print $query->submit(-name => 'do_this', -value => 'Wyślij') . "\n"; print $query->end_form . "\n";
Offline
Dzięki Minio - postaram się to przeanalizować na weekendzie i obczaić jak to działa i dlaczego tak a nie inaczej ;)
Offline