使用 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 问题 [关闭]
Apple 推送通知服务 (APNS):反馈服务响应缺少字节?