POST
帮助程序不采用包含查询参数的完整 URL 。您应该在 arrayref 中提供这些,例如:
my $req = POST('http://www.example.com', [ foo => 42, bar => 'baz' ]);
…如文档中所示。
您还应该注意,POST 参数不是作为 URL 内的查询参数传输的,而是在 POST 请求的正文中传输的。虽然像 CGI 这样的一些软件提供了一个抽象出差异的接口,但其他软件可能没有。
另请注意,所有 Perl 脚本都应该use strict; use warnings;
.
您应该考虑的另一件事是通过测试is_success
和使用该decoded_content
方法进行正确的错误处理,该方法负责传输编码。
$res->is_success
or die $res->status_line;
print $res->decoded_content;
编辑
我分析了源代码,结果如下(自动生成):
我查看了页面的来源,http://polling.newspoll.com.au/cgi-bin/polling/display_poll_data.pl
表格有以下内容<input>
:
<input name="url_caller" type="hidden" value="" />
<input name="mode" type="hidden" value="file" />
<input name="page" type="hidden" value="Search" />
<input name="keywords" type="text" />
<input name="show" type="text" />
<input src="/images/search_button.jpg" type="image" />
以及以下<select>
组:
<select name="from_date_month"></select>
有价值观(1 .. 12)
<select name="from_date_year"></select>
有价值观(1998 .. 2013)
<select name="to_date_month"></select>
有价值观(1 .. 12)
<select name="to_date_year"></select>
有价值观(1998 .. 2013)
<select name="keytype"></select>
有价值观("all", "any")
<select name="state"></select>
有价值观("Any", "FEDERAL", "ACT", "NSW", "NT", "QLD", "SA", "TAS", "VIC", "WA")
此外,还存在具有以下查询的链接:
?url_caller=latest&state=Any&mode=file&page=Search
?mode=trend&page=select_category
这意味着该脚本也响应 GET 请求
我查看了页面的来源,http://polling.newspoll.com.au/cgi-bin/polling/display_poll_data.pl?url_caller=&mode=trend&page=show_polls&question_set_id=4
表格有以下内容<input>
:
<input name="url_caller" type="hidden" value="trend" />
<input name="show" size="5" type="text" />
<input name="mode" type="hidden" value="trend" />
<input name="question_id" type="hidden" value="2403" />
<input name="page" type="submit" value="Display Results" />
<input name=".cgifields" type="hidden" value="to_date_year" />
<input name=".cgifields" type="hidden" value="to_date_month" />
<input name=".cgifields" type="hidden" value="from_date_month" />
<input name=".cgifields" type="hidden" value="to_date_day" />
<input name=".cgifields" type="hidden" value="from_date_year" />
<input name=".cgifields" type="hidden" value="from_date_day" />
以及以下<select>
组:
<select name="from_date_day"></select>
有价值观(1 .. 31)
<select name="from_date_month"></select>
有价值观(0 .. 12)
<select name="from_date_year"></select>
有价值观("Any Year", 1970 .. 2013)
<select name="to_date_day"></select>
有价值观(1 .. 31)
<select name="to_date_month"></select>
有价值观(0 .. 12)
<select name="to_date_year"></select>
有价值观("Any Year", 1970 .. 2013)
此外,还存在具有以下查询的链接:
?url_caller=trend
?url_caller=trend&mode=trend&page=show_polls&question_set_id=4
?mode=trend&page=continue_results&question_id=2403&url_caller=trend
这意味着该脚本也响应 GET 请求
您正在使用请求中的字段[url_caller => '', mode => "trend", page => "show_polls", question_set_id => 4]
。例如,该字段question_set_id
不存在。的值show_polls
不存在page
。
隐藏字段不应更改,但应在预填时重新提交。对于select
离子,从提供的列表中选择有效参数。对于文本输入,根据上下文提供一个合理的值。