我必须确认我的用于发送推送通知的 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 中发生了什么。所以我的脚本没有使用代理...
你知道为什么吗?
最佳答案
这是因为您将带有 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 提供的精细控制。
关于php - 使用 Charles 和 SSL Apple 推送地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14154235/