Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重用Perl IO::socket::ssl客户端_Perl_Sockets_Ssl - Fatal编程技术网

重用Perl IO::socket::ssl客户端

重用Perl IO::socket::ssl客户端,perl,sockets,ssl,Perl,Sockets,Ssl,我试图减轻我的代码中的一部分,我是一个LWP::UA用户 使用SSL层访问Rest API。 我试图用裸IO::Socket::SSL模块实现相同的结果。 它在第一次通话时非常有效,如下所示: my $SSLSocket = IO::Socket::SSL->new( PeerHost => $server, PeerPort => "https"); print $SSLSocket "GET /

我试图减轻我的代码中的一部分,我是一个LWP::UA用户 使用SSL层访问Rest API。
我试图用裸IO::Socket::SSL模块实现相同的结果。
它在第一次通话时非常有效,如下所示:

    my $SSLSocket = IO::Socket::SSL->new(
                PeerHost => $server,
                PeerPort => "https");
    print $SSLSocket "GET /restapi/json/v1/resources?AUTHTOKEN=$token HTTP/1.0\r\n\r\n";
    while(<$SSLSocket>){
           $response = $_;
     }
    $resources = $json->decode($response);
my$SSLSocket=IO::Socket::SSL->new(
PeerHost=>$server,
PeerPort=>“https”);
打印$SSLSocket“GET/restapi/json/v1/resources?AUTHTOKEN=$token HTTP/1.0\r\n\r\n”;
while(){
$response=$\;
}
$resources=$json->decode($response);
但是当我试图重用这个插座时,我没有得到任何好处

my $SSLSocket = IO::Socket::SSL->new(
                    PeerHost => $server,
                    PeerPort => "https");
print $SSLSocket "GET /restapi/json/v1/resources?AUTHTOKEN=$token HTTP/1.0\r\n\r\n";
 while(<$SSLSocket>){
        $response = $_;
        }
 $resources = $json->decode($response);
 print $SSLSocket ,"GET /restapi/json/v1/resources/3138/accounts?AUTHTOKEN=$token HTTP/1.0\r\n\r\n";
 while(<$SSLSocket >){
     $response = $_;
  }
 close($SSLSocket );

my $accounts = $json->decode($response);
my$SSLSocket=IO::Socket::SSL->new(
PeerHost=>$server,
PeerPort=>“https”);
打印$SSLSocket“GET/restapi/json/v1/resources?AUTHTOKEN=$token HTTP/1.0\r\n\r\n”;
while(){
$response=$\;
}
$resources=$json->decode($response);
打印$SSLSocket,“GET/restapi/json/v1/resources/3138/accounts?AUTHTOKEN=$token HTTP/1.0\r\n\r\n”;
while(){
$response=$\;
}
关闭($SSLSocket);
我的$accounts=$json->decode($response);
第二次读取为空。 因为我不能使用recv或send方法,所以我有点不知所措。 有没有办法不在每次请求时打开新的SSL套接字?

谢谢您的回答。

请在套接字上使用真正的HTTP,而不是通过查看一些示例而假定HTTP是什么。如果你真的想实现“更轻”的东西,请阅读相关标准。但我向您保证,您可能不会得到更轻的实现。好的,我将使用LWP模块,但我仍然对在您开始阅读套接字后如何返回感兴趣。谢谢,我建议您阅读相关标准,特别是HTTP正文长度的指定部分。您还应该了解更多关于基本套接字编程的知识,特别是如何确定套接字的关闭程度,以及如果套接字关闭,您将无法读取或写入更多数据。