Apple нажимает с помощью прокси-сервера и контекста потока
Мне нужно отправить push-уведомление на устройства iOS. Мое соединение должно быть включено через прокси-сервер. Я перепробовал все, но безуспешно. У меня истекло время ожидания соединения с ошибкой 110. Это работает с cURL, если я просто попытаюсь подключиться к адресу Apple push. Я не знаю, в чем проблема. Конфигурация прокси-сервера? Неправильная реализация PHP stream_context?
Вот мой код:
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'certificate.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', 'my_passphrase');
stream_context_set_option($ctx, 'ssl', 'verify_peer', false);
stream_context_set_option($ctx, 'http', 'proxy', 'tcp://my-proxy.net:8080');
stream_context_set_option($ctx, 'http', 'request_fulluri', true);
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err,$errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
var_dump($fp);
var_dump($err);
var_dump($errstr);
exit;
У вас есть идея?
РЕДАКТИРОВАТЬ:
Может ли это быть напрямую связано с Кальмар? Я только что выяснил, что прокси-сервер работает с Squid.
Я также пытаюсь использовать функцию fopen()
вместо stream_socket_client()
, но, похоже, она не поддерживает протокол ssl.
Вот мои выходные данные var_dump: bool(false) int(110) строка(20) "Время ожидания соединения истекло"
У меня также есть это предупреждение: Предупреждение: stream_socket_client(): не удается подключиться к ssl://gateway.sandbox.push.apple.com: 2195 (Время ожидания соединения истекло) в/share/www/website/test.php в строке 22
2 answers
Возможно, ваш прокси-сервер просто не позволяет открывать порт 2195.
Push-уведомление iPhone Не удается подключиться к серверу SSL
Я думаю, вы тоже:
- Нужно поговорить с людьми, которые управляют прокси-сервером, чтобы узнать, открыт ли порт 2195 или нет.
Или
- Настройте тестовый сервер, прослушивающий порт 2195, а затем попробуйте выполнить тестовое подключение к нему через прокси-сервер. Это должно позволить вам проверить, является ли прокси-сервер блокировка запросов на подключение.
Или
- Проверьте, может ли Curl открыть соединение с помощью прокси-сервера.
Что делается путем установки параметров:
// sets the proxy to go through
curl_setopt($ch, CURLOPT_PROXY, $proxy);
// sets to use a tunnel proxy which most http proxies are
curl_setopt($ch, CURLOPT_HTTPTUNNELPROXY, $proxy);
Полный код тестирования здесь.
- создайте контекст SSL
- откройте tcp-сокет для прокси-сервера
- отправить запрос прокси-серверу для подключения к APNS
- как только соединение будет принято, включите SSL
Посмотрите мой ответ в этом посте: Отправьте Push-уведомление в APNS через прокси-сервер