使用Charles和SSL苹果推送地址

3

我需要确认我的PHP代码是否可以通过代理发送推送通知。我安装了Charles,可以通过代理(127.0.0.1:8888)观察所有的网络流量。

现在我想要确认我的脚本是否正确地发送推送通知。我已经:

stream_context_set_option($ctx, 'http', 'proxy', 'tcp://127.0.0.1:8888');
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err,$errstr, 60, STREAM_CLIENT_CONNECT, $ctx);

我收到了推送通知,但在Charles中无法看到发生的情况。因此,我的脚本没有使用代理......你知道为什么吗?

6
你到底是什么意思,说你安装了我? - Charles
@Charles ;) 我的意思是 http://www.charlesproxy.com - Pierre
确实。那么,这只是一个猜测,但我们是否知道流上下文中的http代理选项也适用于https - Charles
@Charles,它适用于 https://。但是,它不适用于 ssl://。请参见我的回答。 - DaveRandom
1个回答

2
这是因为您在使用stream_socket_client()时传递了一个带有http选项的上下文,更重要的是,您使用了ssl://包装器而不是httphttpsstream_socket_*()函数不知道您正在实现HTTP,因此它们不会使用http上下文选项。为使其正常工作,您需要执行以下操作:
$fp = fopen('https://gateway.sandbox.push.apple.com:2195/path/to/file', 'r', false, $ctx);

这也许是个更好的想法,因为对于苹果API来说,你不太可能需要实现HTTP手动提供的细粒度控制。


好的,我知道你的意思,但是现在我遇到了这个错误: fopen(gateway.sandbox.push.apple.com:2195) [function.fopen]: failed to open stream: Cannot connect to HTTPS server through proxy。 - Pierre
@Pierre 嗯,听起来像是 Charles 没有正确设置通过 SSL 传递的方式,这不是我真正了解的东西。如果您配置您的 Web 浏览器使用代理并尝试访问 https URL,它是否有效?Charles 是否记录任何错误? - DaveRandom
通过我的浏览器,我可以访问https网址(如Facebook)。 - Pierre
在我的脚本中,如果我在上下文中删除代理,我会得到相同的错误。 - Pierre
@Pierre 嗯,我必须诚实地说,这似乎有点不太可能 - 你确定它没有在其他地方被设置吗?或者你修改了默认的流上下文? - DaveRandom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接