2012-12-19 6 views
6

Ich muss Push-Benachrichtigung an iOS-Geräte senden. Meine Verbindung muss über einen Proxy aktiviert werden. Ich habe alles versucht, aber ohne Erfolg. Ich habe einen Fehler 110 Connection Timed Out. Es funktioniert mit cURL, wenn ich versuche, eine Verbindung zur Apple Push-Adresse herzustellen. Ich weiß nicht, wo das Problem liegt. Proxy-Konfiguration? PHP stream_context falsche Implementierung?Apple Push mit Proxy und stream_context

Hier ist mein Code:

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

Haben Sie eine Idee?

EDIT:

Kann es direkt an Squid verknüpft werden? Ich habe gerade herausgefunden, dass der Proxy mit Squid läuft. Ich versuche auch mit Funktion anstelle von stream_socket_client(), aber es scheint, dass es SSL-Protokoll nicht erlaubt.

Hier ist meine Var_dump Ausgänge: bool (false) int (110) string (20) "Connection timed out"

ich diese Warnung auch haben: Warnung: stream_socket_client(): nicht in der Lage zu ssl verbinden: //gateway.sandbox.push.apple.com:2195 (Zeitüberschreitung der Verbindung) in /share/www/website/test.php on line 22

+0

Könnten wir diese var_dump Ausgänge bitte sehen? –

+0

@ EduárdMoldován ja es ist fertig – Pierre

+0

Irgendwelche Hilfe hier: http://StackOverflow.com/Questions/6372308/Apns-ssl-gateway-Sandbox-Push-Apple-Com2195-connection-fails? Gibt es eine Chance, dass Ihr Isp den Port blockiert? Oder dein eigener Router? –

Antwort

1

Es könnte einfach sein, dass Ihr Proxy Port 2195 nicht geöffnet werden kann .

iPhone Push Notification Unable to Connect to the SSL Server

Ich denke, man entweder:

  • zu den Menschen sprechen müssen, die den Proxy laufen, um zu sehen, ob Port 2195 geöffnet ist oder nicht.

oder

  • Richten Sie einen Test-Server auf Port 2195 zu hören und dann versuchen, eine Testverbindung, um es über den Proxy zu tun. Damit können Sie testen, ob es der Proxy ist, der die Verbindungsanforderungen blockiert.

oder

  • Testen Sie, ob Locke kann die Verbindung öffnen Sie einen Proxy verwenden.

, die durch die Einstellung der Optionen erfolgt:

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

Volltestcode here.

+0

Nein, die Ports 2195 und 2196 sind offen. Wenn ich fopen() verwende kann ich eine Apple-Verbindung über https – Pierre

+0

protokollieren Nur um zu überprüfen, meinst du, so etwas funktioniert? d. h. fopen Sie mit dem Kontext, den Sie erstellt haben? fopen ('http://gateway.sandbox.push.apple.com:2195', "r", falsch, $ ctx); – Danack

+0

Hum nein ich habe: "Fehler beim Öffnen des Streams" – Pierre

0
  • den SSL-Kontext
  • einen TCP-Socket an den Proxy-
  • Sendeauftrag an den Proxy öffnen erstellen, um APNs
  • zu verbinden, wenn Verbindung SSL aktiviert akzeptiert

Werfen Sie einen Blick bei meiner Antwort in diesem Beitrag: Send Push Notification to APNS through proxy