gpt4 book ai didi

perl - 从Perl中的套接字读取特定数量的字节

转载 作者:行者123 更新时间:2023-12-03 12:08:19 25 4
gpt4 key购买 nike

我正在尝试模拟HTTP api的一些小部分(以针对某些脚本进行测试-这些脚本旨在与实现完整API的某些软件一起运行,但要使其运行并向其提供初始数据以进行测试很困难)。

到目前为止,我有一个使用IO::Socket::INET监听TCP连接的小型perl脚本,该脚本可以很好地模拟GET请求,但是我还必须处理一些POST请求,因此我有些卡住了。我阅读标题很好,并找到例如“内容长度:20”,但随后我必须读取那些通常不以换行符结尾的20个字节。

我试过了

$client_socket->recv($data, $content_length);


sysread $client_socket, $data, $content_length;

但两者都只会在收到EOL时返回(我没有检查它们是否需要 \n\r或两者都没有,因为这并不重要),但是仅返回我要求的字节数。

我可能没有搜索正确的单词,我发现的是,可以在IO::Socket::INET上设置的超时仅用于连接,如果我使用IO::Socket::Timeout或将读取的结果包装在带警报的eval块中,则不会读取任何内容。

当评论表明发生了其他事情时,我继续进行研究。如果我以前用 $socket->recv从套接字读取示例,则 $data = <$socket>似乎会改变行为(不是一个完整的脚本-我认为这并不有趣,但是如果有人想要我可以提供一个脚本):
$client_socket->recv($data, 4);
print "1: $data\n";
$data = <$client_socket>;
print "2: $data\n";
$client_socket->recv($data, 4);
print "3: $data\n";

仅在套接字上发送多行时才输出带有 1:2:的行(我只是使用 curl来生成几行(我认为是7条)数据)。

最佳答案

使用read $client_socket, $data, 4,我得到了一些符合我想要的代码。

关于perl - 从Perl中的套接字读取特定数量的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52973118/

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