Apple推送代理和stream_context

时间:2012-12-19 12:03:06

标签: php apple-push-notifications http-proxy

我必须向iOS设备发送推送通知。我的连接必须通过代理启用。我尝试了一切但没有成功。我有一个错误110连接超时。如果我只是尝试连接Apple推送地址,它正在使用cURL。我不知道问题出在哪里。代理配置? PHP stream_context错误的实现?

这是我的代码:

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'certificate.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', 'my_passphrase');
stream_context_set_option($ctx, 'ssl', 'verify_peer', false);
stream_context_set_option($ctx, 'http', 'proxy', 'tcp://my-proxy.net:8080');
stream_context_set_option($ctx, 'http', 'request_fulluri', true);

$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err,$errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
var_dump($fp);
var_dump($err);
var_dump($errstr);
exit;

你有什么想法吗?

修改

可以直接链接到Squid吗?我刚刚发现代理正在运行Squid。 我也尝试使用fopen()函数而不是stream_socket_client(),但它似乎不允许使用ssl协议。

这是我的var_dump输出: bool(false)int(110)string(20)“连接超时”

我也有这个警告:警告:stream_socket_client():无法连接到/share/www/website/test.php中的ssl://gateway.sandbox.push.apple.com:2195(连接超时)在第22行

2 个答案:

答案 0 :(得分:1)

可能只是您的代理不允许打开端口2195。

iPhone Push Notification Unable to Connect to the SSL Server

我猜你要么:

  • 需要与运行代理的人员交谈以查看端口2195是否已打开。

  • 设置侦听端口2195的测试服务器,然后尝试通过代理与它进行测试连接。这应该允许您测试它是否是阻止连接请求的代理。

  • 测试Curl是否可以使用代理打开连接。

通过设置选项来完成:

// sets the proxy to go through
curl_setopt($ch, CURLOPT_PROXY, $proxy);
// sets to use a tunnel proxy which most http proxies are
curl_setopt($ch, CURLOPT_HTTPTUNNELPROXY, $proxy);

完整测试代码here

答案 1 :(得分:0)

  • 创建SSL上下文
  • 打开代理的tcp套接字
  • 向代理发送请求以连接到APN
  • 一旦接受连接,则启用SSL

在这篇文章中查看我的回复:Send Push Notification to APNS through proxy