【问题标题】:Error in POST request generated by perlperl 生成的 POST 请求出错
【发布时间】:2013-02-26 16:21:30
【问题描述】:

我在尝试从 perl 脚本发送 POST 请求时遇到错误:

use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->credentials($netloc,$realm,$username,$password);
use HTTP::Request::Common;
my $req = HTTP::Request::Common::POST($url,'content' => $conf);

$req->as_string()

POST http:.....
Content-Length: 31003
Content-Type: application/x-www-form-urlencoded

.....&createTime=1361370652541&parameters=HASH(0x28fd658)&parameters=HASH(0x28fd670)&parameters=HASH(0x28fd6e8)&parameters=HASH(0x28fd760)&nodes=32&.....&alerts=HASH(0x632d00)&alerts=HASH(0x245abd0)&.....

我得到的错误是

Unexpected character ('H' (code 72)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')

这让我怀疑问题出在重复 parameters=HASH(...)alerts=HASH(...) 元素; 相反,我想看到类似的东西

alerts=%5B%7B%22email%22%3A%22foo%40bar.com%22%2C%22type%22%3A%221%22%2C%22timeout%22%3A%22%22%7D%5D    

$conf 是哈希引用,$conf->{"parameters"} and $conf->{"alerts"}` 是数组引用(其元素是哈希 参考)。

我做错了什么?

【问题讨论】:

    标签: perl post httprequest lwp


    【解决方案1】:

    您不能发布参考资料;您可能需要以某种方式对它们进行序列化;服务器期待什么?

    从错误看来,整个数组或者其中的每个哈希都应该在 JSON 中序列化:

    use JSON;  # preferably have JSON::XS installed
    my %prepared_conf = %$conf;
    for my $field ( 'parameters', 'alerts' ) {
        $prepared_conf{$field} =
            JSON::to_json( $prepared_conf->{$field}, { 'ascii' => 1 } );
    }
    my $req = HTTP::Request::Common::POST($url,'content' => \%prepared_conf);
    

    【讨论】:

    • 我添加了我希望在请求中看到的内容
    • 是的!这就是为什么我接受了你的回复——它起作用了(我什至不需要中间的prepared_conf,我做了所有的事情。
    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2016-03-06
    • 2017-03-12
    • 1970-01-01
    相关资源
    最近更新 更多