首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Post方法请求/表单提交

Post方法请求/表单提交
EN

Stack Overflow用户
提问于 2011-08-01 04:08:16
回答 2查看 2.6K关注 0票数 0

我在过去的几个小时里一直在做这件事,在浏览了大量的Google结果之后,我仍然不能让它工作。

我正在编写一个perl脚本,它连接到https://web5.uottawa.ca/rezweb/search.php,选择“校外/校内住宿”,单击search,然后打印结果。

这是我到目前为止所知道的:

代码语言:javascript
复制
#!/user/bin/perl
use strict; use warnings;
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
use Crypt::SSLeay; #Since it's HTTPS

my $ua = LWP::UserAgent->new();
my $url = 'https://web5.uottawa.ca/rezweb/search.php';
my $formdata = ['accomodationType' => '1', 'submit' => 'Search'];

my $response = $ua->post($url, $formdata);
die "Error: ", $response->status_line . "\n"
  unless $response->content;

不幸的是,它仍然是表单的页面来源--而不是搜索结果页面。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-04 10:15:51

相关额外文档:Mojo::DOM

代码语言:javascript
复制
use strict;
use warnings;
use LWP::UserAgent;
use Mojo::DOM;

my $ua = LWP::UserAgent->new();
my $url = 'https://web5.uottawa.ca/rezweb/search.php';
my $formdata = [
                accomodationType => 1,
                maximum => 9999,
                maximumOnCampus => 9999,
                minimum => 0,
                minimumOnCampus => 0,
                "search_op[]" => 5,
                "search_op[]" => 6,
                "search_op[]" => 7,
                "search_op[]" => 8,
                "search_op[]" => 9,
                "search_op[]" => 10,
                "search_op[]" => 11,
                srch_rental_type4 => "on",
                srch_rental_type5 => "on",
                submit => "Search",
                zone => 0,
                ];

my $response = $ua->post($url, $formdata);
die "Error: ", $response->status_line, "\n"
    unless $response->content;

my $dom = Mojo::DOM->new( $response->decoded_content );
my @matches = map { $_->parent->parent }
    grep { $_->attrs("href") =~ /search\.php\?id=\d+/ }
    $dom->find("tr > td > a")->each;

for my $row ( @matches ) {
    print $row->all_text, $/;
}

__END__

157 Laurier Ave E 1 Hyman Soloway Sublet 1 bedroom 0400 01/08/2011
75 Louis Pasteur Pvt 1 Brooks Sublet 1 bedroom 0650 01/08/2011
75 Louis Pasteur Pvt 1 Brooks Sublet 1 bedroom 0750 25/07/2011

我通过关闭JS-他们的网站将其用于增强-并检查请求来到达POST参数列表。虽然这种解决方案有效,但它是脆弱的。确保你没有违反网站的ToS或滥用表单敲击它。

票数 0
EN

Stack Overflow用户

发布于 2011-08-01 07:52:12

基本上有两种途径可供选择:对所需的特定表单值进行硬编码,并使用LWP::UserAgent将它们作为post数据传递(向POST()添加一个arrayref参数-请参阅HTTP::Request::Common文档),或者使用它的子类WWW::Mechanize,后者将为您提供获取空白表单、输入值、提交表单和获得结果的方法。

任何一种方式都可能会因为网站的变化而中断;你可以决定哪种方式更有可能,哪种方式似乎更容易编码。

您没有使用任何LWP::Simple功能;您应该删除它的use

更新:

当我转到页面并选择校外住宿时,它添加了更多(可选)表单域;在这一点上发布会发送以下参数:

代码语言:javascript
复制
accomodationType    1
maximum 9999
maximumOnCampus 9999
minimum 0
minimumOnCampus 0
submit  Search
zone    0

使用所有这些参数将会起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6891992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档