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

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

你知道为什么吗 ?

4

1 回答 1

2

这是因为您将带有http选项的上下文传递给stream_socket_client()- 以及更多,以至于您使用了ssl://包装器而不是http://or https://

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

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

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

于 2013-01-04T09:27:35.747 回答