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?