无法从Perl执行POST请求

时间:2014-04-13 02:29:31

标签: perl google-app-engine

我在互联网上有一个具有这种布局的普通页面

<form method="POST">
<textarea rows="30" cols="70" name="spytext" id="spytext"></textarea>
<input type="submit" value="send">
</form>

我正在尝试使用Perl从localhost发布此页面。

首先我获得了状态302 Found,然后我将以下行添加到浏览器中,以便遵循任何重定向:

push @{$browser->requests_redirectable}, 'POST';

现在我的Perl代码看起来像这样

my %Fields = ("spytext" => "Will Bontrager");

use LWP::UserAgent;
use HTTP::Request::Common;

my $Browser = new LWP::UserAgent;

push @{$Browser->requests_redirectable}, 'POST';

my $Page = $Browser->request(POST "http://myGAEFictiveLink.appspot.com/spypage",\%Fields);

if ($Page->is_success) { print $Page->content; }
else { print "\nUnsuccessful " . $Page->message; }

因此,在我的&#34; spypage&#34;我发布了这个名为&#34; spytext&#34;的字段。有价值的,我期望在浏览器中发布之后检索我通常得到的内容(带有消息的HTML段落)。

运行脚本后,它被证明是一个成功的POST,但显示的页面内容正是初始页面&#34; spypage&#34;而不是另一个页面,通常在页面界面中进行POST后。

所以我猜它没有真正发布,或者它没有发布在我的目标页面上。

如何强制Perl在该页面上发帖?

1 个答案:

答案 0 :(得分:1)

我必须在我的REST控制台中查看它,但您的网页需要HTTPS,而您在HTTP脚本中通过perl发送,您正在重定向(302)到安全版本,这就像GET请求一样。更改脚本中的URL以使用HTTPS,它将如下所示工作。

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;


my %Fields  = (
        spytext => 'Will Bontrager',
    );

my $url = 'http://myGAEFictiveLink.appspot.com/spypage';


my $ua = LWP::UserAgent->new();
my $res = $ua->post( $url, %Fields );

if ($res->is_success) {
    # If successfully (200 status code) do this
    my $content  = $res->decoded_content();
    print $content . "\n";

} else {
    print "Status Code: " . $res->status_line . "\n";
    print "Final URL: " . $res->request()->uri() . "\n";
}

<强> RESPONSE

<p>Okay, now expect for an email</p>