Python 尝试将FCM CCS服务器与sleekxmpp连接时出错

Python 尝试将FCM CCS服务器与sleekxmpp连接时出错,python,google-cloud-messaging,xmpp,firebase-cloud-messaging,Python,Google Cloud Messaging,Xmpp,Firebase Cloud Messaging,我正在尝试使用sleekxmpp 1.3.1构建一个非常简单的python3程序,该程序将能够连接Firebase云消息服务器。我在读取XML流时遇到了一个奇怪的错误,下面的代码有问题。我怎样才能修好它 我们可以从控制台输出中看到STARTTLS已启用。除了禁用它,我没有找到其他方法,但它并没有解决这个错误 根据,发送的第一条消息似乎有效,但仍然显示“从xml流读取错误” python代码 控制台输出 DEBUG base:328加载插件:rfc6120:流功能:STARTTLS 调试库:328

我正在尝试使用sleekxmpp 1.3.1构建一个非常简单的python3程序,该程序将能够连接Firebase云消息服务器。我在读取XML流时遇到了一个奇怪的
错误,下面的代码有问题。我怎样才能修好它

我们可以从控制台输出中看到STARTTLS已启用。除了禁用它,我没有找到其他方法,但它并没有解决这个错误

根据,发送的第一条消息似乎有效,但仍然显示“从xml流读取错误”

python代码 控制台输出
DEBUG base:328加载插件:rfc6120:流功能:STARTTLS
调试库:328加载的插件:RFC6120:流功能:资源绑定
调试库:328加载插件:RFC3920:流功能:启动会话
调试库:328加载插件:RFC6121:流功能:花名册版本控制
调试库:328加载插件:RFC6121:流功能:订阅预批准
调试库:328加载插件:RFC6120:流功能:SASL
调试xmlstream:546连接到66.102.1.188:5236
调试xmlstream:1162事件已触发:已连接
调试状态机:118===转换已断开->已连接
调试xmlstream:1444启动处理程序线程
调试xmlstream:1662正在加载事件运行程序
调试xmlstream:1309发送(IMMED):
错误xmlstream:1492从XML流读取时出错。
调试xmlstream:1162事件已触发:会话\u结束
调试xmlstream:1309发送(IMMED):
调试xmlstream:1162事件已触发:套接字错误
警告xmlstream:1342未能发送b“”
调试xmlstream:1162事件已触发:会话\u结束
调试xmlstream:1397正在等待3个线程退出。
调试xmlstream:1375已停止事件运行程序线程。剩下两条线。
调试xmlstream:1375已停止发送线程。1线程仍然存在。
调试计划程序:200退出计划程序线程
调试xmlstream:1375已停止调度程序线程。剩下0个线程。
调试xmlstream:1162事件已触发:套接字错误
调试xmlstream:1162事件已触发:已断开连接
调试状态机:118===转换已连接->已断开连接
信息xmlstream:720正在等待来自服务器的消息
调试xmlstream:1162事件已触发:套接字错误
调试xmlstream:1162事件已触发:已断开连接
调试状态机:118===转换已断开->已断开

我找到了答案。将“use\u tls=True”替换为“use\u ssl=True”,效果会更好。

为了完整起见,这将是一个工作实现的示例:

from sleekxmpp.clientxmpp import ClientXMPP
import logging
import socket
import json
import uuid

logging.basicConfig(level=logging.DEBUG, format="%(levelname)7s %(module)12s:%(lineno)-4s %(message)s")

FCM_SERVER_URL = "fcm-xmpp.googleapis.com"
FCM_SERVER_PORT = 5236
FCM_SERVER_KEY = "XXXXXXXXXXX" # <- Your Server Key
FCM_SENDER_ID = "XXXXXXXXXXX" # <- Your Sender ID
FCM_JID = FCM_SENDER_ID + "@gcm.googleapis.com"
FCM_SERVER_IP = socket.gethostbyname(FCM_SERVER_URL)
TOPIC = "/topics/info"

body = {
    "to": TOPIC, 
    "message_id": uuid.uuid4().hex,
    "data": { "msg": "This is the content"}
}
message = "<message><gcm xmlns='google:mobile:data'>"+json.dumps(body)+"</gcm></message>"

class Client(ClientXMPP):
    def __init__(self):
        ClientXMPP.__init__(self, FCM_JID, FCM_SERVER_KEY, sasl_mech="PLAIN")
        self.add_event_handler("session_start", self.start)
        self.auto_reconnect = False
        self.connect((FCM_SERVER_IP, FCM_SERVER_PORT), use_tls = True, use_ssl = True, reattempt = False)
        self.process(block=True)
    def start(self, event):
        self.send_raw(message)
        self.disconnect(wait=True)


