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

Author: Pierre, 2012-12-19

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

Полный код тестирования здесь.

 1
Author: Danack, 2017-05-23 12:22:23
  • создайте контекст SSL
  • откройте tcp-сокет для прокси-сервера
  • отправить запрос прокси-серверу для подключения к APNS
  • как только соединение будет принято, включите SSL

Посмотрите мой ответ в этом посте: Отправьте Push-уведомление в APNS через прокси-сервер

 0
Author: flav, 2017-05-23 10:26:59