J'essaie d'envoyer des notifications push à un iPhone à l'aide de Python. J'ai exporté mon
ssl.SSLError: (1, '_ssl.c:485:
error:14094416:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate unknown')
5 Réponses :
Avez-vous considéré comme le Twisted paquet? Le code ci-dessous est pris à partir de ICI :
from struct import pack from OpenSSL import SSL from twisted.internet import reactor from twisted.internet.protocol import ClientFactory, Protocol from twisted.internet.ssl import ClientContextFactory APNS_SERVER_HOSTNAME = "<insert the push hostname from your iPhone developer portal>" APNS_SERVER_PORT = 2195 APNS_SSL_CERTIFICATE_FILE = "<your ssl certificate.pem>" APNS_SSL_PRIVATE_KEY_FILE = "<your ssl private key.pem>" class APNSClientContextFactory(ClientContextFactory): def __init__(self): self.ctx = SSL.Context(SSL.SSLv3_METHOD) self.ctx.use_certificate_file(APNS_SSL_CERTIFICATE_FILE) self.ctx.use_privatekey_file(APNS_SSL_PRIVATE_KEY_FILE) def getContext(self): return self.ctx class APNSProtocol(Protocol): def sendMessage(self, deviceToken, payload): # notification messages are binary messages in network order # using the following format: # <1 byte command> <2 bytes length><token> <2 bytes length><payload> fmt = "!cH32cH%dc" % len(payload) command = 0 msg = struct.pack(fmt, command, deviceToken, len(payload), payload) self.transport.write(msg) class APNSClientFactory(ClientFactory): def buildProtocol(self, addr): print "Connected to APNS Server %s:%u" % (addr.host, addr.port) return APNSProtocol() def clientConnectionLost(self, connector, reason): print "Lost connection. Reason: %s" % reason def clientConnectionFailed(self, connector, reason): print "Connection failed. Reason: %s" % reason if __name__ == '__main__': reactor.connectSSL(APNS_SERVER_HOSTNAME, APNS_SERVER_PORT, APNSClientFactory(), APNSClientContextFactory()) reactor.run()
@Coonj Avez-vous essayé cela avec un succès? Avez-vous des exemples d'utilisation du code pour envoyer des messages? Merci.
J'ai récemment fait ceci en utilisant django - http: // Leecutsco .de / 2009/07/14 / Push-on-the-iPhone / P>
peut être utile? Il ne faut utiliser aucune bibliothèque supplémentaire que celles incluses avec Python déjà. Ne prendrait pas beaucoup pour extraire la méthode Send_Message () out. P>
Je suggère de mettre le contenu à la réponse au lieu du lien. Finalement, le lien peut être obsolète, auquel cas, d'autres personnes ne peuvent pas bénéficier de la réponse.
Tout comme @walty prédit, le lien s'est cassé. Le nouveau lien est Leecutsco.de/2009/07/14/punsh -on-the-iphone - ce serait bien si le contenu était en réponse.
J'apprécierais si vous recréez l'URL, cela me redirige de ne pas trouver la page.
Il y avait quelques bugs dans le code posté à l'origine, voici donc une version corrigée qui fonctionne pour moi.
J'ai essayé les deux J'ai déjà fait un post avec des détails et des extraits de code Ici , donc je vais simplement vous référer là-bas. p> APNSWRAPPER CODE> et le code de Lee Peckham et que je ne pouvais pas le faire fonctionner sous Snow Leopard avec Python 2.6. Après beaucoup d'essai et d'erreur, il a finalement fonctionné avec
pyopenssl code>. p>
Essayez de mettre à jour la dernière version APNSWRAPPER (0.4). Il existe une prise en charge de la ligne de commande OpenSSL (OpenSSL S_Client) maintenant. P>
Alors, quel était le problème? Certificat ou service?