Client()
从sleekxmpp.clientxmpp导入clientxmpp
导入日志记录
导入套接字
导入json
导入uuid
logging.basicConfig(level=logging.DEBUG,format=“%(levelname)7s%(模块)12s:%(行号)-4s%(消息)s”)
FCM_SERVER_URL=“FCM xmpp.googleapis.com”
FCM_服务器_端口=5236

FCM_SERVER_KEY=“xxxxxxxxxx”#您只需要设置use_ssl=true请检查
  DEBUG         base:328  Loaded Plugin: RFC 6120: Stream Feature: STARTTLS
  DEBUG         base:328  Loaded Plugin: RFC 6120: Stream Feature: Resource Binding
  DEBUG         base:328  Loaded Plugin: RFC 3920: Stream Feature: Start Session
  DEBUG         base:328  Loaded Plugin: RFC 6121: Stream Feature: Roster Versioning
  DEBUG         base:328  Loaded Plugin: RFC 6121: Stream Feature: Subscription Pre-Approval
  DEBUG         base:328  Loaded Plugin: RFC 6120: Stream Feature: SASL
  DEBUG    xmlstream:546  Connecting to 66.102.1.188:5236
  DEBUG    xmlstream:1162 Event triggered: connected
  DEBUG statemachine:118   ==== TRANSITION disconnected -> connected
  DEBUG    xmlstream:1444 Starting HANDLER THREAD
  DEBUG    xmlstream:1662 Loading event runner
  DEBUG    xmlstream:1309 SEND (IMMED): <stream:stream to="gcm.googleapis.com" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" xml:lang='en' version="1.0">
  ERROR    xmlstream:1492 Error reading from XML stream.
  DEBUG    xmlstream:1162 Event triggered: session_end
  DEBUG    xmlstream:1309 SEND (IMMED): </stream:stream>
  DEBUG    xmlstream:1162 Event triggered: socket_error
WARNING    xmlstream:1342 Failed to send b'</stream:stream>'
  DEBUG    xmlstream:1162 Event triggered: session_end
  DEBUG    xmlstream:1397 Waiting for 3 threads to exit.
  DEBUG    xmlstream:1375 Stopped event runner thread. 2 threads remain.
  DEBUG    xmlstream:1375 Stopped send thread. 1 threads remain.
  DEBUG    scheduler:200  Quitting Scheduler thread
  DEBUG    xmlstream:1375 Stopped scheduler thread. 0 threads remain.
  DEBUG    xmlstream:1162 Event triggered: socket_error
  DEBUG    xmlstream:1162 Event triggered: disconnected
  DEBUG statemachine:118   ==== TRANSITION connected -> disconnected
   INFO    xmlstream:720  Waiting for </stream:stream> from server
  DEBUG    xmlstream:1162 Event triggered: socket_error
  DEBUG    xmlstream:1162 Event triggered: disconnected
  DEBUG statemachine:118   ==== TRANSITION disconnected -> disconnected
from sleekxmpp.clientxmpp import ClientXMPP
import logging
import socket
import json
import uuid

logging.basicConfig(level=logging.DEBUG, format="%(levelname)7s %(module)12s:%(lineno)-4s %(message)s")

FCM_SERVER_URL = "fcm-xmpp.googleapis.com"
FCM_SERVER_PORT = 5236
FCM_SERVER_KEY = "XXXXXXXXXXX" # <- Your Server Key
FCM_SENDER_ID = "XXXXXXXXXXX" # <- Your Sender ID
FCM_JID = FCM_SENDER_ID + "@gcm.googleapis.com"
FCM_SERVER_IP = socket.gethostbyname(FCM_SERVER_URL)
TOPIC = "/topics/info"

body = {
    "to": TOPIC, 
    "message_id": uuid.uuid4().hex,
    "data": { "msg": "This is the content"}
}
message = "<message><gcm xmlns='google:mobile:data'>"+json.dumps(body)+"</gcm></message>"

class Client(ClientXMPP):
    def __init__(self):
        ClientXMPP.__init__(self, FCM_JID, FCM_SERVER_KEY, sasl_mech="PLAIN")
        self.add_event_handler("session_start", self.start)
        self.auto_reconnect = False
        self.connect((FCM_SERVER_IP, FCM_SERVER_PORT), use_tls = True, use_ssl = True, reattempt = False)
        self.process(block=True)
    def start(self, event):
        self.send_raw(message)
        self.disconnect(wait=True)


Client()