Perl: Как разместить конкретные данные на определенном URL и сохранить ответ в текстовом файле, в контексте веб-очистки?

#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, так что, возможно, это тоже стоит изучить (или если вы могли бы обновить).