2013-01-04 16 views
3

我必须确认发送推送通知的PHP代码是否与代理一起工作。我安装了Charles,我可以通过代理(127.0.0.1:8888)观看我的所有网络流量。使用Charles和SSL苹果推送地址

现在我想看看我的脚本是否正确地用于推送通知。 我:

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); 

我得到我的推送通知,但我不能看到什么是在查尔斯发生。所以我的脚本没有使用代理...

你知道为什么吗?

+2

你是什么意思你安装我!? – Charles

+0

@Charles;)我的意思是http://www.charlesproxy.com – Pierre

+0

确实。所以,这里疯狂猜测,但是我们知道*流上下文中的* http * proxy选项也适用于* https *吗? – Charles

回答

2

这是因为你通过上下文与http选项stream_socket_client() - 多到你用来代替http://https://ssl://包装点。

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

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

这可能是一个更好的主意,无论如何,因为它是不可能的,你需要精细控制是手动执行HTTP会给你为苹果的API。

+0

好吧,我明白你的意思,但现在我有这个错误:fopen(gateway.sandbox.push.apple.com:2195)[function.fopen]:无法打开流:无法通过代理连接到HTTPS服务器 – Pierre

+0

@Pierre Well这听起来像查尔斯没有正确设置传递SSL通过,这不是我真正了解的。如果您将网络浏览器配置为使用代理并尝试访问https网址,它是否工作? Charles会记录任何错误吗? – DaveRandom

+0

通过我的浏览器我可以访问https网址(如脸书) – Pierre