iOS中的Apple推送通知(APN)服务服务器端Python 2脚本

iOS中的Apple推送通知(APN)服务服务器端Python 2脚本,ios,sockets,python-2.7,localhost,apple-push-notifications,Ios,Sockets,Python 2.7,Localhost,Apple Push Notifications,我已将iOS应用程序配置为启用了Apple推送通知(APN)服务。我能够用PHP和Python 3脚本向设备发送通知。我用本地机器在本地服务器上测试了这两个。但是现在我需要用Python2编写脚本 下面是我写的脚本,当我运行它时,我什么也得不到。既不向我的设备发送通知,也不在命令行中显示错误 import socket, ssl, json, struct import binascii import os deviceToken = 'my_device_tocken_without_spa

我已将iOS应用程序配置为启用了Apple推送通知(APN)服务。我能够用PHP和Python 3脚本向设备发送通知。我用本地机器在本地服务器上测试了这两个。但是现在我需要用Python2编写脚本

下面是我写的脚本,当我运行它时,我什么也得不到。既不向我的设备发送通知,也不在命令行中显示错误

import socket, ssl, json, struct
import binascii
import os

deviceToken = 'my_device_tocken_without_spaces' 

thePayLoad = {
     'aps': {
          'alert':'My first push notification!',
          'sound':'default'
          }
     }

theCertfile = 'ck3_2.pem'

theHost = ( 'gateway.sandbox.push.apple.com', 2195 )

data = json.dumps( thePayLoad )

theFormat = '!BH32sH%ds' % len(data)

theNotification = struct.pack( theFormat, 0, 32, deviceToken, len(data), data )

ssl_sock = ssl.wrap_socket( socket.socket( socket.AF_INET, socket.SOCK_STREAM ), certfile = theCertfile )

ssl_sock.connect( theHost )

ssl_sock.write( theNotification )

ssl_sock.close()
我错过了什么?我如何检查错误发生在哪里


我在localhost中使用XAMPP运行PHP脚本,在命令行中运行Python脚本,因为我无法使用XAMPP设置Python,我已经发布了一个问题。

我认为您的代码没有问题。您可以尝试在
ssl\u sock.connect(主机)

它将打印有关您连接的ssl的信息

或者,您可以创建一个示例服务器,更改客户端中的连接,并针对服务器进行测试
  • 错误处理
  • 支持增强的消息格式和在错误响应之前发送的自动重发消息
  • 性能卓越的非阻塞ssl套接字连接

您导入了binascii,但忘了使用它。 将令牌和json数据转换为字节数组,例如:

deviceToken = binascii.a2b_hex('my_device_tocken_without_spaces')


是的,你说得对。代码几乎是正确的,它在远程服务器中运行,但在本地计算机中不运行。无论如何,试图在本地计算机上运行时出现的错误是
文件“/System/Library/Frameworks/Python.Frameworks/Versions/2.7/lib/python2.7/ssl.py”,第333行,在connect self.\u real\u connect(addr,False)文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py”,第314行,在_real_connect self.ca_certs,self.ciphers)ssl.SSLError:[Errno 336265218]_ssl.c:351:error:140B0002:ssl例程:ssl_CTX_use_PrivateKey_file:system lib
中,您的证书文件路径正确吗?或者拥有访问权限?。我发现了类似的错误
deviceToken = binascii.a2b_hex('my_device_tocken_without_spaces')
data = json.dumps(thePayLoad, separators=(',', ':'), ensure_ascii=False).encode('utf-8')