使用 Charles 和 SSL Apple 推送地址

Posted

技术标签:

【中文标题】使用 Charles 和 SSL Apple 推送地址【英文标题】:Using Charles and SSL Apple push address 【发布时间】:2013-01-04 09:17:58 【问题描述】:

我必须确认用于发送推送通知的 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 ;) 我的意思是charlesproxy.com 确实如此。所以,在这里猜测一下,但是我们知道流上下文中的 http 代理选项也适用于 https 吗? @Charles 它确实适用于https://。但是,它适用于ssl://。看我的回答。 【参考方案1】:

这是因为您将带有 http 选项的上下文传递给了 stream_socket_client() - 更重要的是您使用了 ssl:// 包装器而不是 http://https://

stream_socket_*() 函数不知道您正在实现 HTTP,因此它们不使用 http 上下文选项 - 为了使其工作,您需要执行例如

$fp = fopen('https://gateway.sandbox.push.apple.com:2195/path/to/file', 'r', false, $ctx);

无论如何,这可能是一个更好的主意,因为您不太可能需要手动实现 HTTP 为 Apple API 提供的精细控制。

【讨论】:

好吧,我明白你的意思了,但现在我有这个错误:fopen(gateway.sandbox.push.apple.com:2195) [function.fopen]: failed to open stream: Cannot connect to HTTPS通过代理服务器 @Pierre 好吧,听起来查尔斯没有正确设置 SSL 通过,这不是我真正了解的事情。如果您将 Web 浏览器配置为使用代理并尝试访问 https url,它是否有效? Charles 是否记录任何错误? 通过我的浏览器我可以访问 https 网址(如 facebook) 在我的脚本中,如果我在上下文中删除我的代理,我会得到同样的错误 @Pierre 好吧,老实说,这似乎有点不太可能——你确定它没有被设置在其他地方吗?或者你修改了默认的流上下文?

以上是关于使用 Charles 和 SSL Apple 推送地址的主要内容,如果未能解决你的问题,请参考以下文章

SSL 代理/Charles 和 Android 问题 [关闭]

SSL 代理/Charles 和 Android 问题 [关闭]

生成推送通知 SSL 证书的问题

Apple 推送通知服务 (APNS):反馈服务响应缺少字节?

使用 HTTP 查询时的 Charles Proxy 和 Windows Phone(需要 SSL 证书)

无法连接到 ssl://gateway.push.apple.com:2195(连接超时)