gpt4 book ai didi

perl - 使用 perl 连接苹果 APNS 的问题

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:01 25 4
gpt4 key购买 nike

我正在使用一个使用 Net::SSLeay 的库(Net::APNS::Persistent)。该库有助于与 Apple 的 APNS 服务器进行通信。我发现如果我发送任何错误的数据,例如错误的 token 或格式不正确的负载,程序会在尝试三次后终止。并且没有显示任何错误消息。

根据我的调试,这个问题发生在 SSLeay.pm 的第 1895 行

$wrote = write_partial($ssl, $written, $to_write, $$data_ref);

我试图捕捉是否有任何异常,发送了术语信号,但没有成功。如果存在网络问题或任何类型的错误,我希望它应该显示可以处理的错误消息/异常。但它只是简单地杀死了程序,什么也没说。有办法解决这个问题吗?我的代码如下:

package apnsClient;

use Net::APNS::Persistent;
use Data::Dumper;
use Test::Trap;

my $cfg;
my $apns;

sub load {
my $class = shift;
my $self = {
_cfg => shift,
};

$cfg = $self->{_cfg};

bless $self, $class;
return $self;
}

sub connect {
my ($sandbox, $cert, $key, $pass) = $cfg->getAPNSServer();

print "[x] Cert $cert Key $key \n";

$apns = Net::APNS::Persistent->new({
sandbox => $sandbox,
cert => $cert,
key => $key,
}) or die("[-] Unable to connect to APNS server");
}

sub push {
my ($class,$token,$payload) = @_;

print "[+] Sending push with token: $token and Data: \n ".Dumper($payload);

$apns->queue_notification(
$token,
$payload
);
print "[+] Sending apns queue \n";
$apns->send_queue;
print "[+] Sent \n";
}

sub disconnect {
$apns->disconnect;
}

1;

最佳答案

终于解决了这个问题。如果提供了无效 token ,Apple 服务器会丢弃 session ,并且 write_partial 函数会在无法写入套接字时发送终止信号。为了防止脚本终止,我们需要使用

$SIG{'PIPE'} = 'IGNORE';

关于perl - 使用 perl 连接苹果 APNS 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30332833/

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