【问题标题】:Perl HTTP request : POST fails while GET succeedsPerl HTTP 请求:POST 失败,而 GET 成功
【发布时间】:2013-11-25 09:03:19
【问题描述】:

当我尝试使用 Perl 提交 POST 请求时,它通常以 301 重定向到主页结束。这是代码:

use LWP::UserAgent;

$ua = LWP::UserAgent->new;

# This does not work
my $url = 'http://www.opensubtitles.org/en/search2';
my $req = HTTP::Request->new(POST => $url);
$req->content('MovieName=the+terminator+(1996)');


# Pass request to the user agent and get a response back
print $req->as_string."\n";;
my $res = $ua->request($req);
if (!$res->is_success) { 
  print $res->status_line, "\n"; 
}
else { 
  print "Success in posting search\n";
}

为了让它工作,我必须手动使用 Firefox,转到 url (!)。然后脚本工作。但是,使用 GET 请求可以完美地工作:

# This works
my $url = 'http://www.opensubtitles.org/en/search2?MovieName=the+terminator+(1996)';
my $req = HTTP::Request->new(GET => $url);

这是为什么呢?

【问题讨论】:

  • 什么 在 Firefox 中访问 url 后起作用了?刚到网址后你做了什么?
  • 脚本应该返回与POST请求的结果对应的html。刚启动脚本时出现错误停止,所以我直接使用 Firefox 进入了结果页面。 然后启动脚本显示正确的html页面。

标签: perl http


【解决方案1】:

该网站不希望该 URL 有 POST,因此它会将您重定向回搜索页面。

Firefox 将使用GET,而不是POST,如果您只是将 URL 放入地址行,这就是它起作用的原因。

【讨论】:

  • 谢谢。你能解释一下为什么 POST 在 search.cpan.org 中有效,如 this tutorial 所示?在这两种情况下,都有一个表单在等待GET。
  • @alex_reader:因为search.cpan.org 上的特定表单被写入使用POST 而不是GET。 Firefox 使用站点返回的 HTML 来确定使用哪种方法来发送表单信息。你也应该这样做。
  • @gangabass:我无法重现这样的行为,我对此表示怀疑,因为两个不同的 HTTP 客户端应该独立运行,即使它们具有相同的 IP 地址。这个 Perl 代码甚至不使用 cookie。如果有人可以给出如何重现行为的精确说明,那么我会看看。
猜你喜欢
  • 2020-08-28
  • 2023-03-14
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多