gpt4 book ai didi

Perl LWP 以我的边界发布表单数据

转载 作者:可可西里 更新时间:2023-11-01 16:29:39 34 4
gpt4 key购买 nike

我想发布内容类型为 multipart/form-data 的数据:

use strict;
use warnings;

use LWP::UserAgent;

my $ua = LWP::UserAgent->new;
$ua->post (
'http://127.0.0.1:12555',
'Content-Type' => 'form-data',
Content => {
'data1' => rand,
'data2' => rand,
}
);

然后我测试了提交的数据:

use strict;
use warnings;
use IO::Socket::INET;
use Socket qw ( inet_aton );

my $sock_listen = new IO::Socket::INET (
LocalHost => '127.0.0.1',
LocalPort => '12555',
Proto => 'tcp',
Listen => 3,
Reuse => 1,
);
$sock_listen->autoflush ();

my $sock;
while ( $sock = $sock_listen->accept ( ) )
{
my $data = '';
$sock->recv ( $data, 4096 );
print $data . "\n";
}

测试 #1 结果:

POST / HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: 127.0.0.1:12555
User-Agent: libwww-perl/6.05
Content-Length: 162
Content-Type: multipart/form-data; boundary=xYzZY

--xYzZY
Content-Disposition: form-data; name="data2"

0.876556396484375
--xYzZY
Content-Disposition: form-data; name="data1"

0.62921142578125
--xYzZY--

测试 #2 结果:

POST / HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: 127.0.0.1:12555
User-Agent: libwww-perl/6.05
Content-Length: 163
Content-Type: multipart/form-data; boundary=xYzZY

--xYzZY
Content-Disposition: form-data; name="data2"

0.896942138671875
--xYzZY
Content-Disposition: form-data; name="data1"

0.041656494140625
--xYzZY--

我添加了一条数据:

        'data3' => '--xYzZY'

得到:

POST / HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: 127.0.0.1:12555
User-Agent: libwww-perl/6.05
Content-Length: 221
Content-Type: multipart/form-data; boundary=Tegj

--Tegj
Content-Disposition: form-data; name="data2"

0.34613037109375
--Tegj
Content-Disposition: form-data; name="data3"

--xYzZY
--Tegj
Content-Disposition: form-data; name="data1"

0.678955078125
--Tegj--

问题是如何设置 boundary手动到 32 个字符的字符串,如浏览器的 ----WebKitFormBoundary[...]使用 LWP

或者可以只使用IO::Socket

最佳答案

LWP 允许您在执行 multipart/form-data 请求时手动设置边界。不幸的是,根本没有记录此功能。

但是,您必须明确地做multipart。您可以通过将 boundary 作为 Content-Type 的附加字段附加来设置自己的边界。它将是 converted to a header appropriately by HTTP::Request::Common .

my $ua = LWP::UserAgent->new;
$ua->post(
'http://127.0.0.1:12555',
'Content-Type' =>
'multipart/form-data;boundary=Nobody-has-the-intention-to-erect-a-wall',
# ^^^^^^^ ^^^^^^^^

Content => {
data1 => rand,
data2 => rand,
},
);

对于您的监听器,这会产生以下输出。

POST / HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: 127.0.0.1:12555
User-Agent: libwww-perl/6.15
Content-Length: 269
Content-Type: multipart/form-data; boundary=Nobody-has-the-intention-to-erect-a-wall

--Nobody-has-the-intention-to-erect-a-wall
Content-Disposition: form-data; name="data2"

0.0575856828104122
--Nobody-has-the-intention-to-erect-a-wall
Content-Disposition: form-data; name="data1"

0.677908250902878
--Nobody-has-the-intention-to-erect-a-wall--

请注意,如果 HTTP::Request::Common 在任何部分的正文中找到边界字符串,它将用随机字符串替换您的边界。它不仅会在您的边界上添加一个数字。

关于Perl LWP 以我的边界发布表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47646959/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com