#perl
#perl
Вопрос:
Я хотел бы разместить приведенные ниже данные на определенном URL:
choice yes
high high
low low
name BDNL
На этот URL:
https://www.example.com
Затем я хотел бы сохранить ответ в формате HTML или обычный текст в текстовом файле?
У меня есть опыт работы с Perl, и я предпочел бы использовать его для решения этой задачи.
Ответ №1:
Вы могли бы использовать LWP::UserAgent
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use CGI;
my $url = 'http://www.example.com/';
my $ua = LWP::UserAgent->new();
my $response = $ua->post( $url, { choice => "yes", high => "high", low => "low", name => "BDNL" } );
my $content = $response->decoded_content();
my $cgi = CGI->new();
open my $fh, ">", "response.txt" or die "$!";
print $fh $cgi->header() . $content;
close $fh;
Комментарии:
1. Вам нужно
CGI
, так как при компиляции (не думаю, что PERL интерпретируется) было сказаноCan't locate object method "new" via package "CGI" you forgot to load perhaps
2. Привет @Matt, все, что возвращается, находится
Content-Type: text/html; charset=ISO-8859-1
в текстовом файле, сайт, который я использую, использует аутентификацию, поэтому это может быть проблемой, поскольку я сначала используюWWW::Mechanize::Firefox
для входа в систему, но затем кажется неправильным использовать LWP, поскольку я предполагаю, что здесь используется другой (не прошедший проверку подлинности) экземпляр?3. @StevieG можете ли вы использовать post(_$url,_%options_)» rel=»nofollow noreferrer»> WWW::Mechnize:: сообщение Firefox ? Используйте
$mech->content();
для получения декодированного содержимого.4. Спасибо @Matt, я пробовал это, но теперь я получаю
Can't locate object method "post" via package "WWW::Mechanize::Firefox"
, я думаю, что это может быть моя версия, хотя я на 0.71 и не могу обновиться до 0.74. Но я не буду тратить ваше время.5. @StevieG да, держу пари, это было добавлено позже. Возможно, существует способ аутентификации с помощью LWP: UserAgent, так что, возможно, это тоже стоит изучить (или если вы могли бы обновить).