2012-12-19 42 views
6

我必須向iOS設備發送推送通知。我的連接必須通過代理來啓用。我嘗試了一切,但沒有成功。我有一個錯誤110連接超時。如果我只是嘗試連接到Apple推送的地址,它正與cURL一起工作。我不知道問題出在哪裏。代理配置? PHP stream_context錯誤的實現?帶代理的Apple Push和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輸出:布爾(假)INT(110)字符串(20) 「連接超時」

我也有這樣的警告:警告:stream_socket_client():無法連接到SSL: //gateway.sandbox.push.apple.com:2195(連接超時)在/share/www/website/test.php在線22

+0

我們可以看到那些var_dump輸出嗎? –

+0

@EduárdMoldován是的它已完成 – Pierre

+0

任何幫助在這裏:http://stackoverflow.com/questions/6372308/apns-ssl-gateway-sandbox-push-apple-com2195-connection-fails?你有沒有機會阻止端口?或者你自己的路由器? –

回答

1

它可能只是你的代理不允許端口2195被打開。

iPhone Push Notification Unable to Connect to the SSL Server

我猜您:

  • 需要跟誰運行代理,看看端口2195是打開還是不是人。

  • 設置一個測試服務器偵聽端口2195,然後嘗試做通過代理一個測試連接到它。這應該允許您測試它是否是阻止連接請求的代理。

  • 測試是否捲曲可以打開使用代理的連接。

這是通過設置選項來完成:

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

完整的測試代碼here

+0

不,端口2195和2196是開放的。如果我使用fopen(),我可以通過https登錄一個Apple連接 – Pierre

+0

只是爲了檢查,你的意思是這樣的工作?即與您創建的上下文打成一片? fopen('http://gateway.sandbox.push.apple.com:2195',「r」,false,$ ctx); – Danack

+0

哼,不,我有:「未能打開流」 – Pierre