我已经搜索了如何在Python中创建Openfire帐户,并找到了以下回答。
我尝试由Joe Hildebrand提供并在运行Openfire 3.8.1的机器上运行代码
python register.py foo@localhost bar创建一个帐户。
然而,我得到了“错误!”消息。
我错过了什么吗?
编辑
删除, debug[]并再次尝试之后,我得到以下消息:
Invalid debugflag given: always
Invalid debugflag given: nodebuilder
DEBUG:
DEBUG: Debug created for /usr/local/lib/python2.7/dist-packages/xmpppy-0.5.0rc1-py2.7.egg/xmpp/client.py
DEBUG: flags defined: always,nodebuilder
DEBUG: socket start Plugging <xmpp.transports.TCPsocket instance at 0x19991b8> into <xmpp.client.Client instance at 0x1988fc8>
DEBUG: socket warn An error occurred while looking up _xmpp-client._tcp.localhost
DEBUG: socket start Successfully connected to remote host ('localhost', 5222)
DEBUG: dispatcher start Plugging <xmpp.dispatcher.Dispatcher instance at 0x199b2d8> into <xmpp.client.Client instance at 0x1988fc8>
DEBUG: dispatcher info Registering namespace "unknown"
DEBUG: dispatcher info Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(unknown)
DEBUG: dispatcher info Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(unknown)
DEBUG: dispatcher info Registering namespace "http://etherx.jabber.org/streams"
DEBUG: dispatcher info Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)
DEBUG: dispatcher info Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)
DEBUG: dispatcher info Registering namespace "jabber:client"
DEBUG: dispatcher info Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(jabber:client)
DEBUG: dispatcher info Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(jabber:client)
DEBUG: dispatcher info Registering protocol "iq" as <class 'xmpp.protocol.Iq'>(jabber:client)
DEBUG: dispatcher info Registering protocol "presence" as <class 'xmpp.protocol.Presence'>(jabber:client)
DEBUG: dispatcher info Registering protocol "message" as <class 'xmpp.protocol.Message'>(jabber:client)
DEBUG: dispatcher info Registering handler <bound method Dispatcher.streamErrorHandler of <xmpp.dispatcher.Dispatcher instance at 0x199b2d8>> for "error" type-> ns->(http://etherx.jabber.org/streams)
DEBUG: dispatcher warn Registering protocol "error" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)
DEBUG: socket sent <?xml version='1.0'?>
<stream:stream xmlns="jabber:client" to="localhost" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" >
DEBUG: socket got <?xml version='1.0' encoding='UTF-8'?>
<stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="mymachine" id="1724a327" xml:lang="en" version="1.0">
DEBUG: socket got <stream:features>
<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls">
</starttls>
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<mechanism>DIGEST-MD5</mechanism>
<mechanism>PLAIN</mechanism>
<mechanism>ANONYMOUS</mechanism>
<mechanism>CRAM-MD5</mechanism>
</mechanisms>
<compression xmlns="http://jabber.org/features/compress">
<method>zlib</method>
</compression>
<auth xmlns="http://jabber.org/features/iq-auth"/>
<register xmlns="http://jabber.org/features/iq-register"/>
</stream:features>
DEBUG: dispatcher warn Unknown stanza: features
DEBUG: dispatcher ok Dispatching unknown stanza with type-> props->[u'urn:ietf:params:xml:ns:xmpp-tls', u'urn:ietf:params:xml:ns:xmpp-sasl', u'http://jabber.org/features/compress', u'http://jabber.org/features/iq-auth', u'http://jabber.org/features/iq-register'] id->None
DEBUG: tls start Plugging <xmpp.transports.TLS instance at 0x199b908> into <xmpp.client.Client instance at 0x1988fc8>
DEBUG: tls ok TLS supported by remote server. Requesting TLS start.
DEBUG: dispatcher info Registering handler <bound method TLS.StartTLSHandler of <xmpp.transports.TLS instance at 0x199b908>> for "proceed" type-> ns->(urn:ietf:params:xml:ns:xmpp-tls)
DEBUG: dispatcher warn Registering namespace "urn:ietf:params:xml:ns:xmpp-tls"
DEBUG: dispatcher info Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(urn:ietf:params:xml:ns:xmpp-tls)
DEBUG: dispatcher info Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(urn:ietf:params:xml:ns:xmpp-tls)
DEBUG: dispatcher warn Registering protocol "proceed" as <class 'xmpp.protocol.Protocol'>(urn:ietf:params:xml:ns:xmpp-tls)
DEBUG: dispatcher info Registering handler <bound method TLS.StartTLSHandler of <xmpp.transports.TLS instance at 0x199b908>> for "failure" type-> ns->(urn:ietf:params:xml:ns:xmpp-tls)
DEBUG: dispatcher warn Registering protocol "failure" as <class 'xmpp.protocol.Protocol'>(urn:ietf:params:xml:ns:xmpp-tls)
DEBUG: socket sent <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
DEBUG: socket got <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
DEBUG: dispatcher ok Got urn:ietf:params:xml:ns:xmpp-tls/proceed stanza
DEBUG: dispatcher ok Dispatching proceed stanza with type-> props->[] id->None
DEBUG: tls ok Got starttls proceed response. Switching to TLS/SSL...
DEBUG: dispatcher stop Plugging <xmpp.dispatcher.Dispatcher instance at 0x199b2d8> out of <xmpp.client.Client instance at 0x1988fc8>.
DEBUG: dispatcher start Plugging <xmpp.dispatcher.Dispatcher instance at 0x19a4560> into <xmpp.client.Client instance at 0x1988fc8>
DEBUG: dispatcher info Registering namespace "unknown"
DEBUG: dispatcher info Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(unknown)
DEBUG: dispatcher info Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(unknown)
DEBUG: dispatcher info Registering namespace "http://etherx.jabber.org/streams"
DEBUG: dispatcher info Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)
DEBUG: dispatcher info Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)
DEBUG: dispatcher info Registering namespace "jabber:client"
DEBUG: dispatcher info Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(jabber:client)
DEBUG: dispatcher info Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(jabber:client)
DEBUG: dispatcher info Registering protocol "iq" as <class 'xmpp.protocol.Iq'>(jabber:client)
DEBUG: dispatcher info Registering protocol "presence" as <class 'xmpp.protocol.Presence'>(jabber:client)
DEBUG: dispatcher info Registering protocol "message" as <class 'xmpp.protocol.Message'>(jabber:client)
DEBUG: dispatcher info Registering handler <bound method Dispatcher.streamErrorHandler of <xmpp.dispatcher.Dispatcher instance at 0x19a4560>> for "error" type-> ns->(http://etherx.jabber.org/streams)
DEBUG: dispatcher warn Registering protocol "error" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)
DEBUG: socket sent <?xml version='1.0'?>
<stream:stream xmlns="jabber:client" to="localhost" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" >
DEBUG: socket sent <iq to="localhost" type="get" id="1">
<query xmlns="jabber:iq:register" />
</iq>
DEBUG: dispatcher wait Waiting for ID:1 with timeout 25...
DEBUG: socket got <?xml version='1.0' encoding='UTF-8'?>
<stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="mymachine" id="1724a327" xml:lang="en" version="1.0">
<stream:features>
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<mechanism>DIGEST-MD5</mechanism>
<mechanism>PLAIN</mechanism>
<mechanism>ANONYMOUS</mechanism>
<mechanism>CRAM-MD5</mechanism>
</mechanisms>
<compression xmlns="http://jabber.org/features/compress">
<method>zlib</method>
</compression>
<auth xmlns="http://jabber.org/features/iq-auth"/>
<register xmlns="http://jabber.org/features/iq-register"/>
</stream:features>
DEBUG: dispatcher warn Unknown stanza: features
DEBUG: dispatcher ok Dispatching unknown stanza with type-> props->[u'urn:ietf:params:xml:ns:xmpp-sasl', u'http://jabber.org/features/compress', u'http://jabber.org/features/iq-auth', u'http://jabber.org/features/iq-register'] id->None
DEBUG: socket got <iq type="error" id="1" from="localhost" to="mymachine/1724a327">
<query xmlns="jabber:iq:register"/>
<error code="400" type="modify">
<bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>
DEBUG: dispatcher ok Got jabber:client/iq stanza
DEBUG: dispatcher ok Dispatching iq stanza with type->error props->[u'jabber:iq:register', u'jabber:client'] id->1
DEBUG: dispatcher ok Expected stanza arrived!
DEBUG: socket sent <iq to="localhost" type="set" id="2">
<query xmlns="jabber:iq:register">
<username>foo</username>
<password>bar</password>
</query>
</iq>
DEBUG: dispatcher wait Waiting for ID:2 with timeout 25...
DEBUG: socket got <iq type="error" id="2" from="localhost" to="mymachine/1724a327">
<query xmlns="jabber:iq:register">
<username>foo</username>
<password>bar</password>
</query>
<error code="400" type="modify">
<bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>
DEBUG: dispatcher ok Got jabber:client/iq stanza
DEBUG: dispatcher ok Dispatching iq stanza with type->error props->[u'jabber:iq:register', u'jabber:client'] id->2
DEBUG: dispatcher ok Expected stanza arrived!
Error! 发布于 2013-04-08 21:44:19
假设您正在连接,最常见的错误是用户已经存在,或者服务器不支持注册。
但是,上面的错误跟踪显示您得到的是错误400,而不是403或409。403将意味着注册被关闭,而409将意味着用户已经存在。
通过向无效的JID发送OpenFire 3.8.1,我能够复制您的问题。配置OpenFire时,可以指定域。该域必须位于Python脚本的命令行上指定的JID中。例如,我在配置时指定了"localhost“。当我使用"foo@mymachine“而不是"foo@localhost”时,我得到了400个错误。如果您需要域与机器名称不同(非常常见),那么要么使用DNS SRV记录(请参阅RFC 6120,第3.2节),要么更改Python代码,以便这一行:
cli=xmpp.Client(jid.getDomain())看起来是这样的:
cli=xmpp.Client("hostname")后者是一个快速的黑客,但应该让你起来和运行。
https://stackoverflow.com/questions/15875057
复制相似问题